Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11

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

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

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

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

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

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

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

8
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 12:24
Bati4eli, они у тебя открытые или нужно каждую последовательно открывать?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.02.2013, 12:32
Visual Basic
1
set Icell = WorkBooks("Любая книга").Sheets("1лист").Range("C4:BG5")
0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.02.2013, 12:49  [ТС]
Я понимаю что можно использовать "Sheets", но никак его нельзя обойти, если у меня в самом адресе уже указано название листа? Или "вручную" его только выцарапать из адреса и использовать с Sheets ?
0
693 / 99 / 10
Регистрация: 25.06.2011
Сообщений: 718
20.02.2013, 13:01
Bati4eli,
Visual Basic
1
 ActiveSheet.Range()
или
Visual Basic
1
Sheets(1).Range()
0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.02.2013, 14:19  [ТС]
Вот такой код
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
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.02.2013, 14:35
Лучший ответ Сообщение было отмечено как решение

Решение

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


IvanOK,
Фишка в том, что у меня есть класс-модуль . В него (одной из его команд) загружаются подобные Icell диапазоны, и в дальнейшем по команде "старт" этот модуль начинает обработку/загрузку данных! Код довольно большой в этом модуле и проще ему загрузить в память корректные диапазоны, чем править в нем код и при каждой ссылке на определенную книгу ставить что-то вроде WorkBooks("book").Sheets("sh").range(... .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2013, 15:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru