【问题标题】:Getting 1004 error on code that worked after adding new code添加新代码后工作的代码出现 1004 错误
【发布时间】:2021-03-19 21:00:57
【问题描述】:

我很难过(不需要太多)。我有两段代码似乎不能很好地协同工作。我希望他们或找到替代方案。第一个是清除内容和更改格式的命令按钮代码。在我添加“如果值更改”代码之前,这工作得非常好。值更改代码是指格式从第一个代码更改的范围内的单元格。我想这就是问题所在。代码大部分使用命名范围。我尝试使用单元格地址,在代码中定义范围,保护/取消保护,并将工作表名称添加到范围中。

此代码无需“如果值更改”代码即可正常工作。

Private Sub CommandButton2_Click()
    Sheets("PN Generation").unprotect Password:="1234"
    Range("SELECT").Value = 2
    Range("PNSELECT").ClearContents
    Range("SMC").ClearContents
    Range("ALL").Interior.ColorIndex = 35
    Range("ALL").Font.ColorIndex = 49
    Range("SMC").Interior.ColorIndex = 6
    Range("SMCD").Font.ColorIndex = 15
    Range("SMCD").Interior.ColorIndex = 15
    Call protect

End Sub

使用下面的代码时,上面的代码从第 5 行开始返回 1004 应用程序定义/对象定义错误 - "Range("ALL").Interior.ColorIndex=35."

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D3")) Is Nothing Then
    
            If Range("PNI") = "G" Or Range("PNI") = "U" Or Range("PNI") = "L" Or Range("PNI") = "T" Then
            Sheets("Reverse Build").Range("MV").Copy
            Sheets("PN Generation").Range("PFLMV").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "A" Or Range("PNI") = "B" Or Range("PNI") = "C" Or Range("PNI") = "V" Or Range("PNI") = "AR" Then
            Range("LV").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "S" Or Range("PNI") = "P" Then
            Range("SIN").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "F" Then
            Range("BARE").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "R" Then
            Range("LVU").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
       End Sub

我想了解我收到错误的原因以及如何修复以防止错误。

【问题讨论】:

  • 忘了说。 “ALL”命名范围是 D2:F4 和 D7:F7。 D3 是目标细胞。
  • 您只是在测试 Range("PNI"),您是否评估过使用 Select Case 块而不是一堆 Ifs 的可能性?
  • 不,但这只是因为我在使用 Select Case 代码时运气不佳。我理解这个概念,但我陷入了语法中。不过这是个好主意。我试试看。
  • 好消息是我能够让 Select Case 工作。坏消息是它并没有阻止这个问题。我猜问题是当命令按钮代码清除单元格时,它会在命令按钮代码完成之前触发 ByValue 代码。这有意义吗?有没有办法防止这种情况发生?
  • Application.EnableEvents = False... Application.EnableEvents = True?

标签: excel vba byval


【解决方案1】:

Application.EnableEvents = False... Application.EnableEvents = True 有效。

谢谢大本。你应该知道,你刚刚帮助了一个孟加拉虎球迷。哈哈

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2019-12-14
    • 2015-08-28
    相关资源
    最近更新 更多