【问题标题】:Excel VBA Method 'ClearContents' of Object Range Failed对象范围的 Excel VBA 方法“ClearContents”失败
【发布时间】:2016-05-04 16:02:36
【问题描述】:

我已经查看了有关“对象范围方法失败”的类似问题,但似乎没有一个可以帮助我解决我的问题。

我收到的错误是:“对象范围的方法'ClearContents'失败”

基本上我想要实现的是,如果 BG21 的单元格值 = 1 并且相邻单元格 (BH21) 中字符串的长度为 0,则为相邻单元格 (BH21) 加上时间戳。理想情况下,我想对 Range (BG21:BG35) 重复此操作。我知道我可以为每种方法使用一个,但我想先清除这个错误。

我不想使用单元格公式,因为在单元格 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 = ""

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

有什么建议吗??

.

【问题讨论】:

  • 你不能以If Target.Address = "$BH$21" Then开始代码吗这是一个worksheet_change事件,你不需要为工作表设置变量,因为你已经在工作表上。

标签: vba excel timestamp


【解决方案1】:

当您更改 BH21 的值时,由于您编辑文件,它会在无限循环中循环。您将需要另一个 if 或其他东西来避免无限循环。我的工作得很好,可以用空白编辑单元格。

您还应该从

更改您的 if 语句
Target.Address = ws.Range("$BG$21")

Target.Address = "$BG$21"

【讨论】:

    【解决方案2】:

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

    1. Target.Address = ws.Range("$BG$21") Range 的默认属性是 Value,因此您可以在此处将 Address 与 Value 进行比较。
    2. ws.Range("$BH$21").ClearContents 将导致无限循环,因为此代码更改工作表,所以Change 事件发生并且宏再次启动。使用EnableEvents 来避免这种情况。

      Application.EnableEvents = False
      ws.Range("$BH$21").ClearContents
      Application.EnableEvents = True
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多