Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual Basic
Перезагрузить страницу Не работают макросы. Ссылается на другую книгу
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Митяй Митяй вне форума
Member
 
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.01.2006
По умолчанию Не работают макросы. Ссылается на другую книгу - 02.02.2006, 16:51

Суть проблемы такая.
Написал макросы, повесил их на кнопочки. При копировании файла в другую папку макросы соответственно тоже копируются. И если удаляю исходный файл, то при нажатии на кнопку пишет, что не может найти эти макросы по адресу, где раньше лежал файл, непосредственно в котором навешивал макросы на кнопки. При запуске из редактора VBA все нормально работает. Кто-нибудь может объяснить в чем дело?
Кстати, на некоторых компах работает нормально.
Ответить с цитированием
  (#2 (permalink)) Старый
Митяй Митяй вне форума
Member
 
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.01.2006
По умолчанию 02.02.2006, 17:09

Возможно не совсем понятно выразился. Попробую чуть-чуть по-другому.
Как сделать так, чтобы при нажатии на кнопку, после копирования файла была бы ссылка на макрос, который находится в этой рабочей книге, а не на ту рабочую книгу, в которой "вешал" макрос на кнопку?
Ответить с цитированием
  (#3 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,856
Сказал(а) спасибо: 2
Поблагодарили 54 раз(а) в 50 сообщениях
Регистрация: 11.03.2005
По умолчанию 02.02.2006, 18:57

Митяй, Вообще-то в MS Excel существует несколько кнопок :
1. меню Вид - Панели инструментов - Формы - Кнопка
2. меню Вид - Панели инструментов - Элементы управления - Кнопка
3. меню Сервис * - Настройка - Команда - Макросы - Настраиваемая кнопка (* Вид - Панели инструментов)

Но если макрос и кнопка [1], расположены в одной рабочей книге, то первый вариант мы вычёркиваем, второй вид кнопок также не должен вызывать подобных проблем, так как все события, располагаются в модуле того листа, где и расположена кнопка [2]
Значит остаётся третий вариант ... тем более, что использование именно этой кнопки [3] может "вызвать" подобные проблемы. Например, после того, как Вы переместите файл (на который ссылается кнопка, расположенная на панели инструментов) используя интерфейс ОС, ссылка на макрос, всё равно будет "включать" первоначальное месторасположение файла. Поэтому назначив кнопке [3] свой собственный макрос, желательно помнить, что изменять месторасположение файла, нужно с использованием команды Сохранить как/SaveAs
Ответить с цитированием
  (#4 (permalink)) Старый
Митяй Митяй вне форума
Member
 
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.01.2006
По умолчанию 02.02.2006, 19:24

Мы все учились понемногу чему-нибудь да как-нибудь.
Спасибо, блин, огромное!!!
Ответить с цитированием
  (#5 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,856
Сказал(а) спасибо: 2
Поблагодарили 54 раз(а) в 50 сообщениях
Регистрация: 11.03.2005
По умолчанию 02.02.2006, 20:50

Предыдущий ответ был ориентирован исключительно на "решение" вопроса стандартными средствами, однако если взять на "вооружение" средства VBA, то Вам откроется масса вариантов, например :

1. Создавать кнопку программно, при открытии рабочей книги :

Код:
Private Sub Auto_Open()
With Application.CommandBars(1)
     .Protection = msoBarNoProtection
     With .Controls.Add(Temporary:=True)
          .BeginGroup = True
          .Caption = "Мой_макрос"
          .Style = msoButtonCaption
          .OnAction = "Создать_таблицу"
     End With
End With
End Sub
2. Создавать кнопку программно при открытии рабочей книги и удалять кнопку при закрытии :

Код:
Private Sub Auto_Open()
With Application.CommandBars(1)
     .Protection = msoBarNoProtection
     With .Controls.Add
          .BeginGroup = True
          .Caption = "Мой_макрос"
          .Style = msoButtonCaption
          .OnAction = "Создать_таблицу"
     End With
End With
End Sub

Private Sub Auto_Close()
On Error Resume Next
With Application.CommandBars(1)
     .Protection = msoBarNoProtection
     .Controls("Мой_макрос").Delete
End With
End Sub
3. Если кнопка должна присутствовать на панели инструментов "постоянно", то можно использовать что-то вроде :

Код:
Private Sub Auto_Open()
With Application.CommandBars.Item(1)
     If .FindControl(Tag:="Моя_кнопка") Is Nothing Then
        .Protection = msoBarNoProtection
        With .Controls.Add
             .BeginGroup = True
             .Tag = "Моя_кнопка"
             .Caption = "Мой_макрос"
             .Style = msoButtonCaption
             .OnAction = "Создать_таблицу"
        End With
     End If
End With
End Sub
Комментарий :
- В качестве примера была выбрана стандартная панель инструментов "Строка меню листа"
- Вместо событий Auto_Open() и Auto_Close() можно использовать почти аналогичные события Workbook_Open() и Workbook_BeforeClose(Cancel As Boolean)
- Если кнопка должна быть доступна только в конкретной рабочей книге, то необходимо использовать события Workbook_Activate() и Workbook_Deactivate()
- Вместо удаления конкретной кнопки можно использовать метод .Reset, который возвращает исходное состояние стандартной панели инструментов, со всеми вытекающими последствиями.
- Окончательное решение этого вопроса может серьёзно отличаться от предложенных.
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике по ячейке, скопировать её содержимое в другую книгу melkii_add Visual Basic 27 08.05.2015 17:50
макросы в Excel muzon45 Вопросы начинающих программистов 0 13.12.2011 11:47
Макросы к примеру с факториалом Элька Visual Basic 0 15.05.2011 00:30
Макросы VBA Excel как с ними работать Z@R(!)N@ Visual Basic 0 23.03.2011 02:26
Копировать строку в другую книгу Gvaridos Visual Basic 1 16.11.2010 19:12
Срочно написать макросы для экселя Olga137 Работа 0 04.08.2008 14:52
Макросы в Excel imported_Егорка Visual Basic 2 30.12.2006 10:25
Почему LinkedList ссылается нетуда Anti Java 0 06.05.2006 09:22
пропали все макросы Excel чайник Visual Basic 1 29.03.2006 14:55
Встроенные макросы в gcc wowec С/С++ 4 19.02.2006 11:52
Скопирование макросы в Word и Excel xusinboy Visual Basic 8 01.09.2005 19:52
Макросы что это такое cadrules WinAPI 2 15.06.2005 16:31



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов