VBA:如何获取数组中存储的Excel命名Range的行数?
解决VBA中获取数组内Range对象行数的问题
问题原因
你将Range对象存入Variant数组后,直接通过数组索引调用.Rows.Count时,VBA无法自动识别数组元素的Range类型,导致属性调用失败。
可行解决方案
方案1:通过临时Range变量中转
先把数组中的元素赋值给明确的Range类型变量,再调用行数属性,这是最稳妥的方式:
Dim tempRng As Range Set tempRng = INPUTS(1) Dim C As Long: C = tempRng.Rows.Count
方案2:显式类型转换
使用CType函数将数组元素强制转换为Range类型,直接调用属性:
Dim C As Long: C = CType(INPUTS(1), Range).Rows.Count
代码优化建议
定义INPUT1~INPUT4时,直接使用Range类型而非Variant,让变量类型更明确,减少后续类型识别问题:
Dim INPUT1 As Range: Set INPUT1 = Range("INPUT1") Dim INPUT2 As Range: Set INPUT2 = Range("INPUT2") Dim INPUT3 As Range: Set INPUT3 = Range("INPUT3") Dim INPUT4 As Range: Set INPUT4 = Range("INPUT4")
另外,存储行数的变量建议用Long类型(而非Variant或Integer),因为Excel最大行数(1048576)超出了Integer的取值范围(最大32767),避免溢出错误。
修改后的完整代码
Private Sub Pop_Click() Dim INPUT1 As Range: Set INPUT1 = Range("INPUT1") Dim INPUT2 As Range: Set INPUT2 = Range("INPUT2") Dim INPUT3 As Range: Set INPUT3 = Range("INPUT3") Dim INPUT4 As Range: Set INPUT4 = Range("INPUT4") Dim INPUTS As Variant: INPUTS = Array(0, INPUT1, INPUT2, INPUT3, INPUT4) ' 使用方案1获取行数 Dim tempRng As Range Set tempRng = INPUTS(1) Dim C As Long: C = tempRng.Rows.Count Dim SR1 As Integer: SR1 = 18 Dim SC1 As Integer: SC1 = 4 Dim ER1 As Integer: ER1 = 19 Dim EC1 As Integer: EC1 = 15 Range(Cells(SR1, SC1), Cells(ER1, EC1)) = INPUTS(1) End Sub
内容的提问来源于stack exchange,提问作者Brian Bodzenta
相关产品推荐
相关产品推荐

