不会让我每个combobox都去写代码吧?还有VBA中有控件数组吗?

解决方案 »

  1.   

    有控件数组, 把第二个控件拖上去, 起相同的名字, 就会问你是否加入控件数组.可以使用自定义控件,  扩展一下这个Combobox.
      

  2.   

    还有个问题!我写了VBA后,保存后关闭.再打开后,好象就不起作用了啊!
      

  3.   

    将页面上要统一初始化的combox 的 Tag 属性设置为一个统一的值(如:CMB)
      Dim var As Variant
      Dim i As Integer
      For i = 0 To Me.count - 1
        var = Me.Controls(i).Tag
        If (var = "CMB") Then
          Me.Controls(i).addItem "1"
          Me.Controls(i).addItem "2"
          Me.Controls(i).addItem "3"
        End If
      Next i
      

  4.   

    绝对可行.
    例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去,  默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.
      

  5.   

    Private Sub Form_Load()
    Dim Ctl As Control
    For Each Ctl In Me.Controls
        If TypeOf Ctl Is ComboBox Then
            Ctl.Clear
            Ctl.AddItem "1", 0
            Ctl.AddItem "2", 1
            Ctl.AddItem "3", 2
        End If
    Next
    End Sub
      

  6.   

    绝对可行.
    例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去,  默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.大哥,你能不能自己试试再告诉我啊!这样只会提示"发现二义性错误!"
      

  7.   

    还有就是FORM_LOAD在VBA中好象没有哦!
      

  8.   

    绝对可行.
    例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去,  默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.大哥,你能不能自己试试再告诉我啊!这样只会提示"发现二义性错误!"
    ---------------
    小弟, 你能不能按我说的试试再回答啊
      

  9.   

    以下是保存的 窗体 Form1 的文件, 有两个Combo1, 这就是控件数组.
    ------------------------------
    VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3195
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3195
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin VB.ComboBox Combo1 
          Height          =   300
          Index           =   1
          Left            =   600
          TabIndex        =   1
          Text            =   "Combo2"
          Top             =   1440
          Width           =   2055
       End
       Begin VB.ComboBox Combo1 
          Height          =   300
          Index           =   0
          Left            =   600
          TabIndex        =   0
          Text            =   "Combo1"
          Top             =   600
          Width           =   2055
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option ExplicitPrivate Sub Combo1_Change(Index As Integer)End SubPrivate Sub Form_Load()End Sub
      

  10.   

    给你个方法:
    在模块中
    public sub fillcombo(cbo as combobox)
      cob.additem "1"
      cbo.additem "2"
      cbo.additem "3"
    end sub在窗体中:
    call fillcombo(combo1)
    多次调用就可以 了.
      

  11.   

    请大家冷静一下!!!我是说,新建一WORD文档,然后在文档上放置几个combo,有什么办法让他们成为控件数组???  aChinese(一个中国人)的方法不行的!我当然是试过了,只会提示"发现二义性错误"!!!
      

  12.   

    用个函数:Sub GetReady(ComboA As ComboBox)
    With ComboA
        For i = 1 To 3
            .AddItem Str(i)
        Next
        .Text = .List(0)
    End With
    End Sub调用的时候使用:
    比如说我窗体上有两个combobox: cmbA 和 cmbB
    在Form_Load中写
    GetReady cmbA
    GetReady cmbB
      

  13.   

    这个代码可以在VBA使用
    我在win2k3 + office2k3下测试了Sub x()
    Dim x As InlineShape
    Dim o As ComboBox
    For Each x In ActiveDocument.InlineShapes
        If x.Type = 5 Then
            Set o = x.OLEFormat.Object
            o.AddItem 1
            o.AddItem 2
            o.AddItem 3
        End If
    NextEnd Sub
      

  14.   

    如果你使用InlineShape对象和InlineShapes集合有问题的话
    可以使用Shape对象和Shapes集合
      

  15.   

    leekkeek(期待者) 的方法是可行的!但是好象VBA中没有form_load这个过程啊???
    还有就是如果文档上有其余的控件时会出现"类型不匹配"的错误.
    留个QQ吧?
    向你学习...
      

  16.   

    你项目里没有用户窗体的话当然没有Form_Load了。leekkeek的思路是正确的。你可以在set o = x.OLEFormat.Object前加一判断x.OLEFormat.ClassType是否为"Forms.ComboBox.1"来避免类型不匹配的错误。另外你可以考虑动态添加这些ComboBox,这样就不用枚举了。如:Sub Test1()
        Dim cb As ComboBox
        For i = 1 To 30
            Set cb = Selection.InlineShapes.AddOLEControl("Forms.ComboBox.1").OLEFormat.Object
            For j = 1 To 3
                cb.AddItem j
            Next
        Next
    End SubSub Test2()
        Dim cb As ComboBox, ish As InlineShape
        For Each ish In ActiveDocument.InlineShapes
            If ish.Type = wdInlineShapeOLEControlObject Then
                If ish.OLEFormat.ClassType = "Forms.ComboBox.1" Then
                    Set cb = ish.OLEFormat.Object
                    cb.AddItem 4
                End If
            End If
        Next
    End Sub你可以先运行Test1再运行Test2看看结果。
      

  17.   

    x.Type = 5 是用来判断空间类型的
    Document对象有Open事件,这个事件我也没有使用过,你可以看一下