首页 > 解决方案 > 传递给范围的字符串形式的单元格引用

问题描述

我有名为 rngsx1 ... rngy2 的字典,包括单元格范围引用。这些单元格引用被传递到 rangex1 ... rangey2。因为 Array 参数仅采用 Array("A1:B2") 的形式,因此我需要使用代表引号 (") 的 Chr(34) 传递它们。我为字典中的多个数据字符串制作了 for 循环。我想要将它们的所有第一个元素相互匹配,所有第二个元素相互匹配等等。对于第一次试验,我只使用了字典中的一个元素,我想在定义的范围内打印它们的值。但是子例程没有不能按我的意愿工作。你能帮我解决这个问题吗?

Sub CellReferenceToRange()

Dim rngx1, rngx2, rngy1, rngy2  As Range
Dim rangesx1, rangesx2, rangesy1, rangesy2  As Variant
    
' The Values at C15:C28 are assigned to rangesx1, rangesx2, rangesy1, rangesy2
    rangesx1 = Array("C15:C28")
    rangesy1 = Array("C15:C28")
    rangesx2 = Array("C15:C28")
    rangesy2 = Array("C15:C28")
    
' The Values at assigned ranges are set to rngx1, rngx2, rngy1, rngy2 
    For Each item in rangesx1, rangesx2, rangesy1, rangesy2
        Set rngx1 = Range(Chr(34) & rangesx1 & Chr(34)) ' Chr(34) & rangesx1 & Chr(34) ---> "C15:C28"
        Set rngy1 = Range(Chr(34) & rangesy1 & Chr(34)) ' Chr(34) & rangesx1 & Chr(34) ---> "C15:C28"
        Set rngx2 = Range(Chr(34) & rangesx2 & Chr(34)) ' Chr(34) & rangesx1 & Chr(34) ---> "C15:C28"
        Set rngy2 = Range(Chr(34) & rangesy2 & Chr(34)) ' Chr(34) & rangesx1 & Chr(34) ---> "C15:C28"

' The Set Ranges are printed to the defined cell area.
Range("AD21:AG34") = rngx1 & rngx2 & rngy1 & rngy2
    Next
End Sub

当我运行代码时,我得到一个运行时错误 13“类型不匹配”,它在线上:

Set rngx1 = Range(Chr(34) & rangesx1 & Chr(34)) ' Chr(34) & rangesx1 & Chr(34) ---> "C15:C28"

标签: arraysexcelvbarange

解决方案


Fristrangesx1 = Array("C15:C28")不必是数组而是字符串。

Dim rangesx1 As String 
rangesx1 = "C15:C28"

你不需要Chr(34),因为rangesx1已经是类型String

Set rngx1 = Range(rangesx1)

另请注意,Dim rngx1, rngx2, rngy1, rngy2 As Range仅声明,rngy2 As Range但所有其他Variant默认情况下。您需要为每个变量指定一个类型:

Dim rngx1 As Range, rngx2 As Range, rngy1 As Range, rngy2 As Range

finallyFor Each item in rangesx1, rangesx2, rangesy1, rangesy2不是那样工作的,实际上它不需要在这里循环。

Range("AD21:AG34") = rngx1 & rngx2 & rngy1 & rngy2无法工作,因为与范围的值rngx1相同,Range("C15:C28").Value因此范围的值是一个值数组,并且您不能将值数组与&. 目前还不清楚您要在这里做什么。


推荐阅读