在执行下面的代码时,我不断得到标题中提到的错误:
Sub test()
Dim j As Integer
j = 2
If ActiveSheet.Name = "Email" Then
Sheets("Lists").Range("Z2:Z31").Cells.Value = ""
For i = 2 To 190
If Sheets("Lists").Cells(i, 8).Value = Cells(2, 2).Value Then
Sheets("Lists").Cells(j, 26).Value = Sheets("Lists").Cells(i, 6).Value
j = j + 1
End If
Next
Range("C12:O12").AutoFilter 1, ">=" & Range("B1").Value, xlAnd, "<=" & Range("C1").Value
End If
End Sub
当工作表中发生任何更改时,通过添加此类事件,将自动执行此代码。
Public WithEvents appevent As Application
Private Sub appevent_SheetChange(ByVal sh As Object, ByVal target As Range)
Call test
End Sub
并使用VBA中ThisWorkbook
选项卡中的Workbook_Open
方法,在工作表打开时自动添加事件,如下所示。
Dim myobject As New Class1
Private Sub Workbook_Open()
Set myobject.appevent = Application
End Sub
虽然当通过调试器正常执行时,只需按F5,代码就可以完美地执行。
我想做的是,在用户从数据验证单元格中选择一个选项后,工作表自动更新该工作表中查看的内容,并将“列表”工作表中的其他一些单元格设置为与原始单元格不同的值。
到目前为止,当通过调试器按F5键运行时,代码执行得很完美,所以我不知道为什么会出现这样的错误。我的猜测是VBA不允许以编程方式更改单元格值,除非工作表被选中,所以如果工作表未被选中,我该如何更改。
如果你能请好心帮助。谢谢
1条答案
按热度按时间dxxyhpgq1#
您正在使用“范围”(...)和“单元格”(...),但未指定“工作表”。使用.Select设置引用对象并不是一种好的做法,但您更喜欢显式设置对象。