Страницы: 1
RSS
Как в макросе перейти на ячейку по ссылке указанной в формуле?
 
Достаточно простой вопрос. Я думаю программисты с подобным неоднократно сталкиваются.

На листе "Расчет" в ячейке К12 находится сумма. На листе "Сводная" в ячейке C6 ссылка на предыдущее число.
То есть
Код
 Range("С6").Formula
показывает
Код
"=Расчет!K12"

Макрос бежит по столбцу С листа "Сводная" и натыкается на сумму. Для корректной обработки мне необходимо перейти к ячейке на листе "Расчет" сдвинутьcя на одну ячейку вправо и взять параметр находящийся в ячейке "Сводная!L12".
Я могу с помощью текстовых операторов (right, left и др.) разделить  Range("С6").Formula на название листа и координаты ячейки. Но не могу сообразить как название и координаты  внести в макрос, чтобы он заработал.

Пробую Shteets(N).Activate, где N = "Расчет" - выдает ошибку. С координатами та же ерунда.

Подскажите, как мне туда прыгнуть? Может есть простой путь?
 
Да никак не прыгнуть. Некуда...
 
Почему?
 
Да потому, что у Виктора нет такого листа. И ячейки такой нет.
 
Код
Range(mid(Range("С6").Formula,2))
По вопросам из тем форума, личку не читаю.
 
:)  ... вот шутники

Код
Option Explicit

Sub bezhi_do_yezhi_1()
    Dim pos%, r&, nzvLista$, adrYach$, frmla, prmtr             ' Ob"yavleniya peremennykh
    r = 2                                                       ' Nachinayem so vtoroy stroki
    With Sheets("Svodnaya")                                     ' na liste "Svodnaya"
        Do Until .Cells(r, "C").Value <> "a"                    ' Poka w yacheykakh bukva "a"
            r = r + 1                                           ' bezhit' po stolbtsy "C"
        Loop                                                    '
        frmla = .Cells(r, "C").Formula                          ' Poluchayet formulu iz yacheyki
    End With
    pos = InStr(1, frmla, "!", 1)                               ' Opredelyayet polozheniye vosklitsatel'nogo znaka "!"
    nzvLista = Mid(frmla, 2, pos - 2)                           ' Vydelyayet nazvaniye lista "Raschet"
    adrYach = Mid(frmla, pos + 1, Len(frmla) - pos)             ' Vydelyayet adres yacheyki "K12"
    prmtr = Sheets(nzvLista).Range(adrYach).Offset(0, 1).Value  ' Poluchayet parametr
    MsgBox prmtr
End Sub

Sub bezhi_do_yezhi_2()
    Dim r&, frmla, prmtr
    r = 2
    With Sheets("Svodnaya")
        Do Until .Cells(r, "C").Value <> "a"
            r = r + 1
        Loop
        frmla = .Cells(r, "C").Formula
    End With
    'Mid(frmla, 2, Len(frmla) - 1) = "Raschet!K12" => "=OFFSET("Raschet!K12",0,1,1,1)"
    prmtr = Evaluate("Offset(" & Mid(frmla, 2, Len(frmla) - 1) & ", 0, 1, 1, 1)")
    MsgBox prmtr
End Sub
 
Код
Sub Offs()
  Dim r&: r = 1
  With Worksheets("Сводная"): Do While Not IsEmpty(.Cells(r, 3))
    If .Cells(r, 3).HasFormula Then .Cells(r, 4) = Range(Replace _
    (Split(.Cells(r, 3).Formula, "!")(1), "'", "")).Offset(0, 1)
    r = r + 1
  Loop: End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Всем большое спасибо. Способ предложенный БМВ это фактически и есть то, что я искал.
по остальным способам тоже интересно в плане развития. Сразу показывают насколько я чайник  :cry:  
Страницы: 1
Наверх