首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于另一个单元格不工作的VBA设置单元格格式

基于另一个单元格不工作的VBA设置单元格格式
EN

Stack Overflow用户
提问于 2016-03-02 21:47:41
回答 1查看 965关注 0票数 0

解决了:找到了我自己的工作表错误,我遇到的问题是试图在同一个工作簿中使用两个worksheet_change事件。因为我认为这是可能的,所以当我收到一个错误时,我只是重新命名了所讨论的工作表事件,对此我什么也不想。当与我的其他worksheet_change事件相结合时,我的原始代码和答案都提供了工作。谢谢大家。

原始请求:

我试图运行一个宏来执行以下操作:

每次单元格r6更改时,运行一个宏,以查看单元格s9中的值是>还是< 1,然后根据此设置单元格S9:T 100的格式。

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

代码语言:javascript
复制
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

此宏自行运行,完全按照我的要求工作,并设置单元格的格式。

然后我将有一个工作表事件来调用这个宏:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$R$6" Then
Call Macro1
End If
End Sub

当它运行以调用相同的宏时,它不会格式化单元格。不管何时单元格r6发生变化,它们只是作为%保持不变。

知道工作表事件为什么会导致宏不工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-02 21:58:22

尝试将工作表对象传递给宏。这完全符合Ranges的条件,以确保您在正确的区域上工作。

而且,您根本不需要Select。只需使用范围和直接改变设置。

代码语言:javascript
复制
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里..。

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$R$6" Then
        Macro1 Target.Worksheet
    End If
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35758755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档