【问题标题】:VBA to format cells based on another cell not workingVBA根据另一个单元格格式化单元格不起作用
【发布时间】:2016-03-02 21:47:41
【问题描述】:

已解决:发现我自己的工作表错误 我遇到的问题是尝试在同一个工作簿中使用两个 worksheet_change 事件。因为我认为这是可能的,所以当我收到错误时,我只是重命名了有问题的工作表事件,没有考虑它。当与我的其他 worksheet_change 事件结合使用时,我的原始代码和提供的答案都有效。 谢谢大家。

原始请求:

我正在尝试运行执行此操作的宏:

每次单元格 r6 发生变化时,运行一个宏来查看单元格 s9 中的值是 > 还是

我有自己的宏来做第二部分:

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 何时发生变化,它们都保持为 %。

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

【问题讨论】:

  • R6 中的值是由于公式的结果还是直接用户输入而变化? Worksheet_Change 没有捕获第一个。

标签: vba excel macros


【解决方案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

【讨论】:

  • 我有点困惑。首先,这种组合产生了同样的问题。但是,当我将上面的公共宏添加到一个模块时,它不会出现在我的宏列表中,所以我不能自己测试它以确保它工作。我不需要更改任何内容以适合我的工作簿,对吗? excel版本重要吗?我被困在 2007 年
  • Worksheet_Change 事件和Macro1 对我来说都很好。我在上面添加了一个快速测试子用于调试作为说明。在 VBA 编辑器中,将编辑光标放在 test() 子中,然后按 F5 执行,或按 F8 单步执行。如有必要,您可以一路检查每个语句。您的 Worksheet_Change 是否在 Sheet 模块(不是您的代码模块)上?
  • 是的,和原来一样的问题。当我自己运行macro1时,它会正确格式化所有内容。但作为 worksheet_change 的一部分,它似乎什么也没做。我完全被这个迷惑了。也许我的工作簿太乱了。还有其他事情正在发生,但没有什么应该相互作用。我将尝试将新工作簿隔离到本节并尝试。再次感谢。
  • 从事我在另一本工作簿中所做的娱乐活动。我正在工作的那个肯定有什么问题。我将不得不进行故障排除。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2016-02-05
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
相关资源
最近更新 更多