Страница 1 из 1

Помогите (не материально:). VBA, Excel.

Добавлено: Вт ноя 11, 2003 11:34 pm
EMT
Никогда не работал с VBA. Сегодня пришлось, но почему-то ничего не выходит. (Задача крутая :lol: ).

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 с записями сверху вниз через поле: строка, далее - пустая строка, далее - снова запись, далее - опять пустая строка и снова запись и т.д.

Помогите, пожалуйста. Нужно срочно и разбираться некогда. :cry:

Добавлено: Ср ноя 12, 2003 1:16 am
Big Cheese

Код: Выделить всё

Open "C:\Temp\VacationHrs.XLS" For Random As Object 
Сразу скажу, я не спец в VBA и не совсем понял, что данная строчка должна делать по замыслу, но по синтаксису похоже, что Вы пытаетесь открыть VacationHrs.xls как эээ... нетипизированый файл, что-ли. Если Вы хотите редактировать .xls из скрипта, то я думаю нужно использовать Application.Workbooks.Open "c:\temp\VacationHrs.xml", потом в коллекции Workbooks найти этот Workbook (может, можно сразу после вызова Open взять значение свойства Workbooks.ActiveWorkbook). Если имелось в виду другое действие, то уточните, plz.

Удачи!

Добавлено: Ср ноя 12, 2003 1:34 am
EMT
Big Cheese писал(а):

Код: Выделить всё

Open "C:\Temp\VacationHrs.XLS" For Random As Object 
Сразу скажу, я не спец в VBA и не совсем понял, что данная строчка должна делать по замыслу, но по синтаксису похоже, что Вы пытаетесь открыть VacationHrs.xls как эээ... нетипизированый файл, что-ли. Если Вы хотите редактировать .xls из скрипта, то я думаю нужно использовать Application.Workbooks.Open "c:\temp\VacationHrs.xml", потом в коллекции Workbooks найти этот Workbook (может, можно сразу после вызова Open взять значение свойства Workbooks.ActiveWorkbook). Если имелось в виду другое действие, то уточните, plz.

Удачи!

По замыслу (и в соответствии с Help) эта строчка: Open "C:\Temp\VacationHrs.XLS" For Random As Object

должна открыть созданный файл из указанной директории. "Random" означает что этот файл можно и просто читать, и туда что-то вставлять. Пробовал это и с простым txt файлом - не открывается. :pain1:

Добавлено: Ср ноя 12, 2003 4:30 am
chip700
По-моему оператор open это для низкоуровневой работы с файлами, и открывать им xls файл не имеет смысла.
Чтобы открыть существующий файл xls и работать в нем с ячейками нужно сделать что-то вроде:

Код: Выделить всё


Set ExcelWorkbook = CreateObject("C:\Temp\VacationHrs.XLS")

ExcelWorkbook.WorkSheets(1).Cells(3, 1).Value = "Exp: 2"

ExcelWorkbook.Save
Set ExcelWorkbook = Nothing

То есть как работать с файлами xls знает excel и поэтому нам опять нужно создать объект и работать через его методы.

Добавлено: Ср ноя 12, 2003 8:54 am
EMT
Спасибо, сейчас буду пробовать.
Самое смешное в это ситуации то, что клиент, богатый до неприличия не выпускает меня во время рабочего дня на улицу (по техническим якобы причинам), по утрам кто-то должен встретить у дверей, и мне не подключают интернет и даже внутреннюю почту :( . Поэтому приходится решать подобные вопросы во внеурочное время и в срочном порядке. :?

Добавлено: Чт ноя 13, 2003 12:09 am
EMT
Не помогло. Но, спасибо огромное ответившим !

Добавлено: Чт ноя 13, 2003 1:02 pm
leprechaun
EMT писал(а):Не помогло. Но, спасибо огромное ответившим !


This approach should work (you can customize it to your needs, of course).

Код: Выделить всё

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

Добавлено: Чт ноя 13, 2003 5:59 pm
wolfboy
EMT писал(а):Не помогло. Но, спасибо огромное ответившим !

Гхм, а макросами вы пользуетесь? Можно же вашу ситуацию смоделировать мышиными кликами, а потом просто сидеть и разбираться, чего там нападало...