[英]VBA to format cells based on another cell not working
解决:发现我自己的工作表错误我正在尝试在同一工作簿中使用两个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何时更改,它们都将保持为%。
为什么工作表事件会导致宏不起作用?
尝试将工作表对象传递给您的宏。 这充分证明了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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.