将命名范围值分配给变量(Excel VBA)-新手

问题描述 投票:0回答:1

我有大约10天的VBA Excel经验,所以请原谅我的错误/无知。另外,由于我不懂语言,我可能也找不到解决方案,因此我的问题没有意义。我的查询大部分返回“如何在Excel中使用VBA命名范围”。

我正在构建一个工作簿,其中包含我为制造商服务的公司的控制部件的测试结果。有28个零件,每个零件有6个性能标准。

我正在尝试为每个零件和参数“抢”一个值,以用于条件格式公式:'= rnSource +/-(rnSource * Tolerance)'。

每个零件号都有一个SN和6个测试点结果(TP)。我将范围(单个单元格)命名为SN_TPx(x为1,2,3,... 6)。这些命名的单元格与条件格式设置目标工作表(其中的28个,1 / SN)位于不同的工作表中。各个工作表包含当前运行测试结果(工作表使用SN命名)。当我使用SN_TPx代替rnSource时,以下代码可以正常工作。

原因:我可以通过修改一个“暗淡”代码来重复使用代码,而不是复制/粘贴代码168次并在整个代码中更改单元格引用(出现8次)。我还需要将其应用于其他7个产品系列。

在我的代码中,我尝试执行以下操作:Dim rnSource As Range,然后使用SN_TPx分配to rnSource Set rnSource = SN_TPx。结果是:“运行时错误'424':必需对象”

在过去的12小时中,我试图在线找到解决方案,但无济于事。

我尝试使用rnSource =SN_TPx.Value-'424'错误

[Range(SN_TPx).Value-运行时错误'1004':对象'_Global'的方法'Range'失败]

Range("SN_TPx").Value-代码运行,但是...我的条件格式设置公式导致:“单元格值

[Worksheet("Sheet3").Range(SN_TPx)-编译错误:未定义子函数或函数(工作表)]

Worksheets("Sheet3").Range("SN_TPx")-运行时错误'9':下标超出范围

我尝试过其他我不记得的代码了,但是我确信有一个简单的解决方案,如果有人熟悉VBA,那我就找不到了。

下面的代码:

Sub TP1_CondFormat_AV()
'***   Attempt to handle ranges (source and target) of CondFormat by setting dims and ranges upfront_
' then execute CondFormat routine for each set of dims and ranges


With ActiveSheet

'** par - define needed variables
Dim r1 As Range
Dim r2 As Range
Dim TP1_Range As Range
Dim TP2_Range As Range

'Dim rnSource As Variant ' fail
'Dim rnSource As Integer ' fail
Dim rnSource As Range
Dim rnTarget As Range
Dim wsSource As Worksheet
Dim wsTarget As Worksheet

'*** par - create a range called "rnTarget" which consists of r1 and r2 ranges
Set r1 = Range("L2:L4")
Set r2 = Range("L7:L1048576")
Set rnTarget = Union(r1, r2)
rnTarget.Name = "TP1"    'Name the rnTarget as "TP1"

Set rnSource = Range(SN_TP1).Value  '== troubleshooting, unable to point rnSource to "SN_TP1" value

End With

rnTarget.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _
        Formula1:="=rnSource-(rnSource*Tolerance)"
rnTarget.FormatConditions(rnTarget.FormatConditions.Count).SetFirstPriority
    With rnTarget.FormatConditions(1).Font
        .Bold = True
        .Color = -4165632
        .TintAndShade = 0
    End With
    rnTarget.FormatConditions(1).StopIfTrue = False
    rnTarget.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
        Formula1:="=rnSource+(rnSource*Tolerance)"
    rnTarget.FormatConditions(rnTarget.FormatConditions.Count).SetFirstPriority
    With rnTarget.FormatConditions(1).Font
        .Bold = True
        .Color = -16776961
        .TintAndShade = 0
    End With
    rnTarget.FormatConditions(1).StopIfTrue = False

    End Sub

感谢您抽出宝贵的时间帮助我,

Pawel

excel vba named-ranges
1个回答
0
投票

如果您只是想为Excel命名范围创建VBA范围变量,则只需添加引号。请注意,您应该删除当前具有的.Value,因为这是一个范围的属性(下面是如何访问变量值的示例

© www.soinside.com 2019 - 2024. All rights reserved.