|
|
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Я пишу макросы в VB и необходимо создать ряд объектов (CheckBox'ов и ComboBox'ов) на рабочем листе Worksheets. В данный момент я пришел к выводу использовать OLEObjects, но возникли следующие приблемы: 1. Правильно ли я сделал выбор? Можно ли избежать использование OLEObject, но так, чтобы пользователям был запрещено удаление этих объектов (покрайней-мере в Exele OLEObject можно удалить, только запустив режим "Редактирование элементов управления" ) 2. Как добавить элементы в OLEObject Combobox? 3. Как прикрепить OLEObject к определенной ячейки рабочего листа, т.е. чтобы я при написании макроса писал не координаты рабочей области, а индификатор ячейки? 4. Для того, чтобы удалять объекты - я сделал счетчик, который запоминает количество созданных объектов...(объекты создаются программно) Ясно, что если по каким то причинам было создано больше объектов, то некоторые объекты, которые не были учтены счетчиком, не удалились. С помощью какой процедуры можно проверять создан ли тот или иной объект или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 13:35 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Eriksson, 2. Включить запись макроса, создать на листе Combobox, остановить запись макроса, посмотреть, что записалось. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 14:47 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Eriksson, я неправильно понял второй вопрос. Методом AddItem. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 14:49 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Вот небольшая процедура, которая создает и удаляет объекты с рабочего листа: 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... Заранне всем благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 06:11 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Спасибо ) Процедуру выборки и удаления объектов уяснил )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 06:14 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуста можно ли в листе списка Combobox'а выборочно форматировать текст? т.е. чтобы в Combobox'е он выглядел следующем образом: Инвестиции ГРР ЗИФ ГБО Налоги водный налог транспортный налог ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 07:14 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
По поводу создания и заполнения Combobox'a... Сложность в том что мне надо создать от 10 до 200 одинковых комбобоксов (с одним и тем же содержанием - к примеру: нал, б/нал) на рабочем листе Exel'я. Т.е. я не знаю сколько их будет - это зависит от объема базы... и использовать Worksheets(1).ComboBox1.Additem не получиться (((... Подскажите пожалуста - как это можно реализовать ? Как программно будет осуществляться доступ к объектам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 13:25 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
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. Пример на заполнение выпадающего списка через свойство OLEObject.ListFillRange. Может быть удобней, если надо заполнять много списков одним и тем же. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 18:25 |
|
||
|
VBA и Exel, OLEObjects, Создание Combobox, CheckBox на рабочем листе
|
|||
|---|---|---|---|
|
#18+
Спасибо большое! Уже сделал - все норм, только на создание и заполнении объектов у компьютера уходит много времени, но боюсь этого не избежать. Иначе надо менять методику изменения/ввода данных... ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2007, 09:24 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34328180&tid=2164517]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 433ms |

| 0 / 0 |
