Excel 窗体和滚动条
我碰到了一个小问题,这让我头痛不已。我已经为此寻找了很长时间,但我仍然没有找到如何做到这一点 我有一个小脚本,可以在表单上创建组合框Excel 窗体和滚动条,excel,vba,Excel,Vba,我碰到了一个小问题,这让我头痛不已。我已经为此寻找了很长时间,但我仍然没有找到如何做到这一点 我有一个小脚本,可以在表单上创建组合框 For j = 0 To UBound(ComponentList) - 1 'Set Label Set control = ComponentSelectionForm.Controls.Add("Forms.Label.1", "ComponentLabel" & CStr(j), True) With control .Caption =
For j = 0 To UBound(ComponentList) - 1
'Set Label
Set control = ComponentSelectionForm.Controls.Add("Forms.Label.1", "ComponentLabel" & CStr(j), True)
With control
.Caption = "Component " & CStr(j)
.Left = 30
.Top = Height
.Height = 20
.Width = 100
.Visible = True
End With
'set ComboBox
Set combo = ComponentSelectionForm.Controls.Add("Forms.ComboBox.1", "Component" & CStr(j), True)
With combo
.List = ComponentList()
.Text = "NONE"
.Left = 150
.Top = Height
.Height = 20
.Width = 50
.Visible = True
Set cButton = New clsButton
Set cButton.combobox = combo
coll.Add cButton
End With
Height = Height + 30
Next j
我发现有时我可能会有多达50多个组合框。这显然会离题。我试图做的是创建一个容器来保存表单中的这些组合框,表单中有一个垂直滚动条,用户可以滚动浏览它们
我应该能够创建一个滚动条,但我如何做,使滚动条滚动通过组合框,但离开标签上面,它下面的按钮所在的位置
我正在寻找一些帮助/指点,以帮助实现这一目标
提前感谢。您不能将组合框放入容器控件(如框架)中,然后添加滚动条(设置水平和垂直的方向属性) 因此,在循环外添加帧:
ComponentSelectionForm.Controls.Add("Forms.Frame.1", "fraContainer" , True)
然后将滚动条添加到容器中
ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scHorizontal" , True)
with ComponentSelectionForm.Controls("fraContainer").controls("scHorizontal")
' set orentation to Horizontal
.orientation=1
end with
ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scVertical" , True)
with ComponentSelectionForm.Controls("fraContainer").controls("scVertical")
' set orentation to Vertical
.orientation=0
end with
现在,在你的循环中
更改您的代码,这样它就不会将组合框添加到表单中,而是将它们*添加到框架容器中*
在这方面有很多帮助
让我们知道你进展如何
嗯
Philip能否将组合框放在容器控件(如框架)中,然后添加滚动条(设置水平和垂直方向的方向属性) 因此,在循环外添加帧:
ComponentSelectionForm.Controls.Add("Forms.Frame.1", "fraContainer" , True)
然后将滚动条添加到容器中
ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scHorizontal" , True)
with ComponentSelectionForm.Controls("fraContainer").controls("scHorizontal")
' set orentation to Horizontal
.orientation=1
end with
ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scVertical" , True)
with ComponentSelectionForm.Controls("fraContainer").controls("scVertical")
' set orentation to Vertical
.orientation=0
end with
现在,在你的循环中
更改您的代码,这样它就不会将组合框添加到表单中,而是将它们*添加到框架容器中*
在这方面有很多帮助
让我们知道你进展如何
嗯
Philip你好,这是一个子程序。希望这对您的概念有所帮助:) 要修改的内容:
Private Sub UserForm_Click()
Call AddCombo(30)
End Sub
Private Sub AddCombo(num As Integer, Optional gap As Single = 2.25, _
Optional ctrlHeight As Single = 18)
Dim ctrl As Control, i As Integer
Static lastTop As Single
lastTop = 2
For i = 1 To num
Set ctrl = UserForm1.Controls.Add("Forms.ComboBox.1", "Combo" & i, True)
With ctrl
If i = 1 Then
ctrl.Top = lastTop
ctrl.Height = ctrlHeight
'Add other codes here .....
Else
lastTop = lastTop + ctrlHeight + gap
ctrl.Top = lastTop
ctrl.Height = ctrlHeight
'Add other codes here .....
End If
End With
Next i
If lastTop > Me.Height Then
Me.ScrollHeight = lastTop
Me.ScrollBars = fmScrollBarsVertical
End If
End Sub
- 我已经使用UserForm_Click()事件调用AddCombo sub,所以请调用 你想去哪里就去哪里
- 我没有设置left属性,您可以在下面轻松地进行设置 控制高度行
- 根据需要更改其他属性
嗨,这里有一个子程序。希望这对您的概念有所帮助:)
Private Sub UserForm_Click()
Call AddCombo(30)
End Sub
Private Sub AddCombo(num As Integer, Optional gap As Single = 2.25, _
Optional ctrlHeight As Single = 18)
Dim ctrl As Control, i As Integer
Static lastTop As Single
lastTop = 2
For i = 1 To num
Set ctrl = UserForm1.Controls.Add("Forms.ComboBox.1", "Combo" & i, True)
With ctrl
If i = 1 Then
ctrl.Top = lastTop
ctrl.Height = ctrlHeight
'Add other codes here .....
Else
lastTop = lastTop + ctrlHeight + gap
ctrl.Top = lastTop
ctrl.Height = ctrlHeight
'Add other codes here .....
End If
End With
Next i
If lastTop > Me.Height Then
Me.ScrollHeight = lastTop
Me.ScrollBars = fmScrollBarsVertical
End If
End Sub
- 我已经使用UserForm_Click()事件调用AddCombo sub,所以请调用 你想去哪里就去哪里
- 我没有设置left属性,您可以在下面轻松地进行设置 控制高度行
- 根据需要更改其他属性
是的,但我不知道怎么做。我是通过代码而不是图形设计来写的。如果我以图形方式进行,我不会有问题,但它是在代码中进行的。@NoLiver92整个表单是在内存中构造的吗?看起来您应该能够使用forms GUI最初创建这些控件,然后使用VBA操作控件等。如果有疑问,请创建一个具有类似控件的虚拟表单并查看它们的属性。我已经更新了我的代码,并提供了一个链接,您可以从中获得一些示例代码和示例workbook@DavidZemens是的,由于工作程序的性质,它都是从代码创建的。我无法直观地执行此操作,因为它将始终更改为显示文件中的数据。@Philip谢谢你,我现在在家,但我在上班时会做第一件事(因为受限制,我无法将其带回家)。是的,但我不知道如何执行此操作。我是通过代码而不是图形设计来写的。如果我以图形方式进行,我不会有问题,但它是在代码中进行的。@NoLiver92整个表单是在内存中构造的吗?看起来您应该能够使用forms GUI最初创建这些控件,然后使用VBA操作控件等。如果有疑问,请创建一个具有类似控件的虚拟表单并查看它们的属性。我已经更新了我的代码,并提供了一个链接,您可以从中获得一些示例代码和示例workbook@DavidZemens是的,由于工作程序的性质,它都是从代码创建的。我无法直观地执行此操作,因为它将始终更改为显示文件中的数据。@Philip谢谢,我现在在家,但我在工作时会做第一件事(因为受限制,我无法将其带回家)