将页面上要统一初始化的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
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
用个函数: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
这个代码可以在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
你项目里没有用户窗体的话当然没有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看看结果。
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
例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去, 默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.
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
例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去, 默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.大哥,你能不能自己试试再告诉我啊!这样只会提示"发现二义性错误!"
例如, 拖一个Button上去, 默认名字是 Command1,然后再拖一个上去, 默认名字是Command2, 改成 Command1, 就会问你是否创建控件数组.大哥,你能不能自己试试再告诉我啊!这样只会提示"发现二义性错误!"
---------------
小弟, 你能不能按我说的试试再回答啊
------------------------------
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
在模块中
public sub fillcombo(cbo as combobox)
cob.additem "1"
cbo.additem "2"
cbo.additem "3"
end sub在窗体中:
call fillcombo(combo1)
多次调用就可以 了.
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
我在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
可以使用Shape对象和Shapes集合
还有就是如果文档上有其余的控件时会出现"类型不匹配"的错误.
留个QQ吧?
向你学习...
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看看结果。
Document对象有Open事件,这个事件我也没有使用过,你可以看一下