繁体   English   中英

VBA根据另一个无法工作的单元格来格式化单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM