Страницы: 1
RSS
Можно ли в макросе один раз указать, что он применяется только к определенной книге
 
Доброй ночи друзья.
Появился вопрос теоретического свойства.

В книге - очень-очень много где расставлено указаний на ячейки в стиле [A1], [B1] и т.д.
Я хочу как бы к конкретной книге все это большое количество адресов привязать.

Можно ли как нибудь в макросе - один раз указать, что все эти ссылки - действуют только на одну книгу - "Книга1" ?

Вместо того, чтобы неделю добавлять ссылки по всем макросам в стиле- Application.Workbooks("Книга1.xls").Sheets("Лист3").
 
Непонятно, что Вы хотитпе. Какие указания? Почему они на листе?
Пример показать - никак, все теоретически?
 
vikttur, ну а что показать - огромный макрос, состоящий из десятка модулей.
В каждом модуле несколько страниц. Все ссылки на ячейки в них (а их очень много) - в стиле либо [A1], либо Range("A1")

Как заставить эксель - реагировать на эти ссылки на ячейки (или указания на ячейки) - только применительно к одной книге ? То есть чтобы он (Эксель) по-умолчанию воспринимал   Range("A1")   как
Код
Application.Workbooks("Книга1.xls").Sheets("Лист3").Range("A1")
Вопрос - связан не с макросом, а со ссылками на ячейки.
 
просто надо было изучить мат часть и запомнить, что Range работает с текущим активным листом, если не указано иное. По этому лучше определеять или через With и потом .[A1] что предпочтительно , или объект определять лист в конкретной книге (objSh) и с ним работать objSh .[A1]
По вопросам из тем форума, личку не читаю.
 
судьба - неделю добавлять ко всем обращениям типа [A1]
потом еще несколько недель на то, чтобы выявить и удалить добавленное в тех местах, где его не нужно было добавлять
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
OlegSmirnov написал: В книге - очень-очень много где расставлено указаний на ячейки в стиле [A1], [B1]
Нужно писать: в редакторе, в макросах... Читается: на листе расставлено...

Цитата
В каждом модуле несколько страниц.
И это интересно. Где Вы там страницы нашли?

Цитата
Вопрос - связан не с макросом, а со ссылками на ячейки.
Окончательн запутать хотите? Ссылки в воздухе висят?
 
Нельзя ли где-нибудь в начале модуля (их всего десять) - поставить какое-либо указание, что все ссылки на ячейки - сделаны для объекта: Application.Workbooks("Книга1.xls").Sheets("Лист3").  ?
 
сделать вот это Application.Workbooks("Книга1.xls").Sheets("Лист3"). активным.
По вопросам из тем форума, личку не читаю.
 
OlegSmirnov, ну написали же ужо в #4
Код
With Application.Workbooks("Книга1.xls").Sheets("Лист3")
    .[A1]=1
    .[B1]=2
end with
 
БМВ, он не активен, я периодически перемещаюсь между разными книгами.
Поэтому и задаю этот вопрос.
 
Андрей Лящук, это в каждом макросе нужно писать ?
Куда именно вставлять эту строчку ?

With Application.Workbooks("Книга1.xls").Sheets("Лист3") - это в начале каждого макроса.
А end with - это в конце каждого макроса.
А внутри этого макроса [A1] заменить на .[A1]

Я все правильно понял ?
 
да, все правильно
и такую же точку перед Cells, Range, Columns, Rows

потом, если вдруг, книга или лист поменяют имя заменить по всем модулям старое имя на новое.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
With - перед первой ссылкой, End With - после последней.
 
Ігор Гончаренко, понятно, спасибо.

Ну чтож, работы будет много.
Тогда закатаю рукава - и в путь !
 
Цитата
OlegSmirnov написал:
работы будет много.
откуда там много работы? точек понаставить? Пользуем Regex
Изменено: Андрей Лящук - 17.03.2019 05:00:06
 
Все-таки, с практической точки зрения удобнее путь, предложенный Михаилом в #8.
Код
  Dim sh As Worksheet
  Set sh = ActiveSheet   ' в начале каждого модуля запоминаем текущий лист
  Workbooks("Книга1.xls").Sheets("Лист3").Activate

  ' --------------------------------------------------
  sh.activate             ' в конце модуля и перед Exit Sub/Exit Function  
Изменено: sokol92 - 17.03.2019 12:43:25
Владимир
Страницы: 1
Наверх