powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
9 сообщений из 9, страница 1 из 1
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34323713
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пишу макросы в VB и необходимо создать ряд объектов (CheckBox'ов и ComboBox'ов) на рабочем листе Worksheets. В данный момент я пришел к выводу использовать OLEObjects, но возникли следующие приблемы:
1. Правильно ли я сделал выбор? Можно ли избежать использование OLEObject, но так, чтобы пользователям был запрещено удаление этих объектов (покрайней-мере в Exele OLEObject можно удалить, только запустив режим "Редактирование элементов управления" )
2. Как добавить элементы в OLEObject Combobox?
3. Как прикрепить OLEObject к определенной ячейки рабочего листа, т.е. чтобы я при написании макроса писал не координаты рабочей области, а индификатор ячейки?
4. Для того, чтобы удалять объекты - я сделал счетчик, который запоминает количество созданных объектов...(объекты создаются программно) Ясно, что если по каким то причинам было создано больше объектов, то некоторые объекты, которые не были учтены счетчиком, не удалились. С помощью какой процедуры можно проверять создан ли тот или иной объект или нет?
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34323995
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eriksson,

2. Включить запись макроса, создать на листе Combobox, остановить запись макроса, посмотреть, что записалось.

4.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub FindComboboxes()
 Dim objOle As OLEObject
 Dim cboCombo As MSForms.ComboBox
 For Each objOle In ActiveSheet.OLEObjects
    If TypeOf objOle.Object Is MSForms.ComboBox Then
       Set cboCombo = objOle.Object
       MsgBox "Найден комбобокс " & cboCombo.Name & ":" & vbCrLf & _
              "Left=" & objOle.Left & vbCrLf & _
              "Top=" & objOle.Top
    End If
 Next objOle
End Sub
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34324003
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eriksson,
я неправильно понял второй вопрос. Методом AddItem.
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34325701
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот небольшая процедура, которая создает и удаляет объекты с рабочего листа:

j = 0
pos = 2
If Worksheets(1).Cells(1, 49).Value = 0 Then
For i = 1 To (Worksheets(1).Cells(1, 50).Value + 13) * Worksheets(1).Cells(1, 52).Value
If (Worksheets(2).Cells(i, 1) <> "") And (Worksheets(2).Cells(i, 15) = "") Then

Worksheets(2).Shapes.AddOLEObject Left:=4, Top:=pos, _
Width:=12, Height:=12, _
ClassType:="Forms.Checkbox.1"

Worksheets(2).OLEObjects(j + 1).Object.Caption = ""
Worksheets(2).OLEObjects(j + 1).Object.BackStyle = fmBackStyleTransparent ------ ?????
j = j + 1
Worksheets(1).Cells(j, 56).Value = i
End If
pos = pos + Worksheets(2).Cells(i, 1).RowHeight
Next i

Worksheets(2).Shapes.AddOLEObject Left:=805, Top:=295, _
Width:=100, Height:=20, _
ClassType:="Forms.CommandButton.1"


Worksheets(2).Shapes.AddOLEObject Left:=805, Top:=325, _
Width:=100, Height:=20, _
ClassType:="Forms.CommandButton.1"

Worksheets(2).OLEObjects(j + 1).Object.Caption = "Ïåðåíåñòè"
Worksheets(2).OLEObjects(j + 1).Object.BackStyle = fmBackStyleTransparent ------ ?????
Worksheets(2).OLEObjects(j + 2).Object.Caption = "Óäàëèòü"
Worksheets(2).OLEObjects(j + 2).Object.BackStyle = fmBackStyleTransparent ------????

Worksheets(1).Cells(1, 49).Value = j
Else
For i = 1 To Worksheets(1).Cells(1, 49).Value
namestr = "CheckBox" & i
Worksheets(2).Shapes(namestr).delete
Next i
Worksheets(2).Shapes("CommandButton1").delete
Worksheets(2).Shapes("CommandButton2").delete
Worksheets(1).Cells(1, 49).Value = CInt(0)
End If


1. Worksheets(2).OLEObjects(j + 1).Object.BackStyle = fmBackStyleTransparent - по каким то причинам не работает ((( Может я не правильно настраиваю объект?

2. Я так же создаю Combobox

Worksheets(2).Shapes.AddOLEObject Left:=805, Top:=325, _
Width:=100, Height:=20, _
ClassType:="Forms.Combobox.1"

но мне не удается добавлять в него элементы с помощью процедуры Additem... как я только не ухитрялся

3. Еще бы более корректно написать прогрмму - мне нужно удалять все OLEObjects и как то надо проверять: существует ли процедура проверки существования объекта, а то если удалять несуществующий объект выдаст ошибку... (((

4. Существует процедура, которая вычисляет позицию ячейки? чтобы мне не приходилось самостоятельно вычислять и запихивать значение в Pos...

Заранне всем благодарен.
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34325702
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ) Процедуру выборки и удаления объектов уяснил ))
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34325738
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите пожалуста можно ли в листе списка Combobox'а выборочно форматировать текст? т.е. чтобы в Combobox'е он выглядел следующем образом:

Инвестиции
ГРР
ЗИФ
ГБО
Налоги
водный налог
транспортный налог
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34326926
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу создания и заполнения Combobox'a...

Сложность в том что мне надо создать от 10 до 200 одинковых комбобоксов (с одним и тем же содержанием - к примеру: нал, б/нал) на рабочем листе Exel'я. Т.е. я не знаю сколько их будет - это зависит от объема базы... и использовать Worksheets(1).ComboBox1.Additem не получиться (((... Подскажите пожалуста - как это можно реализовать ? Как программно будет осуществляться доступ к объектам?
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34328180
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErikssonСложность в том что мне надо создать от 10 до 200 одинковых комбобоксов (с одним и тем же содержанием - к примеру: нал, б/нал) на рабочем листе Exel'я. Т.е. я не знаю сколько их будет - это зависит от объема базы...
OK, предположим.

Eriksson и использовать Worksheets(1).ComboBox1.Additem не получиться (((... Подскажите пожалуста - как это можно реализовать ? Как программно будет осуществляться доступ к объектам?
Eriksson, надо различать control extender от самого control. Control extender на листе Excel - это OLEObject (жать F2, смотреть свойства/методы/события в Object Browser). В control extender может быть помещён некий ActiveX control со своими свойствами/методами/событиями (подключать библиотеку, если не подключена, жать F2, смотреть). Чтобы до них добраться программно универсальным способом, надо обратиться к свойству Object экземпляра OLEObject, убедиться, что объект нужного типа, и общаться с ним соответственно.

Что из этого следует. Во-первых, что удобно получить нормальную типизированную ссылку на объект - чтобы и раннее связывание работало, и редактор список свойств/методов показывал. См. пример выше. Во-вторых, следует, что неплохо бы, а то и просто необходимо (если надо ловить события от неопределённого количества объектов, например), иметь свои коллекции (обычно) однотипных объектов. Вот пара перекликающихся тем для изучения: 1 , 2 .

Пример на AddItem:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub TestComboboxAddItem()
 Dim objOle As Excel.OLEObject
 Dim cboCombo As MSForms.ComboBox
 Set objOle = ActiveSheet.OLEObjects.Add( _
    ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, _
    Left:= 38 . 25 , Top:= 33 . 75 , Width:= 144 , Height:= 21 . 75 )
 Set cboCombo = objOle.Object
 With cboCombo
    .AddItem "вот это первый"
    .AddItem "а вот второй"
    .AddItem "а это третий - три аккорда"
 End With
End Sub

Пример на заполнение выпадающего списка через свойство OLEObject.ListFillRange. Может быть удобней, если надо заполнять много списков одним и тем же.
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub TestListFillRange()
 Dim objOle As Excel.OLEObject
 Set objOle = ActiveSheet.OLEObjects.Add( _
    ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, _
    Left:= 38 . 25 , Top:= 33 . 75 , Width:= 144 , Height:= 21 . 75 )
 objOle.ListFillRange = "R4C7:R7C7"
End Sub
...
Рейтинг: 0 / 0
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
    #34329082
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое! Уже сделал - все норм, только на создание и заполнении объектов у компьютера уходит много времени, но боюсь этого не избежать. Иначе надо менять методику изменения/ввода данных... (
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]