我有大约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'失败]
[ 我尝试过其他我不记得的代码了,但是我确信有一个简单的解决方案,如果有人熟悉VBA,那我就找不到了。 下面的代码: 感谢您抽出宝贵的时间帮助我, PawelRange("SN_TPx").Value
-代码运行,但是...我的条件格式设置公式导致:“单元格值Worksheet("Sheet3").Range(SN_TPx)
-编译错误:未定义子函数或函数(工作表)]Worksheets("Sheet3").Range("SN_TPx")
-运行时错误'9':下标超出范围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
如果您只是想为Excel命名范围创建VBA范围变量,则只需添加引号。请注意,您应该删除当前具有的.Value
,因为这是一个范围的属性(下面是如何访问变量值的示例