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

User avatar
EMT
Уже с Приветом
Posts: 11040
Joined: 15 May 2001 09:01
Location: Minneapolis, MN (10000 lakes) USA

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

Post by 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:
Мимоходом...
Big Cheese
Уже с Приветом
Posts: 1211
Joined: 02 Jul 2000 09:01
Location: SFBA

Post by Big Cheese »

Code: Select all

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.

Удачи!
User avatar
EMT
Уже с Приветом
Posts: 11040
Joined: 15 May 2001 09:01
Location: Minneapolis, MN (10000 lakes) USA

Post by EMT »

Big Cheese wrote:

Code: Select all

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:
Мимоходом...
chip700
Уже с Приветом
Posts: 672
Joined: 11 Apr 2001 09:01
Location: Russia, NN

Post by chip700 »

По-моему оператор open это для низкоуровневой работы с файлами, и открывать им xls файл не имеет смысла.
Чтобы открыть существующий файл 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 и поэтому нам опять нужно создать объект и работать через его методы.
User avatar
EMT
Уже с Приветом
Posts: 11040
Joined: 15 May 2001 09:01
Location: Minneapolis, MN (10000 lakes) USA

Post by EMT »

Спасибо, сейчас буду пробовать.
Самое смешное в это ситуации то, что клиент, богатый до неприличия не выпускает меня во время рабочего дня на улицу (по техническим якобы причинам), по утрам кто-то должен встретить у дверей, и мне не подключают интернет и даже внутреннюю почту :( . Поэтому приходится решать подобные вопросы во внеурочное время и в срочном порядке. :?
Мимоходом...
User avatar
EMT
Уже с Приветом
Posts: 11040
Joined: 15 May 2001 09:01
Location: Minneapolis, MN (10000 lakes) USA

Post by EMT »

Не помогло. Но, спасибо огромное ответившим !
Мимоходом...
leprechaun
Удален за рекламу собственного бизнеса
Posts: 178
Joined: 24 Jul 2002 08:02
Location: Baile Atha Cliath

Post by leprechaun »

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
User avatar
wolfboy
Уже с Приветом
Posts: 1224
Joined: 24 Feb 2003 07:40

Post by wolfboy »

EMT wrote:Не помогло. Но, спасибо огромное ответившим !

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

Return to “Вопросы и новости IT”