第一次在此处发布关于stackoverflow的信息(所以我希望我遵守所有规则)。我在这里(以及整个Google)浏览了这么多帖子,找到了答案,但是我没有尝试过。
我文件的背景: 我有一个包含项目列表的工作表(sheet1)(就此示例而言,我们只说Apple,Banana,Orange等)。它们在A列中(准确地说是A2:A77)。
现在在Sheet2上,当您单击特定的单元格时,我想弹出一个用户窗体(假设在sheet2上为A2:A50)。弹出UserForm时,将出现一个带有可搜索列表(组合框)的下拉列表和一个按钮(基本上是您“接受”所选内容,然后将其添加到所选单元格中的位置)。我已经在此网站(http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm#ListeIntuitiveForm)上找到了一个模板,该模板完全符合我的要求。该网站为法语,但基本上是指向名为“ Recherche Intuitive TextBox ListBox Form”的模板的链接。
如上所述,我已经完全从模板复制了代码。我确保命名是相同的,命名范围等,但是没有任何作用。我尝试更改部分代码(将其设置为范围,设置变量等,但始终会出错)。
这是我在Sheet2中的代码(在其中单击要弹出的用户窗体的单元格):
Private Sub WorkSheet_SelectionChange(ByVal Target as Range)
If Not Intersect ([A2:A50]), Target) Is Nothing And Target.Count = 1 Then
UserForm4.Left = Target.Left + 150
UserForm4.Top = Target.Top + 90 - Cells(ActiveWindow.ScrollRow, 1).Top
UserForm.Show
End If
End Sub
这是我为UserForm编写的代码(我已经仔细检查了对象的命名,它们是相同的):
Dim a()
Private Sub UserForm_Initialize()
Set a = [Liste]
Me.ComboBox1.List = a
End Sub
Private Sub ComboBox1_Change()
Set d1 = CreateObject("Scripting.Dictionary")
tmp = UCase(Me.ComboBox1) & "*"
For Each c In a
If UCase(c) Like tmp Then d1(c) = ""
Next c
Me.ComboBox1.List = d1.keys
Me.ComboBox1.DropDown
End Sub
Private Sub CommandButton1_Click()
ActiveCell = Me.ComboBox1
Unload Me
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then ActiveCell = Me.ComboBox1: Unload Me
End Sub
上面提到的模板包括代码,用户窗体,列表等,但是由于某些原因,当我尝试复制它时,它给了我错误。它始于错误424(我已解决),然后是错误91(也已解决),但现在它给了我一个“编译错误:无法分配给数组”错误。
当我尝试调试(F8)时,它突出显示了代码的这一部分:
Private Sub UserForm_Initialize()
-以黄色突出显示
a = [Liste].Value
(这是原始版本,给我424错误;
当我将其更改为Set a = [Liste]
(我在网上找到的建议之一)时,它会以蓝色突出显示a=
,并给我带来编译错误。
该代码在网站上的模板工作簿中正常运行,但我无法弄清楚为什么它在我的系统中不起作用。
非常感谢您的帮助,我已经尝试解决了几个小时!