1 (изменено: vinkonik, 2014-12-01 19:20:56)

Тема: VBA: Запуск процедуры в книге1 из книги2

Всем доброго времени суток!

Для начала опишу, что есть, потом, что хотелось бы получить.

Есть:

1. Открыта книга1
2. При нажатии кнопки на форме начинается формирование отчета:
    - создается книга2
    - в книге2 создаются листы, на которых после обработки сохраняются результаты
    - последний лист отчета в книге2 формируется путем копирования целиком листа из книги1

вот тут начинаются "непонятки"

1. При копировании листа из книги1 вместе с содержимым листа в книгу2 копируются все процедуры событий (в частности Worksheet_Activate()
2. В этом событии идет вызов процедуры (Proc()), которая находится в книге1 и событие возникает, как только я вставляю скопированный лист в книгу2.
3. процедура (Proc()) в книге1 объявлена, как Public Sub и находится в модуле книги1, судя по всем учебникам и форумам, должна запускаться из любой открытой книги...

Но обработка события даже не начинается, т.к. VBA сразу сообщает об ошибке в процедуре события - Нет вызываемой процедуры Proc()

Пробовал вызвать Proc() с помощью Application.Run"'Имя файла.xlsm'!Proc()" - везде, что читал, говорится, что в этом случае ищется открытый файл с указанным именем, в нем ищется указанная процедура и запускается. В случае, если указанный файл не открыт, то ищется файл с таким именем в корневой для книги2 папке, отрывается и запускается процедура.
У меня, сразу же ищет файл в корневой папке, естественно, не находит его и вылетает с ошибкой,

Решение (обходное) есть - создать лист в книге2 с нужным именем и скопировать на него данные с листа книги1.

Но, хотелось бы понять и разобраться, в чем я "косячу" с Application.Run?

Может, кто-нибудь, хотя бы натолкнуть на мысль, в каком направлении искать? Буду признателен, два дня уже ковыряю код, все идеи кончились...

2

Re: VBA: Запуск процедуры в книге1 из книги2

Выложите Вашу рабочую книгу.

3 (изменено: vinkonik, 2014-12-01 20:47:53)

Re: VBA: Запуск процедуры в книге1 из книги2

Извините, а без этого никак?

Объясню почему.
На это есть 2 причины:

1. Это уже ни просто книга, практически, база на Excel, с таким количеством кода, листов и форм...
2. Данный файл рабочий, а организация коммерческая и в файле есть информация, которую не хотелось бы выкладывать в сеть...

Я готов ответить на все вопросы, прислать все фрагменты кода, которые нужны?

Конечно, если никак, то сделаю копию, почищу информацию .....

Или я не так понял Вашу просьбу и Вы имели ввиду код в котором возникают проблемы?



Вот немного кода:

Этот код копируется вместе с листом:


Private Sub Worksheet_Activate()
    Application.Run "'Воронка продаж.xlsm'!Module3.Просмотр (Worksheets.Application.ActiveSheet.Name)"
End Sub

Код процедуры в книге1:


Sub Просмотр(Rablist)
'
' Простановка на листе информации о факте просмотра страницы
'
' Если книга "Воронка продаж", то выполнить макрос
'
If Application.ActiveWorkbook.Name = "Воронка продаж.xlsm" Then
    Select Case Rablist
        Case "Итого", "Итого по кварталам"
            obnovlenie = Worksheets("Переменные").Range("K27").Value
        Case Else
            obnovlenie = Worksheets("Переменные").Range("E27").Value
    End Select
        centr1 = InStr(1, Range(obnovlenie & "1").Value, ",")
    If centr1 > 0 Then
        centr = Left(Range(obnovlenie & "1").Value, centr1 - 1)
        Range(obnovlenie & "1").Value = centr & "," & " Просмотр - " & Date & " - " & Application.UserName & " - " & Time()
    Else
        Range(obnovlenie & "1").Value = Range(obnovlenie & "1").Value & "," & "Просмотр - " & Date & " - " & Application.UserName & " - " & Time()
    End If
End If
End Sub

Код копирования листа


....... До этого формируется отчет в книге2
Workbooks(oldbook).Sheets("Итого").Copy After:=Workbooks(newbook).Sheets(3)
' Удаление процедуры события Worksheet_Activate() с листа
    iProcedure$ = InputBox(Prompt:="Worksheet_Activate()," & _
    vbCrLf & "Worksheet_Activate()", Title:="")
    For Each iVBComponent In Workbooks(newbook).VBProject.VBComponents
        With iVBComponent.CodeModule
             If .Find("Sub " & _
                iProcedure$, 1, 1, .CountOfLines, 1) = True Then
                iStartLine& = .ProcStartLine(iProcedure$, 0)
                iCountLines& = .ProcCountLines(iProcedure$, 0)
                .DeleteLines iStartLine&, iCountLines&
             End If
        End With
    Next
...... Далее завершающие операции и переход в главное меню книги1

4

Re: VBA: Запуск процедуры в книге1 из книги2

vinkonik, крайне желательно.

В простых случаях можно обойтись без исходных файлов и без кода. В более сложных требуется код и, возможно, исходные файлы. Для того, чтобы понять саму проблему, воспроизвести ситуацию, понять, как и почему она возникает, и иметь возможность её устранения, причин её возникновения или обхода. Что не менее важно, устраняется возможность возникновения ошибок при передаче информации — поскольку и автор, и решающий работают на одном и том же материале.

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

5

Re: VBA: Запуск процедуры в книге1 из книги2

Хорошо. Раз никак без книги, то сделаю.
Но, думаю, не раньше завтрашнего дня.
Нужно скорректировать информацию, формы, шаблоны и перенастроить РД (а это значит -  скорректировать код, т.к. программная настройка РД пока реализована не полностью).

6

Re: VBA: Запуск процедуры в книге1 из книги2

vinkonik, можете хоть всё поудалять — главное, чтобы на остатках воспроизводилась Ваша ситуация.

7 (изменено: vinkonik, 2014-12-04 19:00:34)

Re: VBA: Запуск процедуры в книге1 из книги2

alexii пишет:

vinkonik, можете хоть всё поудалять — главное, чтобы на остатках воспроизводилась Ваша ситуация.

День добрый!
Получилось чуть дольше, чем планировал, но....

Прикладываю архив. Распакуйте в одну папку. Должен работать.
В архиве же описание проблемы, что делал, чего бы хотелось....

8

Re: VBA: Запуск процедуры в книге1 из книги2

vinkonik, я долго пытался найти в приложенном архиве хотя бы одну из двух оговоренных рабочих книг. Но нашёл только текст в файле Word'а, ini-файл, «Заставка.jpg» на 11 kb и «Thumbs.db» втрое большего размера. Спасибо, конечно, но я ожидал того, о чём мы говорили выше.

9

Re: VBA: Запуск процедуры в книге1 из книги2

Alexii, добрый день!

Извините, видимо, конец рабочего дня так на меня подействовал :-)
Исправляюсь. Теперь точно, в архиве все, что нужно...

10

Re: VBA: Запуск процедуры в книге1 из книги2

vinkonik, выложите на RGhost. Отсюда всё время битый архив выходит.

11

Re: VBA: Запуск процедуры в книге1 из книги2

Скачал архив из предыдущего сообщения, открыл - не битый.

Загружал с нескольких мест, пробовал несколькими браузерами. Разные провайдеры.

Прикрепляю его к этому сообщению.

Кошмар. Вообще не вижу вложений в Вашем посте.

12 (изменено: ypppu, 2014-12-06 01:51:30)

Re: VBA: Запуск процедуры в книге1 из книги2

Кажется я не нажал "Add file". Исправил предыдущее сообщение.

Добавлено:
XP sp3 32-bit, Mozilla FF, WinRAR 3.10.

13

Re: VBA: Запуск процедуры в книге1 из книги2

То же самое:

!   E:\Песочница\0413\Рабочая копия.rar: Неожиданный конец архива

14

Re: VBA: Запуск процедуры в книге1 из книги2

ypppu, перевыложите, пожалуйста, архив на RGhost.

15 (изменено: vinkonik, 2014-12-08 12:26:57)

Re: VBA: Запуск процедуры в книге1 из книги2

Ух ты!
У меня выходные, а тут активно идет переписка...
Всем добрый день!

Alexii, если с архивом все еще проблемы, скажите куда, выложу еще раз. (Только, извините, расскажите и как это сделать? Я, к сожалению, не активный пользователь, к общественному разуму с вопросами обращаюсь редко, стараюсь сам разбираться. Только, когда совсем тупик, как в данном случае... когда и литература и "паутина" и работающие примеры говорят одно, а у меня "заклинивает" что-то и не работает... Например: как выложить архив на RGhost?)

Еще раз, извините, наверно, простейшая процедура - выложить на RGhost, но ни разу, пока, этого не делал...

16

Re: VBA: Запуск процедуры в книге1 из книги2

Alexii, если с архивом все еще проблемы,

Всё ещё .

скажите куда, выложу еще раз.

На RGhost — файлообменник. А ссылку — сюда.

Выбрать свой файл нажатием на «Обзор…», далее «Отправить». Полученную в результате выгрузки файла ссылку указать здесь.

17 (изменено: vinkonik, 2014-12-08 16:10:24)

Re: VBA: Запуск процедуры в книге1 из книги2

Alexii,Выложил архив на RGhost

http://rghost.ru/59488714

А, по-поводу моей проблемы, пока выкрутился так: - в новой книге создал модуль, в котором создал пустую процедуру с нужным именем; - следующим шагом - убил на листе процедуру события и потом убил созданный ранее модуль.

Но вопрос с вызовом процедуры из другой книги остался. Т.ч., если сможете помочь, буду признателен.

18

Re: VBA: Запуск процедуры в книге1 из книги2

vinkonik, забрал, буду глядеть.

19

Re: VBA: Запуск процедуры в книге1 из книги2

Alexii, добрый день!

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