You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:32:08