繁体   English   中英

Excel VBA - 为什么我收到运行时错误

[英]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

变量AdmShProdLinLowRan属于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM