1

我有以下代码:

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

但是当我按下运行来测试它时,它会提示我输入一个宏名称。

此外,它不再触发Worksheet_Change

这是一个错误(即我忘记了分号或其他东西),它始终触发 Excel VBA 表现得像这样吗?如果是这样,我将来应该寻找什么?

4

3 回答 3

3

你不能用Run Sub按钮运行这个的原因是它需要一个参数。如果你想独立运行,一种可能是在即时窗口中运行它,这样你就可以手动传递参数。由于这个需要更复杂的数据类型(范围),您可能需要创建一个小子来调用它,以便您可以正确创建您的范围并将其传递。然后您可以在此子上使用运行子,它将调用你的另一个。

至于它没有在 Worksheet_Change 上触发,我无法仅从您发布的内容中判断是什么原因造成的。但是,您确实需要确保它位于您尝试从中运行它的工作表的代码页上。如果您需要从多个工作表中运行相同的工作表,则应将其放入一个模块中并从每个工作表的 Worksheet_Change 方法中调用它。

于 2013-09-05T15:03:51.380 回答
1

您不能按 F5 或运行按钮来运行触发代码。您必须在此代码所在的工作表中进行更改才能运行代码。此外,如果此代码不在 Sheet90 中,那么您将看不到任何事情发生,因为此代码仅对 Sheet90 进行更改。最后,为了确保启用事件,您可以运行以下代码:

Sub ReEnable_Events()
    Application.EnableEvents = True
End Sub

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

于 2013-09-05T15:03:43.570 回答
1

问题源于两行:

Set ValidStr = Join(EmplList, ",")

不是Set关键字的有效使用(它是字符串而不是对象),并且

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

显然有太多的争论。

根据Microsoft,它应该是一个单一的字符串参数,如:

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

将这两个注释掉使代码在运行子按钮和事件上都运行良好。

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

于 2013-09-05T15:14:13.203 回答