我想从两个字符串变量中设置一个范围变量;范围地址和偏移量
例如,以下代码将Ran设置为R4C6
Dim Str1 As String, Str2 As String, Ran As Range
Str1 = "R1C2"
Str2 = "(3,4)"
Set Ran = Evaluate(Str1).Offset(MID(Str2, 2, 1), MID(Str2, 4, 1))
Debug.Print Ran.Address(, , xlR1C1)
是否可以直接从字符串执行此操作,而不是像我的示例那样将偏移字符串转换为行和列组件?
我尝试了各种语法,例如
Set Ran = Evaluate(Str1 & ".Offset" & Str2)
但找不到任何有效的方法
答案 0 :(得分:1)
您必须以某种方式提取数字。
如果您使用字符串作为Range
对象的参数,则该字符串必须为A1
样式。而且,当然,如果使用Cells
对象,则可以使用数字(用于行或列)或字符串(用于A1样式)作为列名。
这是另一种使用正则表达式提取数值的方法,但是有很多方法可以做到这一点:
显式选项
Sub due()
Dim Str1 As String, Str2 As String, Ran As Range
Dim RE As Object, MC As Object
Str1 = "R1C2"
Str2 = "(3,4)"
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.Pattern = "\d+"
Set MC = .Execute(Str1)
Set Ran = Cells(MC(0), MC(1))
Set MC = .Execute(Str2)
Set Ran = Ran.Offset(MC(0), MC(1))
End With
Debug.Print Ran.Address(ReferenceStyle:=xlR1C1)
End Sub