带有SelectionChange的Excel VBA用户窗体代码的编译错误

时间:2019-05-15 14:45:20

标签: excel vba

第一次在此处发布关于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=,并给我带来编译错误。

该代码在网站上的模板工作簿中正常运行,但我无法弄清楚为什么它在我的系统中不起作用。

非常感谢您的帮助,我已经尝试解决了几个小时!

0 个答案:

没有答案