Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Получить ссылку на ячейку Добавлено: 22.09.09 12:05  

Автор вопроса:  blacklight
Возник такой вопрос:

в ячейке есть формула (любая), например:

('Лист3!'A1+'Лист2!'B5)/сумм(C7:C28)

вопрос в том, как получить ссылки в VBA на ячейки (range) из этой формулы, чтобы производить с ними какие-либо действия.

Подскажите, плз, где почитать или может какие-нибудь функции.

Спасибо!

С уважением,
blacklight.

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #1 Добавлено: 22.09.09 14:18
Мне кажется (я могу ошибаться), что прямой возможности нет, как вариант - написать функцию, в ней брать текст из ячейки и обрабатывать его посимвольно, выдергивая имена ячеек.

Ответить

Номер ответа: 2
Автор ответа:
 blacklight



Вопросов: 3
Ответов: 9
 Профиль | | #2 Добавлено: 22.09.09 16:30
2AngryBadger - к сожалению, я не знаю, как будут называться листы, поэтому велика вероятность ошибки... хотя все равно спасибо.

Есть такое совйство у обьъекта Range - Precedents. Если написать следующую строчку:

MsgBox (ActiveCell.Precedents.Address)

То оно возвращает ссылки на ячейки, но только в пределах одного "активного" листа. Также есть функция Activecell.Showprecedents - она показывает стрелочками, от каких ячеек зависит данная (уже со всех листов)... вопрос заключается в том, как получить ссылки со всех листов?

С уважением,
blacklight.

Ответить

Номер ответа: 3
Автор ответа:
 blacklight



Вопросов: 3
Ответов: 9
 Профиль | | #3 Добавлено: 23.09.09 14:34
Господа, помогите, пожалуйста, разобраться почему не работает, если нет ссылок на ячейки на активном листе...

    Dim a As Variant
    Dim b As Variant
    Dim i As Integer
    
    Selection.ShowPrecedents
    a = Selection.Address
    b = ActiveSheet.Index
    
    On Error GoTo Error1
    If Selection.Precedents.Count > 0 Then
    
    Selection.Precedents.Interior.Color = 65535
    
    On Error GoTo Error2
    For i = 1 To 1000
    Sheets(b).Select
    Range(a).NavigateArrow TowardPrecedent:=True, ArrowNumber:=1, LinkNumber _
        :=i
    Selection.Interior.Color = 65535
    Next i
    
    End If
    
Error1:
    On Error GoTo Error2
    For i = 1 To 256
    Sheets(b).Select
    Range(a).NavigateArrow TowardPrecedent:=True, ArrowNumber:=1, LinkNumber _
        :=i
    Selection.Interior.Color = 65535
    Next i
    
Error2:
Exit Sub


Спасибо!

С уважением,
blacklight.

Ответить

Номер ответа: 4
Автор ответа:
 blacklight



Вопросов: 3
Ответов: 9
 Профиль | | #4 Добавлено: 23.09.09 14:35
вместо ангела переменная "а"

Ответить

Номер ответа: 5
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #5 Добавлено: 24.09.09 09:11
1.
blacklight пишет:
2AngryBadger - к сожалению, я не знаю, как будут называться листы, поэтому велика вероятность ошибки... хотя все равно спасибо.

Ну и что? Можно УЗНАТЬ как будут называться листы. Это можно сделать во время исполнения макроса.
2. Обработка ошибок работать не будет. On Error GoTo .... в процедуре(или ф-ии) можно писать только 1 раз. Разбивай код на несколько процедур или пробуй извернуться с On Error Resume next и On Error GoTo 0.

Ответить

Номер ответа: 6
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #6 Добавлено: 24.09.09 09:19
В циклах делать Sheets(b).Select это просто жесть! Лучше бы определить переменную типа Object, куда внести объект лист и все действия организовать с помощью этой переменной. Будет быстрее.
Вместо Selection.Interior.Color = 65535 лучше использовать Range(......).Interior.Color=.....

blacklight пишет:
Господа, помогите, пожалуйста, разобраться почему не работает,

Чёт влом разбираться - комментов в коде ни одного нет. Фиг поймешь что должен делать код.

Ответить

Номер ответа: 7
Автор ответа:
 blacklight



Вопросов: 3
Ответов: 9
 Профиль | | #7 Добавлено: 24.09.09 13:49
2GDK Спасибо! попрорбую разбить =)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам