当我用相同的代码添加一个新的Sub时Excelmacros不工作

我不会把你的整个代码发给你,因为它只是一个重复的代码块……下面是代码的总体要点,代码行被重复多次,“Sheets”&“形状“在必要时改变。 它在做什么是我有一个列表框(其中有一个项目列表),每次你点击一个特定的项目,大约有30个文本框填充与列表框项目有关的特定子项目。

问题是,它正在为一个选项卡Sub ListBox1_Changemacros,但是当我尝试在同一个Excel文件中的第二个选项卡这样做它说有一个参数错误。 但是,这是一个有趣的部分,当我实际上点击文本框时popup参数错误。 我点击好,然后填充。

代码工作,但它不工作,当我尝试在第二个选项卡上。 我试过把它们合并成一个Sub,但是这根本不起作用。 所以我把它们分成两个独立的子。 任何input都会很好。

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 

在你写更多之前,你应该重构你的代码。

编辑 :testing后做了一些更改:

 '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 

根据这里的讨论,以及这篇MSKB文章的链接,这听起来像是你看到的错误可能是你的macros名下划线的结果。 这似乎只适用于Excel '97,但。 如果这是你正在使用的版本,取出下划线,看看错误是否消失。