当我添加具有相同代码的新Sub时,Excel宏不起作用

时间:2014-04-14 18:45:45

标签: excel vba excel-vba

我不会向你发送整个代码,因为它只是一段重复的代码块...下面是代码的全部要点,代码行重复多次“表格“&必要时,“形状”会发生变化。它正在做的是每次单击特定项目时都有一个列表框(其中包含项目列表),大约有30个文本框填充与列表框项目相关的特定子项目。

问题是,它适用于一个选项卡的Sub ListBox1_Change宏,但当我尝试为同一个Excel文件中的第二个选项卡执行此操作时,它表示存在参数错误。然而,这是有趣的部分,当我实际点击文本框时,弹出参数错误。我点击没关系,然后填充。

代码可以工作,但是当我尝试在第二个选项卡上执行时,它无效。我尝试将它们组合成一个Sub,但这根本不起作用。所以我把它们分成了两个独立的Subs。任何输入都会很好。

Sub ListBox1_Change()
  Handle_Change Me, "List Box 1", "TextBox1", "W"
  Handle_Change Me, "List Box 1", "TextBox2", "X"
  Handle_Change Me, "List Box 1", "TextBox3", "Y"
  Handle_Change Me, "List Box 1", "TextBox4", "Z"
  Handle_Change Me, "List Box 1", "TextBox5", "AA"
  Handle_Change Me, "List Box 1", "TextBox6, "AB"
End Sub

与模块中的句柄一起

Sub Handle_Change(sht As Worksheet, lbName, tbName, colAddr)

   Dim idx As Long, lb   As msforms.ListBox

   Set lb = sht.Shapes(lbName).OLEFormat.Object.Object

   idx = lb.ListIndex
   If idx <> -1 Then
       sht.Shapes(tbName).OLEFormat.Object.Object.Text = _
                     sht.Range(colAddr & idx + 1).Value
   End If

End Sub

2 个答案:

答案 0 :(得分:2)

在编写代码之前,您应该重构代码。

编辑:测试后做了一些更改:

'These go in the relvant worksheet code module
Sub ListBox1_Change()
    Handle_Change Me, "ListBox1", "TextBox1", "B"
End Sub

Sub ListBox2_Change()
    Handle_Change Me, "ListBox2", "TextBox2", "C"
End Sub    


'This goes in a *regular* code module
Sub Handle_Change(sht As Worksheet, lbName, tbName, colAddr)

    Dim idx As Long, lb   As msforms.ListBox

    Set lb = sht.Shapes(lbName).OLEFormat.Object.Object

    idx = lb.ListIndex
    If idx <> -1 Then
        sht.Shapes(tbName).OLEFormat.Object.Object.Text = _
                         sht.Range(colAddr & idx + 1).Value
    End If

End Sub

答案 1 :(得分:1)

根据讨论here以及this MSKB article的链接,听起来您看到的错误可能是您的宏名称中的下划线的结果。但这似乎只适用于Excel '97。如果那是您所使用的版本,请取出下划线并查看错误是否消失。