我不会向你发送整个代码,因为它只是一段重复的代码块...下面是代码的全部要点,代码行重复多次“表格“&必要时,“形状”会发生变化。它正在做的是每次单击特定项目时都有一个列表框(其中包含项目列表),大约有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
答案 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。如果那是您所使用的版本,请取出下划线并查看错误是否消失。