[英]Excel VBA - Why am I getting Runtime Error
每个人,
有人可以帮我理解以下代码有什么问题吗?
Sub CombDelDuplShNamCellAdd()
Dim ProdVal As New Scripting.Dictionary
ProdVal.Add "ULP", 100000
ProdVal.Add "PULP", 200000
ProdVal.Add "SPULP", 300000
ProdVal.Add "XLSD", 400000
ProdVal.Add "ALPINE", 500000
ProdVal.Add "JET", 600000
ProdVal.Add "SLOPS", 700000
Dim AdmSh, CalSh As Worksheet, ProdLinLowRan, ProdLinUppRan As Range
Set CalSh = Sheets("Calendar")
Set AdmSh = Sheets("AdminSheet")
'''' Data Prep Table
ProdLinLowRan = Range(AdmSh.Range("B10")).Offset(1).Address
ProdLinUppRan = Range(AdmSh.Range("B10")).Offset(69).Address
MsgBox ProdLinLowRan
为什么我会收到此错误? 无法理解。 我是新手顺便说一句。
干杯。
您的 Dim'ed 不正确。
Dim AdmSh As Worksheet
Dim CalSh As Worksheet
Dim ProdLinLowRan As Range
Dim ProdLinUppRan As Range
所有这些对象都需要一个Set
。
ProdLinLowRan
没有失败的原因是,您将其调暗为Variant ,这是非常宽容的。
您的代码存在多个问题。
a)您的变量声明有缺陷。 您需要分别为每个变量指定变量类型。 如果你写
Dim AdmSh, CalSh As Worksheet, ProdLinLowRan, ProdLinUppRan As Range
变量AdmSh
和ProdLinLowRan
将不属于Worksheet
类型。 Range
,它们将是Variant
类型。 您需要使用(为了便于阅读,分成两行)
Dim AdmSh as Worksheet, CalSh As Worksheet
Dim ProdLinLowRan as Range, ProdLinUppRan As Range
b) AdmSh.Range("B10").Offset(69)
已经是一个范围。 无需在其周围写Range
。
c) 如果要分配 object (并且 Range 是一个对象),则需要指定Set
。
Set ProdLinLowRan= AdmSh.Range("B10").Offset(1)
Set ProdLinUppRan = AdmSh.Range("B10").Offset(69)
您的代码中当前发生的情况是:
ProdLinLowRan = Range(AdmSh.Range("B10")).Offset(1).Address
ProdLinUppRan = Range(AdmSh.Range("B10")).Offset(69).Address
右侧部分( Range(AdmSh.Range("B10")).Offset(1).Address
)将返回范围的地址作为字符串( $B$11
)。 由于ProdLinLowRan
被声明为 Variant,VBA 会将该字符串写入ProdLinLowRan
并假设您有一个 String 变量。 不是你想要的,但可能。
但是, ProdLinUppRan
被声明为Range
,但未分配(在 VBA 术语中,它是Nothing
)。 将某些内容写入 Range 会将某些内容写入单元格,例如ProdLinUppRan = 3
会将数字 3 写入该单元格,但前提是 range 变量指向某些内容。 由于情况并非如此,您将收到运行时错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.