对象范围的Excel VBA方法'ClearContents'失败

时间:2016-01-27 15:46:16

标签: excel vba excel-vba timestamp

我看过类似的问题“对象范围失败的方法”,但似乎没有一个能帮我解决问题。

我收到的错误是:“对象范围失败的方法'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 = ""

但我收到了相同的错误代码

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我无法得到错误,但您的代码中有两件事你做错了。

  1. Target.Address = ws.Range("$BG$21") Range的默认属性为Value,因此您在此处将地址与值进行比较。
  2. 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"