Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
Bati4eli
615 / 15 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
1

Обращение по определенному адресу к ячейкам для любой книги

20.02.2013, 11:57. Просмотров 1559. Ответов 8
Метки нет (Все метки)

Всем привет.
У меня есть куча разных книг в которых используются листы с одинаковыми названиями листов.
При этом для обращения к данным используется адрес вида "'1лист'!C4:BG5". Вопрос в следующем :

Visual Basic
1
2
Dim Icell as range
set Icell = WorkBooks("Любая книга").(__).Range("'1лист'!C4:BG5")
Как передать переменной Icell диапазон любой указанной книги.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 11:57
Ответы с готовыми решениями:

Обращение к ячейкам открытой книги (не текущей)
Макрос должен запускаться, спрашивать - какой файл ему взять. Открыть его, разделить определенную...

Обращение к ячейкам в БД
Здравствуйте, Пипл!! У меня такой вопрос: Как можно обращаться к ячейкам в БД (использовать...

Открытие порта(ов) определенному ip адресу
Собственно сабж в iptables не силен, но мне кажется она с этим справится, помогите примером

Обращение к ячейкам Excel
Здравствуйте, подскажите каким образом возможно получить адрес и данные ячейки с помощью функций...

Обращение к ячейкам таблицы
Здравствуйте. С помощью такой записи я могу получить только из первой записи любые данные....

8
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 12:24 2
Bati4eli, они у тебя открытые или нужно каждую последовательно открывать?
0
Казанский
14911 / 6312 / 1721
Регистрация: 24.09.2011
Сообщений: 9,977
20.02.2013, 12:32 3
Visual Basic
1
set Icell = WorkBooks("Любая книга").Sheets("1лист").Range("C4:BG5")
0
Bati4eli
615 / 15 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.02.2013, 12:49  [ТС] 4
Я понимаю что можно использовать "Sheets", но никак его нельзя обойти, если у меня в самом адресе уже указано название листа? Или "вручную" его только выцарапать из адреса и использовать с Sheets ?
0
20.02.2013, 12:49
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 13:01 5
Bati4eli,
Visual Basic
1
 ActiveSheet.Range()
или
Visual Basic
1
Sheets(1).Range()
0
Bati4eli
615 / 15 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.02.2013, 14:19  [ТС] 6
Вот такой код
Visual Basic
1
Sheets(1).Range("'1лист'!C4:BG5")
игнорирует ссылку и ссылается именно на 1й лист.
А
Visual Basic
1
ActiveSheet.Range()
работает только для активного листа, т.е. если в ссылке используется "Лист1" и активный лист он же, то всё работает. Для других листов такая конструкция не работает =(
Жаль что WorkBook не имеет элемента Range =( Так как бывает используются именованные ячейки, которые вообще не имеют привязки к определенному листу.

Добавлено через 36 минут
Задача решается следующим образом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function GetRange(WB As Workbook, AddressRange As String, Optional SheetName As String) As Range                         
Dim Kov As Boolean                          
Dim Addr As String                          
If SheetName = "" Then                          
    Kov = InStr(1, AddressRange, "'") 'если адрес использует ковычку то передаем True                           
    'если ковычка есть то нужно убрать ковычку между названием книги и листа                            
    Addr = IIf(Kov, AddressRange, Replace(AddressRange, "!", "'!"))
    Set GetRange = Range("'" & WB.Path & "\[" & WB.Name & "]" & IIf(Kov, Right(Addr, Len(Addr) - 1), Addr))
Else                            
    Addr = Replace(AddressRange, SheetName, "") 'убираем название листа из адреса (если так вышло)                          
    Addr = Replace(Addr, "!", "")                           
    Addr = Replace(Addr, "'", "")               'убираем ковычки. В результате получили "голый" адрес                            
    Set GetRange = Range("'" & WB.Path & "\[" & WB.Name & "]" & SheetName & "'!" & Addr)                            
End If                          
End Function
                            
Sub TEST()                          
Dim Icell As Range                          
Set Icell = GetRange(ActiveWorkbook, "Лист1!A1")                            
MsgBox "Вы сослались на лист: " & Chr(34) & Icell.Parent.Name & Chr(34) & Chr(13) & " книги: " & Chr(34) & Icell.Parent.Parent.Name & Chr(34)                         
End Sub
Добавлено через 12 минут
0
Казанский
14911 / 6312 / 1721
Регистрация: 24.09.2011
Сообщений: 9,977
20.02.2013, 14:35 7
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Bati4eli Посмотреть сообщение
Жаль что WorkBook не имеет элемента Range
Зато это свойство есть у Application
Visual Basic
1
set Icell = application.Range("'[Любая книга]1лист'!C4:BG5")
Нужно только правильно сформировать строку адреса.
3
IvanOK
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 14:35 8
Bati4eli, тогда непонятна совсем была ваша задача
0
Bati4eli
615 / 15 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.02.2013, 15:09  [ТС] 9
Казанский,
Спасибо большое !
Всё-таки не всё так печально в этой жизни
Вроде бы элементарные вещи.. но они иногда ставят в тупик ))


IvanOK,
Фишка в том, что у меня есть класс-модуль . В него (одной из его команд) загружаются подобные Icell диапазоны, и в дальнейшем по команде "старт" этот модуль начинает обработку/загрузку данных! Код довольно большой в этом модуле и проще ему загрузить в память корректные диапазоны, чем править в нем код и при каждой ссылке на определенную книгу ставить что-то вроде WorkBooks("book").Sheets("sh").range(....
0
20.02.2013, 15:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 15:09

Обращение к ячейкам формы
Привет всем! Столкнулся с такой задачей: Есть форма, в ней перечисления данных пользователей, на...

Привязка переменной в ОЗУ к определенному адресу
GCC ARM надо при инициализации переменную в ОЗУ привязать к определенному адресу, чтобы иметь...

Нужно разместить переменную по определенному адресу.
Приветствую! Нужно скажем переменную "А" со значение "1" разместить по адресу 0х12345678. Как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.