powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обратиться к объекту по имени
18 сообщений из 18, страница 1 из 1
Обратиться к объекту по имени
    #36318494
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть combobox1.

Как обратится к нему в коде?Только так: me.combobox1.... не годится.
Пробывал как в Accessе me("combobox1").... не катит.

Сломал голову... Помогите.Спасибо.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36318523
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Где комбобокс ? На форме?
Если да, то можна так UserForm1.Controls("Combobox1")
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36318880
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет не на форме а на самом листе.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319004
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edkaЕсть combobox1.

Как обратится к нему в коде?Только так: me.combobox1.... не годится.
Пробывал как в Accessе me("combobox1").... не катит.

Сломал голову... Помогите.Спасибо.

Если в речь про Excel и на нем размещено поле со списком с именем Combobox1

то обращаться к нему надо так ComboBox1.xxx . где xxx некое свойство

Например если на этом-же листе разместить макрос
Код: plaintext
1.
2.
3.
Private Sub ComboBox1_Change()
 MsgBox ComboBox1.Name
End Sub

то при любом изменении в поле со списком будет выскакивать сообщение ComboBox1
Пример конечно дурацкий, но показывает суть.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319070
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача немного сложнее, хотя возможно она решается двумя строчками кода. Если коротко: Из Access создается Excel документ с множеством данных, часть из которых имеет Validation list. Все хорошо, но Validation list шире чем ячейка и полностью не показывается... Решил сделать так: при нажатии на ячейку с validationom открывается combobox с данными из validationa, на этом этапе вроде работает, но Ни какие шаблоны Excela не приветствуются, поэтому combobox создается в самом коде Excel'a, но при первом открытии excel ругается на me.combobox1-и правильно, его еще нет....
Я бы использовал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Dim cboTemp As OleObject 
Set cboTemp = ws.OLEObjects("combobox1") 
With cboTemp 
.Visible = True
 .Left = Target.Left 
.Top = Target.Top 
.Width = Target.Width +  13  
.Height = Target.Height +  2  
.LinkedCell = Target.Address 
End With

Но тут нету метода .List - так как элементы берутся не из ячеек worksheet'a а из самого Validationa,что очень странно так как me.combobox1.list -есть... В любом случае Сейчас combobox создается в accesse при создании xls, но теперь не понятно как поменять шрифт, цвет, бордерстайл и т.д.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319077
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
ТСТолько так: me .combobox1.... не годится.
ТСНет не на форме а на самом листе.
В первой цитате у Вас подразумевается, что объект combobox1 на форме, это задано словом me , поэтому вероятно у Вас и не работает код. Обратиться к объекту на листе можна либо как Djon Player написал, тоесть напрямую, либо через коллекцию Shapes:
Код: plaintext
ActiveSheet.Shapes("combobox1").метод(свойство)
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319131
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m,
Хорошо, 2ой вопрос:
Почему me.combobox1.list=array("1","2") работает

а ws.Shapes("combobox1").List = Array("1", "2") не работает

Не пойму я ни как:)
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319182
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Как Вы его туда (на лист) засунули, только что посмотрел, через Shapes вроде нельзя добавить Combobox - сам не знал :)... Выложите файл с этим комбо.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319198
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub CreateCombo()
    'On Error Resume Next
    Dim TempCombo                       As OLEObject
    Dim ws                              As Worksheet
    Set ws = ActiveSheet
    Set TempCombo = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:= 1 , Top:= 1 , Width:= 0 , Height:= 0 )
    TempCombo.Name = "Combobox1"
    TempCombo.Visible =  0 
    TempCombo.PrintObject =  0   
End Sub
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319204
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я в экселе профан, возможно путаю понятия...
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319240
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Ясно... Вот так:
Код: plaintext
ActiveSheet.OLEObjects("Combobox1").метод(свойство)
Если Вы создали объект через Shapes, ищите его в Shapes, как в моем предыдущем примере, если через OLEObjects (ваш пример), тут и ищите :)
Вы в курсе, что Вы создаете объект с нулевыми размерами ширины и высоты ?
ТСSet TempCombo = ws.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=1, Top:=1, Width:=0, Height:=0 )
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319266
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m,

Размер меняется потом тут

Dim cboTemp As OleObject
Set cboTemp = ws.OLEObjects("combobox1")
With cboTemp
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 13
.Height = Target.Height + 2
.LinkedCell = Target.Address
End With

Ладно что то ясно, но не все как хотелось бы
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319308
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
ТСЛадно что то ясно, но не все как хотелось бы
Ну так спрашивайте, спрашивайте, спрашивайте!
Пока Вам бесплатно отвечают :)
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319450
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m,В общем получилось, combobox создаю из accessa
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
    Dim xl                              As Excel.Application
    Dim nb                              As Excel.Workbook
    Dim ws                              As Excel.Worksheet
    Dim cnn                             As ADODB.Connection
    Dim rst                             As ADODB.Recordset
    'Dim rs                              As dao.Recordset



    'TempCombo.Visible = 0
    'TempCombo.PrintObject = 0

    Set xl = CreateObject("Excel.application")
    Set nb = xl.Workbooks.Add    '("c:\Tralala.xls")
    Set ws = nb.ActiveSheet
    xl.Visible =  0 
    Dim x As MSForms.ComboBox, z        As OLEObject
    Const myCBName                      As String = "TempCombo"


    On Error GoTo  0 
    Set z = ws.OLEObjects.Add(ClassType:="forms.combobox.1", Link:=False, _
                              DisplayAsIcon:=False, Left:= 100 , Top:= 16 , Width:= 100 , Height:= 20 )
    z.Name = myCBName
    Set x = z.Object

    With x
        .ColumnCount =  1 
        ' .ColumnWidths = "1 in; 1 in; 1 in;"  'not needed - only 1 column
        .Font.Name = "Arial"
        .Font.Size =  10 
        .BackStyle =  0 
        .BorderStyle =  1 
        .DropButtonStyle =  1 
        .TextAlign =  1   ' 2 = Center 3 = Right
        .SpecialEffect =  0 
    End With


    nb.SaveAs "C:\TTT.xls"
    nb.Close
    xl.Workbooks.Close
    xl.Quit
    Set ws = Nothing
    ' rst.Close: Set rst = Nothing
    'cnn.Close: Set cnn = Nothing
    Set nb = Nothing
    Set xl = Nothing

Потом в ttt.xls вставляю код из accessa, и примерный результат таков:
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319468
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чета файл не прикладывается:(
Но в xls код таков:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Private Sub showCombo(ByVal Target As Range)
    Dim str                             As String
    Dim cboTemp                         As OLEObject
    Dim ws                              As Worksheet
    Set ws = ActiveSheet
    Set cboTemp = ws.OLEObjects("TempCombo")
    On Error Resume Next
    With cboTemp
        .ListFillRange = ""
        .LinkedCell = ""
        .Visible = False
    End With
    On Error GoTo errHandler
    If Target.Validation.Type =  3  Then
        Application.EnableEvents = False
        str = Target.Validation.Formula1
        Me.TempCombo.List = Split(str, ";")
        With cboTemp
            .Visible = True
            .Left = Target.Left
            .Top = Target.Top
            .Width = Target.Width +  15 
            .Height = Target.Height +  5 
            .LinkedCell = Target.Address
        End With
        cboTemp.Activate
    End If
errHandler:
    Application.EnableEvents = True
    Exit Sub
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim str                             As String
    Dim cboTemp                         As OLEObject
    Dim ws                              As Worksheet
    Set ws = ActiveSheet
    '
    Set cboTemp = ws.OLEObjects("TempCombo")
    On Error Resume Next
    If cboTemp.Visible = True Then
        With cboTemp
            .Top =  10 
            .Left =  10 
            .ListFillRange = ""
            .LinkedCell = ""
            .Visible = False
        End With
        Application.ScreenUpdating = True
    End If
    showCombo Target
errHandler:
    Application.EnableEvents = True
    Exit Sub
End Sub

итог если ячейка имеет валидатион лист, то открывается мой комбобокс...
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319482
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
У Вас есть вопрос, или Вы просто показали код ? :)
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319494
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это просто код:)Вопрос в чем разница forms combobox и shapes combobox, так и не понял,и почему у них разные методы и т.д.
...
Рейтинг: 0 / 0
Обратиться к объекту по имени
    #36319515
edka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно спасибо в любом случае:)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обратиться к объекту по имени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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