Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе / 9 сообщений из 9, страница 1 из 1
12.02.2007, 13:35
    #34323713
Eriksson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
Я пишу макросы в VB и необходимо создать ряд объектов (CheckBox'ов и ComboBox'ов) на рабочем листе Worksheets. В данный момент я пришел к выводу использовать OLEObjects, но возникли следующие приблемы:
1. Правильно ли я сделал выбор? Можно ли избежать использование OLEObject, но так, чтобы пользователям был запрещено удаление этих объектов (покрайней-мере в Exele OLEObject можно удалить, только запустив режим "Редактирование элементов управления" )
2. Как добавить элементы в OLEObject Combobox?
3. Как прикрепить OLEObject к определенной ячейки рабочего листа, т.е. чтобы я при написании макроса писал не координаты рабочей области, а индификатор ячейки?
4. Для того, чтобы удалять объекты - я сделал счетчик, который запоминает количество созданных объектов...(объекты создаются программно) Ясно, что если по каким то причинам было создано больше объектов, то некоторые объекты, которые не были учтены счетчиком, не удалились. С помощью какой процедуры можно проверять создан ли тот или иной объект или нет?
...
Рейтинг: 0 / 0
12.02.2007, 14:47
    #34323995
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
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
12.02.2007, 14:49
    #34324003
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
Eriksson,
я неправильно понял второй вопрос. Методом AddItem.
...
Рейтинг: 0 / 0
13.02.2007, 06:11
    #34325701
Eriksson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
Вот небольшая процедура, которая создает и удаляет объекты с рабочего листа:

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

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

Сложность в том что мне надо создать от 10 до 200 одинковых комбобоксов (с одним и тем же содержанием - к примеру: нал, б/нал) на рабочем листе Exel'я. Т.е. я не знаю сколько их будет - это зависит от объема базы... и использовать Worksheets(1).ComboBox1.Additem не получиться (((... Подскажите пожалуста - как это можно реализовать ? Как программно будет осуществляться доступ к объектам?
...
Рейтинг: 0 / 0
13.02.2007, 18:25
    #34328180
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
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
14.02.2007, 09:24
    #34329082
Eriksson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
Спасибо большое! Уже сделал - все норм, только на создание и заполнении объектов у компьютера уходит много времени, но боюсь этого не избежать. Иначе надо менять методику изменения/ввода данных... (
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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