Никогда не работал с VBA. Сегодня пришлось, но почему-то ничего не выходит. (Задача крутая ).
VBA script создаёт .xls file
Другой скрипт должен его открыть из директории C:\Temp и вставить следующую запись в том же формате. И так далее.
Sub Main()
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")
' Make Excel visible through the Application object.
ExcelSheet.Application.Visible = True
' Place some text in the first cell of the sheet.
ExcelSheet.Application.Cells(1, 1).Value = "Exp: 0"
' Save the sheet to C:\Temp\VacationHrs.xls directory.
ExcelSheet.SaveAs "C:\Temp\VacationHrs.XLS"
' Close Excel with the Quit method on the Application object.
ExcelSheet.Application.Quit
' Release the object variable.
Set ExcelSheet = Nothing
Open "C:\Temp\VacationHrs.XLS" For Random As Object
End Sub
То есть вот этот statement не работает:
Open "C:\Temp\VacationHrs.XLS" For Random As Object
Наверняка, что-то простое до глупости. Но не открывается и не пишется.
А вот эту строку:
ExcelSheet.Application.Cells(1, 1).Value = "Exp: 0"
мне нужно повторить несколько раз с другими значениями. То есть, чтобы получился xl spreadsheet с записями сверху вниз через поле: строка, далее - пустая строка, далее - снова запись, далее - опять пустая строка и снова запись и т.д.
Помогите, пожалуйста. Нужно срочно и разбираться некогда.
Помогите (не материально:). VBA, Excel.
-
- Уже с Приветом
- Posts: 11040
- Joined: 15 May 2001 09:01
- Location: Minneapolis, MN (10000 lakes) USA
Помогите (не материально:). VBA, Excel.
Мимоходом...
-
- Уже с Приветом
- Posts: 1211
- Joined: 02 Jul 2000 09:01
- Location: SFBA
Code: Select all
Open "C:\Temp\VacationHrs.XLS" For Random As Object
Удачи!
-
- Уже с Приветом
- Posts: 11040
- Joined: 15 May 2001 09:01
- Location: Minneapolis, MN (10000 lakes) USA
Big Cheese wrote:Сразу скажу, я не спец в VBA и не совсем понял, что данная строчка должна делать по замыслу, но по синтаксису похоже, что Вы пытаетесь открыть VacationHrs.xls как эээ... нетипизированый файл, что-ли. Если Вы хотите редактировать .xls из скрипта, то я думаю нужно использовать Application.Workbooks.Open "c:\temp\VacationHrs.xml", потом в коллекции Workbooks найти этот Workbook (может, можно сразу после вызова Open взять значение свойства Workbooks.ActiveWorkbook). Если имелось в виду другое действие, то уточните, plz.Code: Select all
Open "C:\Temp\VacationHrs.XLS" For Random As Object
Удачи!
По замыслу (и в соответствии с Help) эта строчка: Open "C:\Temp\VacationHrs.XLS" For Random As Object
должна открыть созданный файл из указанной директории. "Random" означает что этот файл можно и просто читать, и туда что-то вставлять. Пробовал это и с простым txt файлом - не открывается.
Мимоходом...
-
- Уже с Приветом
- Posts: 672
- Joined: 11 Apr 2001 09:01
- Location: Russia, NN
По-моему оператор open это для низкоуровневой работы с файлами, и открывать им xls файл не имеет смысла.
Чтобы открыть существующий файл xls и работать в нем с ячейками нужно сделать что-то вроде:
То есть как работать с файлами xls знает excel и поэтому нам опять нужно создать объект и работать через его методы.
Чтобы открыть существующий файл xls и работать в нем с ячейками нужно сделать что-то вроде:
Code: Select all
Set ExcelWorkbook = CreateObject("C:\Temp\VacationHrs.XLS")
ExcelWorkbook.WorkSheets(1).Cells(3, 1).Value = "Exp: 2"
ExcelWorkbook.Save
Set ExcelWorkbook = Nothing
То есть как работать с файлами xls знает excel и поэтому нам опять нужно создать объект и работать через его методы.
-
- Уже с Приветом
- Posts: 11040
- Joined: 15 May 2001 09:01
- Location: Minneapolis, MN (10000 lakes) USA
Спасибо, сейчас буду пробовать.
Самое смешное в это ситуации то, что клиент, богатый до неприличия не выпускает меня во время рабочего дня на улицу (по техническим якобы причинам), по утрам кто-то должен встретить у дверей, и мне не подключают интернет и даже внутреннюю почту . Поэтому приходится решать подобные вопросы во внеурочное время и в срочном порядке.
Самое смешное в это ситуации то, что клиент, богатый до неприличия не выпускает меня во время рабочего дня на улицу (по техническим якобы причинам), по утрам кто-то должен встретить у дверей, и мне не подключают интернет и даже внутреннюю почту . Поэтому приходится решать подобные вопросы во внеурочное время и в срочном порядке.
Мимоходом...
-
- Уже с Приветом
- Posts: 11040
- Joined: 15 May 2001 09:01
- Location: Minneapolis, MN (10000 lakes) USA
-
- Удален за рекламу собственного бизнеса
- Posts: 178
- Joined: 24 Jul 2002 08:02
- Location: Baile Atha Cliath
EMT wrote:Не помогло. Но, спасибо огромное ответившим !
This approach should work (you can customize it to your needs, of course).
Code: Select all
Sub doIt()
Dim xEx, xWb
Dim i, iCol, iStartRow
Set xEx = CreateObject("Excel.Application")
xEx.Visible = True
Set xWb = xEx.Workbooks.Open("S:\Book1.xls")
iStartRow = 4
iCol = 4
For i = 1 To 10
xWb.ActiveSheet.Cells(2 * (i - 1) + iStartRow, iCol).Value = "Value " & Format(i, "00")
Next
Call xWb.Save
Call xEx.Quit
Set xWb = Nothing
Set xEx = Nothing
End Sub
-
- Уже с Приветом
- Posts: 1224
- Joined: 24 Feb 2003 07:40