Страница: 1 |
Страница: 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 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.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.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.
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=.....
Господа, помогите, пожалуйста, разобраться почему не работает,
Чёт влом разбираться - комментов в коде ни одного нет. Фиг поймешь что должен делать код.
Номер ответа: 7
Автор ответа:
blacklight
Вопросов: 3
Ответов: 9
Профиль | | #7
Добавлено: 24.09.09 13:49
2GDK Спасибо! попрорбую разбить