为什么按下Run Sub时,Excel VBA提示我input一个macros名称

我有以下代码:

Private Sub Worksheet_Change(ByVal Target As Range) Dim RR As Range Dim TestArea As Range Dim foremenList As Range Dim workerList As Range Dim workers As Range Dim Foremen As Range Dim i As Integer Dim R As Range Dim EmplList() As Variant Set TestArea = Sheet90.Range("b4:q8", "b15:q19", "b26:q30") Set foremenList = Sheet90.Range("V24:V30") Set RR = Sheet90.Range("AA25:AA46") i = 0 For Each R In RR.Cells If Len(R.Value) > 0 Then EmplList(i) = R.Value i = i + 1 End If Next R Dim ValidStr As String Set ValidStr = Join(EmplList, ",") With Sheet90.Range("b26").Validation .Delete .Add xlValidateList, xlValidAlertStop, _ xlBetween, "1,2,3" End With Sheet90.Range("b40").Value = "Test" End Sub 

但是当我按运行来testing它,它会提示我一个macros名称。

此外,它不再在Worksheet_Change触发。

这是一个错误(即我忘了一个分号或东西),不断触发Excel VBA行为像这样? 如果是这样的话,我应该在未来寻找什么?

你不能使用Run Subbutton来运行它的原因是因为它需要一个参数。 如果你想运行这个独立的,一个可能性就是在立即窗口中运行它,所以你可以手动传递参数。 由于这一个需要更复杂的数据types(范围),您可能需要创build一个小的子集来调用它,以便您可以正确创build您的范围并将其传入。然后,您可以使用该子集上的Run Sub你的另一个。

到目前为止,它不Worksheet_Change触发,我不能告诉是什么造成它只是从你张贴。 但是,您需要确保它位于您尝试从中运行的工作表的代码页上。 如果您需要使用同一个工具从多个工作表运行,则应将其放入一个模块中,并从每个工作表的Worksheet_Change方法中调用它。

您不能按F5或运行button来运行触发的代码。 您将不得不在该代码所在的工作表中进行更改,以便代码运行。 此外,如果此代码不在Sheet90中,则不会看到任何事情发生,因为此代码仅对Sheet90进行了更改。 最后,要确保事件已启用,可以运行以下代码:

 Sub ReEnable_Events() Application.EnableEvents = True End Sub 

请注意,您仍然必须启用macros。

问题源于两行:

 Set ValidStr = Join(EmplList, ",") 

不是Set关键字的有效用法(它是一个string而不是一个对象)和

 Set TestArea = Sheet90.Range("b4:q8", "b15:q19", "b26:q30") 

显然有太多的论据。

据微软说 ,它应该是一个单一的string参数,如:

 Set TestArea = Sheet90.Range("b4:q8, b15:q19, b26:q30") 

这两个注释都使得代码在运行子button和事件中运行良好。

“名称macros”对话框是某种错误指示器,但我仍然不知道它是什么意思,除了Code Borked