如何将String转换为Range对象

时间:2010-05-26 09:19:42

标签: vba

无论如何将字符串值转换为Range对象?我有一个函数,它将一个Range对象作为参数,需要将一个字符串参数传递给它

谢谢

6 个答案:

答案 0 :(得分:4)

带有单元格地址的字符串?如果是的话:

Dim r As Range: Set r = Range("B3")
MsgBox r.ColumnWidth

答案 1 :(得分:2)

我不喜欢这一点,但是如果你不能改变需要范围的函数,你可以创建一个将字符串转换为范围的函数。您需要确保第一个函数唯一关心的是Value或Text属性。

Function FuncThatTakesRange(rng As Range)

    FuncThatTakesRange = rng.Value

End Function

Function ConvertStringToRange(sInput As String) As Range

    Dim ws As Worksheet

    Set ws = Workbooks.Add.Sheets(1)

    ws.Range("A1").Value = sInput

    Set ConvertStringToRange = ws.Range("A1")

    Application.OnTime Now + TimeSerial(0, 0, 1), "'CloseWB """ & ws.Parent.Name & """'"

End Function

Sub CloseWb(sWb As String)

    On Error Resume Next
        Workbooks(sWb).Close False

End Sub

在立即窗口中使用,如

?functhattakesrange(convertstringtorange("Myvalue"))

答案 2 :(得分:2)

这是我的解决方案,不需要新功能。

1.首先制作动态字符串变量

2.然后通过范围方法从该字符串中创建一个范围对象来最终确定它:设置dynamicrange = range(dynamicstring)

您可以根据需要操作dynamicstring,我只是保持简单,以便您可以看到您可以使字符串变量超出范围。

Sub test()

Dim dynamicrangecopystring As String
Dim dynamicrangecopy As range
dynamicrangecopystring = "B12:Q12"
Set dynamicrangecopy = range(dynamicrangecopystring)

End Sub

答案 3 :(得分:1)

为什么不将函数参数更改为变量然后在函数中确定使用VarType等)如果已经传递了一个Range并使用错误处理来检查可以转换为范围的字符串或不能转换为字符串的字符串被转换为范围?

答案 4 :(得分:0)

假设Sheet1!A1的文本值为“Sheet1!B1”,而Sheet1!B1的值为“1234”。以下代码将使用存储为A1中的文本的范围地址作为输入,并将范围B1复制到A2:

Sub Tester()

  Sheet1.Range(Range("A1")).Copy

  Sheet1.Range("A2").PasteSpecial xlPasteAll

End Sub

答案 5 :(得分:0)

这个简单的函数会将字符串参数转换为范围对象,可以在其他excel函数中使用。

Function TXT2RNG(text) As Variant

Set TXT2RNG = Range(text)

End Function