Как преобразовать строку в объект Range - PullRequest
1 голос
/ 26 мая 2010

Есть ли способ преобразовать строковое значение в объект Range? У меня есть функция, которая принимает объект Range в качестве аргумента, и мне нужно передать ему один строковый параметр

Спасибо

Ответы [ 6 ]

4 голосов
/ 26 мая 2010

Строка с адресом ячейки? если так:

Dim r As Range: Set r = Range("B3")
MsgBox r.ColumnWidth
2 голосов
/ 21 ноября 2017

Вот мое решение, которое не требует новой функции.

1. Сначала создайте динамическую строковую переменную

2. Затем завершите его, создав объект диапазона из этой строки с помощью метода диапазона: Установите dynamicrange = range (dynamicstring)

Вы можете манипулировать динамической строкой так, как хотите, я просто упростил ее, чтобы вы могли видеть диапазон из строковой переменной.


Sub test()

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

End Sub
2 голосов
/ 26 мая 2010

Мне не нравится этот бит, но если вы не можете изменить функцию, которая требует диапазона, вы можете создать функцию, которая преобразует строку в диапазон. Вы хотите быть уверены, что единственная вещь, о которой заботится первая функция, это свойства 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"))
1 голос
/ 26 мая 2010

Почему бы не изменить аргумент функции на вариант, а затем в функции определить использование VarType и т. Д.), Если вам был передан Range, и использовать обработку ошибок для проверки строки, которая может быть преобразована в диапазон, или строки, которая не может преобразовать в диапазон?

0 голосов
/ 15 августа 2016

Эта простая функция преобразует строковые аргументы в объект диапазона, который можно использовать в других функциях Excel.

Function TXT2RNG(text) As Variant

Set TXT2RNG = Range(text)

End Function
0 голосов
/ 19 ноября 2013

Допустим, Sheet1! A1 имеет текстовое значение «Sheet1! B1», а Sheet1! B1 имеет значение «1234». Следующий код будет использовать адрес диапазона, сохраненный в виде текста в A1, в качестве ввода и скопировать диапазон от B1 до A2:

Sub Tester()

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

  Sheet1.Range("A2").PasteSpecial xlPasteAll

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...