已解决:找到我自己的工作表错误 我遇到的问题是尝试在同一工作簿中使用两个worksheet_change事件。因为我认为这是可能的,所以我只是在收到错误时重新命名有问题的工作表事件,而不考虑它。当与我的其他worksheet_change事件结合使用时,我的原始代码和答案都提供了工作。 谢谢大家。
原始请求:
我正在尝试运行一个执行此操作的宏:
每当单元格r6改变时,运行一个宏来查看单元格s9中的值是否>或者< 1,然后基于此格式化单元格s9:t100。
我自己有宏来做第二部分:
sub macro1()
If Range("S9").Value < 1 Then
Range("S9:S100,T9:T100").Select
Selection.NumberFormat = "0.0%"
Else
Range("S9:S100,T9:T100").Select
Selection.NumberFormat = "#,##0"
End If
end sub
这个宏独立运行,完全按照我的需要工作并格式化单元格。
然后我有工作表事件来调用该宏:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$R$6" Then
Call Macro1
End If
End Sub
当它运行以调用相同的宏时,它不会格式化单元格。无论细胞r6何时发生变化,它们都会保持为%。
为什么工作表事件导致宏不起作用的任何想法?
答案 0 :(得分:1)
尝试将工作表对象传递给宏。这完全符合Ranges
的要求,以确保您在正确的区域工作。
此外,您根本不需要Select
。只需使用范围并直接更改设置。
Public Sub Macro1(ws as Worksheet)
If ws.Range("S9").Value < 1 Then
ws.Range("S9:S100,T9:T100").NumberFormat = "0.0%"
Else
ws.Range("S9:S100,T9:T100").NumberFormat = "#,##0"
End If
end sub
Sub test()
Macro1 ActiveSheet
End Sub
在你的Worksheet_Change
......
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$R$6" Then
Macro1 Target.Worksheet
End If
End Sub