изменить свойства ComboBox программно

Программирование на Visual Basic for Applications
jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

изменить свойства ComboBox программно

Сообщение jan » 17.05.2006 (Ср) 9:51

Создаётся несколько ComboBox программно
ActiveSheet.OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height:=15).Select
Как задать им свойства ShowDropButtonWhen = 1 и SpecialEffect = 0

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 10:06

Код: Выделить всё
  With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height:=15)
        .Object.ShowDropButtonWhen = 1
    End With
Быть... или не быть. Вот. В чём вопрос?

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 17.05.2006 (Ср) 10:44

не получается
тут объект, я так понимаю, ComboBox
он активен, но
.Selection.ShowDropButtonWhen = 1
.Selection.SpecialEffect = 0
также выдаёт ошибку doesnt support property
может не хватает какого Referencese, так как код в Access создаёт новую книгу, а в этой книге несколько ComboBox

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 10:53

Выполни мой код.
Потом обрати внимание на конструкцию ".Object.ShowDropButtonWhen".
До кучи, прочти топик справки VBA "Using ActiveX Controls on Sheets".
Быть... или не быть. Вот. В чём вопрос?

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 17.05.2006 (Ср) 12:24

Код твой в модуле книги Екселя выполняется на ура, а вот из модуля в Access ни в какую.
Dim ExlObj As Excel.Application
Set ExlObj = GetObject(, "Excel.Application")
Dim newbook As Workbook
Set newbook = ExlObj.Workbooks.add("C:\template\edit.xlt")
With newbook.Worksheets(1)
.OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height _
:=15).Select
.Object.ShowDropButtonWhen = 1
end with

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 17.05.2006 (Ср) 13:11

Работает вот так:
Dim ExlObj As Excel.Application
Set ExlObj = GetObject(, "Excel.Application")
Dim newbook As Workbook
Set newbook = ExlObj.Workbooks.add("C:\template\edit.xlt")
With newbook.Worksheets(1)
.OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height _
:=15).Select
.ComboBox1.ShowDropButtonWhen = 1
end with

Как мне теперь перебрать несколько ComboBox в цикле?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 13:21

Ты, видимо, неправильно понимаешь, что такое With. Попробуй не так, как у тебя написано (зачем ты делаешь ComboBox'у Select?), а в точности так, как я писал выше. Т.е. НА ОДНОЙ СТРОЧКЕ

Код: Выделить всё
With newbook.Worksheets(1) .OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height :=15)


(либо, естественно, с переносом строк по _ , но не так, как у тебя написано в твоем коде); а на следующей строчке, внутри блока With

Код: Выделить всё
.Object.ShowDropButtonWhen = 1


В данном случае строчка With говорит о том, что ты сразу работаешь со свойствами только что созданного объекта, таким образом, дополнительный цикл тебе не нужен.
Быть... или не быть. Вот. В чём вопрос?

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 17.05.2006 (Ср) 14:50

получилось
.OLEObjects.add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=2.25, Top:=t, Width:=105, Height:=14, Width:=65.25, Height:=15).Object.ShowDropButtonWhen = 1

а если нужно менять несколько свойств, как быть?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.05.2006 (Ср) 15:09

Ты принципиально делаешь НЕ ТАК, как у меня написано?

Чтобы поменять несколько свойств, нужно наконец понять, для чего нужен оператор With, и внутри блока With - End With прописать все эти свойства, как

Код: Выделить всё
.object.свойство1=значение1
.object.свойство2=значение2
...
.object.свойствоn=значениеn



Быть... или не быть. Вот. В чём вопрос?

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 18.05.2006 (Чт) 7:07

Спасибо за разъяснительную работу и терпение -ВСЁ получилось! :wink:

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 18.05.2006 (Чт) 15:06

теперь не могу перебрать несколько ComboBox на листе, вернее перебираю, но не могу добавить у них элемент.
перебираю:
Sub ComboBoxText2()
Dim sr As ShapeRange, Str As String
Set myDocument = Worksheets(1)
myDocument.Shapes.SelectAll
Set sr = Selection.ShapeRange
For i = 1 To sr.Count - 1
ActiveSheet.Shapes("ComboBox" & i).Select
MsgBox Selection.Name
Next i
End Sub

добавить не получается:
Sub ComboBoxText2()
Dim sr As ShapeRange, Str As String
Set myDocument = Worksheets(1)
myDocument.Shapes.SelectAll
Set sr = Selection.ShapeRange
For i = 1 To sr.Count - 1
Str = yellowStr
Do While Len(Str) > 0
ActiveSheet.Shapes("ComboBox" & i).AddItem "" & Mid(Str, 1, InStr(1, Str, ";") - 1)
Str = Mid(Str, InStr(1, Str, ";") + 1)
Loop
Next i
End Sub

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 18.05.2006 (Чт) 16:33

ActiveSheet.Shapes("ComboBox" & i).DrawingObject.Object.AddItem "х"
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

jan
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 03.11.2004 (Ср) 15:37

Сообщение jan » 19.05.2006 (Пт) 6:31

спасибо! всё получилось :wink:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList