希望您能提供帮助。此时,我的头撞在墙上。对编写VBA来说还算是新手。我下面列出了一些VBA代码。本质上,我要执行的操作是锁定/解锁,更改填充颜色,并使用工作表更改事件和ActiveSheet根据下拉菜单中的输入为一系列单元格设置公式。该代码位于工作表本身上。除公式设置部分外,其他所有功能均正常运行。
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet
.Unprotect Password:="somepw"
If Range("d17").Value = "Yes" Then
.Range("D22:D78").Locked = False
.Range("D22:D78").Interior.Color = RGB(115, 246, 42)
.Range("Inc_06PCTotRev").Formula = "=SUM($D$22:$D$25)"
ElseIf WorksheetFunction.CountA(Range("d22:D78")) <> 0 Then
If .Range("D22").Locked = True Then
With Range("D22:D78")
.Locked = False
.ClearContents
.Interior.Color = RGB(217, 217, 217)
End With
Else: .Range("D22:D78").ClearContents
End If
Else: .Range("D22:D78").Interior.Color = RGB(217, 217, 217)
.Range("D22:D78").Locked = True
End If
.Protect Password:="somepw"
End With
End Sub
包括在内时,我收到一条错误消息,指出“对象_worksheet的方法范围失败”,并且excel崩溃。如果我将其注释掉,它将正常启动。任何帮助将不胜感激。请告诉我这是否不够具体或没有意义,我会尽力扩展。
正如我在评论中所发布的那样,您处于永无止境的循环中,因为您在工作表更改事件中更改了工作表。您需要跟踪变更呼叫。可以通过创建变量来跟踪调用更改的时间来减轻这种情况,这也假设名称范围是1个单元格。
Public bRunning As Boolean 'keeps track of when we are making the change
Private Sub Worksheet_Activate()
bRunning = False 'set to false when the sheet is activated
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If bRunning = False Then 'check to see if this is the first change
bRunning = True 'set the variable letting us know we are making the change.
With ActiveSheet
.Unprotect Password:="somepw"
If Range("d17").Value = "Yes" Then
.Range("D22:D78").Locked = False
.Range("D22:D78").Interior.Color = RGB(115, 246, 42)
.Range("Inc_06PCTotRev").Formula = "=SUM($D$22:$D$25)"
ElseIf WorksheetFunction.CountA(Range("d22:D78")) <> 0 Then
If .Range("D22").Locked = True Then
With Range("D22:D78")
.Locked = False
.ClearContents
.Interior.Color = RGB(217, 217, 217)
End With
Else: .Range("D22:D78").ClearContents
End If
Else: .Range("D22:D78").Interior.Color = RGB(217, 217, 217)
.Range("D22:D78").Locked = True
End If
.Protect Password:="somepw"
End With
Else
bRunning = False 'reset the variable as we are done making changes
End If
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句