Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excelvba方法&x27;ClearContents';对象范围的设置失败_Vba_Excel_Timestamp - Fatal编程技术网

excelvba方法&x27;ClearContents';对象范围的设置失败

excelvba方法&x27;ClearContents';对象范围的设置失败,vba,excel,timestamp,Vba,Excel,Timestamp,我看过关于“对象范围方法失败”的类似问题,但似乎没有一个能帮助我解决问题 我收到的错误是:“对象范围的“ClearContents”方法失败” 基本上,我试图实现的是,如果单元格值BG21=1,并且相邻单元格(BH21)中字符串的长度为0,则为相邻单元格(BH21)添加时间戳。理想情况下,我想对范围(BG21:BG35)重复此操作。我知道我可以为每个方法使用一个,但我想先清除这个错误 我不想使用cell公式,因为在cell BG21变为1时,我需要一个时间戳。如果我使用单元格公式,那么无论何时打

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

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

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

我不想使用cell公式,因为在cell 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").Value = ""
但我收到了相同的错误代码

有什么建议吗


.

由于在更改BH21的值时编辑了文件,因此它在无限循环中循环。您需要另一个if或其他东西来避免无限循环。我的在编辑空白单元格时效果很好

您还应该将if语句从

Target.Address = ws.Range("$BG$21")


我无法得到错误,但是在你的代码中有两件事你弄错了

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

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

  • 如果Target.Address=“$BH$21”那么这是一个工作表更改事件,您不需要为工作表设置变量,因为您已经在工作表上了。
    Target.Address = "$BG$21"
    
    Application.EnableEvents = False
    ws.Range("$BH$21").ClearContents
    Application.EnableEvents = True