Доступ из проекта VB6 к элементам книги Excel
Модератор: Naeel Maqsudov
Подскажите, как из программы VB6 заполнить данными, например,
ComboBox, расположенный на Лист1 книги Excel. До файла Excel я
достучался, а вот увидеть ComboBox не могу.
ComboBox, расположенный на Лист1 книги Excel. До файла Excel я
достучался, а вот увидеть ComboBox не могу.
Например так
For i = 1 To 9
Лист1.ComboBox1.AddItem Cells(i, 1)
Next
For i = 1 To 9
Лист1.ComboBox1.AddItem Cells(i, 1)
Next
Дело в том, что в проекте Лист1 описан как объект Excel.Worksheet,
и при прямом указании на ComboBox1 вылетает ошибка:
Method or Data Member not found
и при прямом указании на ComboBox1 вылетает ошибка:
Method or Data Member not found
Может поможет код:
Если нет приведи свой, это надо бы сделать в первом вопросе.
Код: Выделить всё
Dim objXl As Object, i As Long
Private Sub CommandButton1_Click()
Set objXl = CreateObject("Excel.Application")
objXl.Workbooks.Open "D:\Книга1.xls"
For i = 1 To 9
objXl.Worksheets(1).OLEObjects("ComboBox1").Object.AddItem i
'***или objXl.Worksheets(1).ComboBox1.Object.AddItem i
Next
objXl.Visible = True
End Sub
За OleObjects большое спасибо. Это помогло увидеть combo.
Но вот заполнить его почему-то не удается.
У меня этот процесс выглядит так:
Private ApplXLS As Excel.Application
Private FileXLS As Excel.Workbook
Private SheetXLS As Excel.Worksheet
Set ApplXLS = New Excel.Application
Set FileXLS = ApplXLS.Workbooks.Open("File.xls")
Set SheetXLS = FileXLS.Sheets(1)
for icount = 1 to n
SheetXLS.OLEObjects(1).object.AddItem trim(rs.fields(0).value)
if icount<>n then rs.movenext
next icount
FileXLS.Save
FileXLS.Close
Set SheetXLS = Nothing
Set FileXLS = Nothing
Set ApplXLS = Nothing
OLEObjects(1) это и есть combo. В процессе работы никаких
сообщений об ошибках нет, но список combo пуст. Recordset точно
не пустой.
Но вот заполнить его почему-то не удается.
У меня этот процесс выглядит так:
Private ApplXLS As Excel.Application
Private FileXLS As Excel.Workbook
Private SheetXLS As Excel.Worksheet
Set ApplXLS = New Excel.Application
Set FileXLS = ApplXLS.Workbooks.Open("File.xls")
Set SheetXLS = FileXLS.Sheets(1)
for icount = 1 to n
SheetXLS.OLEObjects(1).object.AddItem trim(rs.fields(0).value)
if icount<>n then rs.movenext
next icount
FileXLS.Save
FileXLS.Close
Set SheetXLS = Nothing
Set FileXLS = Nothing
Set ApplXLS = Nothing
OLEObjects(1) это и есть combo. В процессе работы никаких
сообщений об ошибках нет, но список combo пуст. Recordset точно
не пустой.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
а попробовать для отладки константу туда прописать?

Попробовал:
а) как Const a="ddddd", потом ...AddItem a
б) просто ...AddItem "ddddd"
не сохраняет...
а) как Const a="ddddd", потом ...AddItem a
б) просто ...AddItem "ddddd"
не сохраняет...

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
я вообще с ВБ не очень дружу но сделал так: открыл Эксель, скопировал твой код, убрал создание приложения и в FileXLS присвоил одну из открытых книг с КомбоБоксом (ну и естественно save и close тоже убрал) - всё присвоилось - может на мысль натолкнёт?

Если я правильно понял, то все эти действия

ты сделал в hardcode самого Excel, если так, то с Excel проблем и у меня не возникало. А вот из проекта VB6...Игорь Акопян писал(а):... открыл Эксель, скопировал твой код, убрал создание приложения и в FileXLS присвоил одну из открытых книг с КомбоБоксом (ну и естественно save и close тоже убрал)...
Весь код у меня работает и в VB6.
Может я неправильно подумал: Нужно сохранить значения Item и после закрытия файла? Из кода не видно когда Вы пользуетесь ComboBox.
Может я неправильно подумал: Нужно сохранить значения Item и после закрытия файла? Из кода не видно когда Вы пользуетесь ComboBox.