我目前在工作表(Box1,Box2,Box3)中使用了三个ListBox的代码,这些代码都填充了相同的值。一个框是单选,另外两个是多选。我有渲染问题(当其他人打开文件时,框大小增加)并认为可能值得切换到表单ListBoxes。我还没有能够获得翻译代码。
目前我有这个功能来填充框:
Sub FillBox(MyBox As MSForms.ListBox, MultiType As Integer, DataArray As Variant)
With MyBox
.Clear
.MultiSelect = MultiType
For j = 1 To UBound(DataArray)
.AddItem DataArray(j)
Next j
End With
End Sub
要从单选框中收集值 Box1 ,我使用:
Sheets(2).Cells(1,1) = Box1.Value
要从 Box2 和 Box3 获取值,可以使用以下类型的代码:
For k = 0 To Box2.ListCount - 1
If Box2.Selected(k) = True Then
Sheets(2).Cells(k+1,2) = Box2.List(k)
End If
Next k
我无法使用这些相同的函数来处理表单ListBox,包括.Clear,.Selected(),。List()等。这些类型的操作的替代语法是什么?或者,如果有的话,有没有办法避免ActiveX ListBox的错误呈现?
这是渲染问题,它首先引发了这一切:
答案 0 :(得分:0)
我遇到了同样的问题,这是我的解决方案:
我删除了一个列表框,添加它并在每次打开一本书时填写它。因此,在这种情况下,每次一个框将在“B3:D17”范围内
Private Sub Workbook_Open()
Set ws = Sheets("Hoja1")
ws.OLEObjects("ListBox1").Delete
Set Rng = ws.Range("B3:D17")
Set mylist = ws.Range("G3:G7")
ws.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=Rng.Left, Top:=Rng.Top, _
Width:=Rng.Width, Height:=Rng.Height).Name = "ListBox1"
ws.OLEObjects("ListBox1").ListFillRange = mylist.Address
End Sub
我发现了另一种方式,甚至更好:
在工作簿打开时调整列表框的大小
Private Sub Workbook_Open()
Set ws = Sheets("Hoja1")
Set Rng = ws.Range("B3:D17")
With ws.Shapes.Range(Array("ListBox1"))
.Left = Rng.Left
.Top = Rng.Top
.Width = Rng.Width
.Height = Rng.Height
End With
End Sub