Excel VBA使用范围属性设置命名单元格公式

克布罗迪

希望您能提供帮助。此时,我的头撞在墙上。对编写VBA来说还算是新手。我下面列出了一些VBA代码。本质上,我要执行的操作是锁定/解锁,更改填充颜色,并使用工作表更改事件和ActiveSheet根据下拉菜单中的输入为一系列单元格设置公式。该代码位于工作表本身上。除公式设置部分外,其他所有功能均正常运行。

Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet
.Unprotect Password:="somepw"
    If Range("d17").Value = "Yes" Then
        .Range("D22:D78").Locked = False
        .Range("D22:D78").Interior.Color = RGB(115, 246, 42)
        .Range("Inc_06PCTotRev").Formula = "=SUM($D$22:$D$25)"
    ElseIf WorksheetFunction.CountA(Range("d22:D78")) <> 0 Then
        If .Range("D22").Locked = True Then
            With Range("D22:D78")
                .Locked = False
                .ClearContents
                .Interior.Color = RGB(217, 217, 217)
            End With
        Else:  .Range("D22:D78").ClearContents
        End If
    Else: .Range("D22:D78").Interior.Color = RGB(217, 217, 217)
          .Range("D22:D78").Locked = True
    End If
.Protect Password:="somepw"
End With
End Sub

包括在内时,我收到一条错误消息,指出“对象_worksheet的方法范围失败”,并且excel崩溃。如果我将其注释掉,它将正常启动。任何帮助将不胜感激。请告诉我这是否不够具体或没有意义,我会尽力扩展。

索尔塞里

正如我在评论中所发布的那样,您处于永无止境的循环中,因为您在工作表更改事件中更改了工作表。您需要跟踪变更呼叫。可以通过创建变量来跟踪调用更改的时间来减轻这种情况,这也假设名称范围是1个单元格。

Public bRunning As Boolean 'keeps track of when we are making the change

Private Sub Worksheet_Activate()
    bRunning = False 'set to false when the sheet is activated
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If bRunning = False Then 'check to see if this is the first change
    bRunning = True 'set the variable letting us know we are making the change.
    With ActiveSheet

    .Unprotect Password:="somepw"
        If Range("d17").Value = "Yes" Then
        .Range("D22:D78").Locked = False
        .Range("D22:D78").Interior.Color = RGB(115, 246, 42)
        .Range("Inc_06PCTotRev").Formula = "=SUM($D$22:$D$25)"
        ElseIf WorksheetFunction.CountA(Range("d22:D78")) <> 0 Then
        If .Range("D22").Locked = True Then
            With Range("D22:D78")
            .Locked = False
            .ClearContents
            .Interior.Color = RGB(217, 217, 217)
            End With
        Else:  .Range("D22:D78").ClearContents
        End If
        Else: .Range("D22:D78").Interior.Color = RGB(217, 217, 217)
          .Range("D22:D78").Locked = True
        End If
    .Protect Password:="somepw"
    End With
    Else
    bRunning = False 'reset the variable as we are done making changes
    End If
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel VBA-是否可以通过使用矩阵为范围的每个单元格设置属性?

Excel VBA-替换单元格公式内的文本

如何使用VBA将Excel公式应用于动态范围的单元格?

Excel VBA替换范围单元格

将范围内的单元格合并到Excel VBA中的范围公式

Excel VBA将(不变)时间戳添加到命名单元格

使用节点js从excel读取命名的单元格/范围

动态范围Excel VBA:您可以库存一个单元格范围,然后使用范围功能再次调用它吗?

Excel单元格的条件公式范围

VBA Excel中的单元格范围

通过VBA在Excel中复制单元格公式

使用VBA在Excel中命名单元格名称框

Excel:如果相关键在使用公式的值范围内,则对单元格区域求和

在Excel中删除行不会重置最后一个单元格(使用范围)

具有多个引用命名范围的单元格的CountIFs的Excel公式

Excel公式SUMIFS使用数组范围内的单元格值

如何在VBA Excel中从单元格中的公式获取参数范围?

使用Excel VBA将Excel公式(Excel格式)粘贴到单元格中吗?

Excel VBA 用公式中的答案替换单元格

从 vba 向 Excel 单元格添加公式

Excel 中的命名单元格和公式

Excel - Unicode 命名单元格范围

VBA Excel 选择命名范围内的一系列单元格

将列单元格值设置为动态范围内的公式 Maatwebsite/Excel 2.1.0

Excel VBA 尝试使用 For-Loop 将“MAX”公式写入具有不同范围的单元格

在 Excel/VBA 中,如何根据单元格值将公式应用于范围?

Excel VBA删除仅包含公式的空白单元格

在 Excel VBA 中将命名范围重新定义为不同的单元格

Excel 命名范围公式,用于单元格序列