Страницы: 1
RSS
указание диапазона из текстовой переменной, Range(x), где x = "cells(1, 1)"
 
Добрый день!
столкнулся с проблемой в чужом коде.

есть переменная, x = "A1", а дальше идет указание диапазона в формате Range(x)
Изменяю x = "cells(1, 1)" и Range(x) перестает работать.

Подскажите, как заставить Range(x) начать работать? Может какие-то дополнительные функции есть Range(func(x))?

Буду очень признателен.
 
Цитата
написал:
в чужом коде.
в коде чужого)
Цитата
написал:
есть переменная, x = "A1"
для чего такая переменная?  x - как объявлена? как текст? как рэнж?
вот так у меня работает спокойно, а что у Вас в макрсое непонятно
Код
Sub fd()
Dim x As String
x = "A1"
Range(x).Select
End Sub
Изменено: Mershik - 25.11.2021 15:49:42
Не бойтесь совершенства. Вам его не достичь.
 
x as String
Файл огромный, который состоит из коллекций. В коллекции есть строковые переменные. Делается SQL запрос из базы, а потом по этому справочнику раскидывает данные.

Цитата
что у Вас в макрсое непонятно
нужно преобразовать ссылку в виде "A1" на вид "cells(1,1)"
 
Цитата
написал:
нужно преобразовать ссылку в виде "A1"
это не ссылка, это текст!
Не бойтесь совершенства. Вам его не достичь.
 
Я думал, что понятно объяснил, что мне нужно.
Нужно чтобы раболтало Range(x), где x должно быть в виде cells(1, 1),  а не  "А1"
 
,CrazyRabbit, ловите это извращение))
Код
Cells(Range(x).Row, Range(x).Column).Select
Не бойтесь совершенства. Вам его не достичь.
 
Код
x= "cells(1,1)"
debug.print Range(x).row

не работает. Он Range от x взять не может
 
, я такого не предлагал  
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
написал:
, я такого не предлагал  
ваш код, при x = "cells(1,1)" не работает
 
Непонятно зачем из Москвы в Питер лететь через Вашингтон.
Range("A1") и Cells(1,1)  одно и тоже
Range("cells(1,1") не прокатит
Может так надо
Код
Range(Cells(1, 1).Address)
Изменено: Евгений Смирнов - 25.11.2021 16:30:39
 
Цитата
написал:
Нужно чтобы раболтало Range(x), где x должно быть в виде cells(1, 1),  а не  "А1"
где x из A1 првратилось в :
Цитата
написал:
Cells(Range(x).Row, Range(x).Column)
т.е.
Код
debug.print Cells(Range(x).Row, Range(x).Column).Row
Цитата
написал:
Непонятно зачем из Москвы в Питер лететь через Вашингтон.
что бы веселее было)
Изменено: Mershik - 25.11.2021 16:25:10
Не бойтесь совершенства. Вам его не достичь.
 
Через Антарктиду :):):)
Range(Cells(4, 1).Address)
 
Цитата
написал:
Range("A1") и Cells(1,1)  одно и тоже
Потому что, раньше данные забивались в ячейку "A1", а теперь адрес будет плавающий. Например Cells(rst.rields(0), 1+i*2)
 
off
Цитата
Евгений Смирнов написал:
Непонятно зачем из Москвы в Питер лететь через Вашингтон.
а Duty-free???
По вопросам из тем форума, личку не читаю.
 
Если ячейка будет плавающей то можно так писать
Код
Range("A1")(x,y)
Range("A1")(1,1) это А1
Range("A1")(2,2) это В2

 
Ну это в общем выход. Не догадался. Немного поиграться, воткнуть костылей и получится кривая, хромая, но рабочая лошадка.
Благодарствую Евгений и низкий поклон  :D

кривое, хромое - это бездумное копирование в цитату [МОДЕРАТОР]
Изменено: vikttur - 25.11.2021 17:20:52
 
Код
Range("A1").Offset()
 
Да я уже понял, что так как мне надо не получится, и придется ковыряться простыми методами, про которые я забыл.
 
А как надо? Я о том, чего Вы не написали - для чего это? Конечная задача?
 
Нет смыла описывать. Там очень сложный кривой код.
 
Продолжайте использовать кривой код, подпирая его костылями :)
 
Уберем один костыль.
Код
Sub test()
    Dim Sh As Worksheet, rng As Range, s As String
    s = "cells(6,3)"
    Set Sh = ActiveSheet
    Set rng = TextToRange(Sh, s)
End Sub
Function TextToRange(Sh As Worksheet, s As String) As Range
    Set TextToRange = Nothing
    Static RegExp As Object
    If RegExp Is Nothing Then Set RegExp = CreateObject("VBScript.RegExp")
    RegExp.Pattern = "(\d+)\s?,\s?(\d+)"
    Set oMatches = RegExp.Execute(s)
    For Each oMat In oMatches
        rw = oMat.subMatches(0)
        col = oMat.subMatches(1)
        Set TextToRange = Sh.Cells(Val(rw), Val(col))
        Exit Function
    Next
End Function
Страницы: 1
Наверх