我看过类似的问题“对象范围失败的方法”,但似乎没有一个能帮我解决问题。
我收到的错误是:“对象范围失败的方法'ClearContents”
基本上我想要实现的是,如果BG21的单元格值= 1并且相邻单元格(BH21)中的字符串长度为0则对相邻单元格(BH21)加时间戳。理想情况下,我想重复一下Range(BG21:BG35)。我知道我可以为每个方法使用a但我想先清除此错误。
我不想使用单元格公式,因为在单元格BG21更改为1时我需要时间戳。如果我使用单元格公式,那么只要打开工作簿,时间戳就会更改。
我的代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Submittal Kickoff Meeting")
If (ws.Range("$BG$21").Value = 1 And len(ws.Range("$BH$21").Value) = 0 And Target.Address = ws.Range("$BG$21")) Then
ws.Range("$BH$21").Value = Format(Now(), "m/dd/yyyy hh:mm:ss AM/PM")
Else
ws.Range("$BH$21").ClearContents '<--- Error occurs here
End If
End Sub
错误发生在行:
ws.Range("$BH$21").ClearContents
我也尝试过:
ws.Range("$BH$21").Value = ""
但我收到了相同的错误代码
有什么建议吗?
答案 0 :(得分:2)
我无法得到错误,但您的代码中有两件事你做错了。
Target.Address = ws.Range("$BG$21")
Range
的默认属性为Value
,因此您在此处将地址与值进行比较。 ws.Range("$BH$21").ClearContents
会导致无限循环,因为此代码会更改工作表,因此发生Change
事件并再次启动宏。使用EnableEvents
来避免这种情况。
Application.EnableEvents = False
ws.Range("$BH$21").ClearContents
Application.EnableEvents = True
答案 1 :(得分:1)
由于您在更改BH21的值时编辑文件,因此您可以循环无限循环。你将需要另一个if或其他东西来避免无限循环。我的编辑单元格空白处理得很好。
您还应该从
更改if语句Target.Address = ws.Range("$BG$21")
到
Target.Address = "$BG$21"