VBA根据另一个不工作的单元格格式化单元格

时间:2016-03-02 21:47:42

标签: excel vba excel-vba macros

已解决:找到我自己的工作表错误 我遇到的问题是尝试在同一工作簿中使用两个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何时发生变化,它们都会保持为%。

为什么工作表事件导致宏不起作用的任何想法?

1 个答案:

答案 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