Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск макроса в другом файле Excel / 25 сообщений из 25, страница 1 из 1
17.04.2010, 12:55
    #36583576
Максим М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Господа, доброго времени суток.

Замучил вопрос, возможно дурацкий.
Есть два файла Excel: Книга1 и Книга2. В книге2 есть макрос2.
Задача: написать в Книге1 макрос, который:
1. Открывает книгу2
2. Запускает в ней Макрос2
3. Закрывает книгу2

На втором шаге затык: не знаю как по-человечески вызвать из Макроса Книги1 макрос, хранящийся в Книге2. Пока решил проблему, повесив Макрос2 на определенное событие книги2 (Worksheet_Change), но есть чувство, что это лечение зубов через задний проход.

Есть ли способ запустить макрос в книге2, обратившись к нему по имени?
...
Рейтинг: 0 / 0
18.04.2010, 00:46
    #36584049
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Код: plaintext
Application.Run "Книга2.xls!Module1.МояПроцедура"
...
Рейтинг: 0 / 0
19.04.2010, 11:00
    #36585078
Максим М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Работает! ))))
Спасибо!
...
Рейтинг: 0 / 0
11.08.2010, 17:57
    #36786725
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Здравстуйте!
У меня есть следующий вопрос!
Есть Кгнига1 и в ней Макрос1. В макросе прописано, что когда я его выполняю, мне нужно сначала открыть файл с расширением *.bin.

iFile = Application.GetOpenFilename("Binäre Dateien, *.bin", , "Datei öffnen")
ChDir (FilePath(iFile))


У меня следующий вопрос - как прописать, чтобы:
1. Макрос выполнялся автоматически при открытии Книга1
2. Чтобы оно не открывало окно для выбора bin-файла, а атоматически открывало файл test.bin.

я в этом не разбираюсь, поэтому если можно, то попроще и по понятней, как говорится, для чайников ))

Заранее большое спасибо!!
...
Рейтинг: 0 / 0
11.08.2010, 18:04
    #36786755
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
> Автор: lara-punk
> У меня следующий вопрос - как прописать, чтобы:
> 1. Макрос выполнялся автоматически при открытии Книга1

Для этого нужно перенести нужный макрос со всеми зависимостями(самописные функции и прозедуры вызываемые из нужного
макроса) в файл "Книга1.xls" и поставить вызов нужного макрова в обработчик события Workbook_Open() в модуле книги.

> 2. Чтобы оно не открывало окно для выбора bin-файла, а атоматически открывало файл test.bin.

Для этого нужно прописать полный путь к файлу test.bin, и тогда можно выбросить первую строку

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2010, 11:33
    #36787822
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Игорь Горбонос
> Автор: lara-punk
> У меня следующий вопрос - как прописать, чтобы:
> 1. Макрос выполнялся автоматически при открытии Книга1

Для этого нужно перенести нужный макрос со всеми зависимостями(самописные функции и прозедуры вызываемые из нужного
макроса) в файл "Книга1.xls" и поставить вызов нужного макрова в обработчик события Workbook_Open() в модуле книги.

> 2. Чтобы оно не открывало окно для выбора bin-файла, а атоматически открывало файл test.bin.

Для этого нужно прописать полный путь к файлу test.bin, и тогда можно выбросить первую строку



эээ.... простите, а можно пожалуйста как-то по подробней. Я первый раз работаю с макросами, да и Экселем я тоже не часто пользуюсь. Что и куда прописывать и переносить? что такое модуль книги и обработчик событий? как его открыть?

заранее большое спасибо!!
...
Рейтинг: 0 / 0
12.08.2010, 12:17
    #36787989
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
lara-punk[quot Игорь Горбонос]
> Автор: lara-punk
> У меня следующий вопрос - как прописать, чтобы:
> 1. Макрос выполнялся автоматически при открытии Книга1

Для этого нужно перенести нужный макрос со всеми зависимостями(самописные функции и прозедуры вызываемые из нужного
макроса) в файл "Книга1.xls" и поставить вызов нужного макрова в обработчик события Workbook_Open() в модуле книги.

> 2. Чтобы оно не открывало окно для выбора bin-файла, а атоматически открывало файл test.bin.

Для этого нужно прописать полный путь к файлу test.bin, и тогда можно выбросить первую строку



так.. с 1 пунктом я вроде разобрался, все в порядке. А вот второй пока не догоняю, куда этот путь прописывать - просто вместо строки
iFile = Application.GetOpenFilename("Binäre Dateien, *.bin", , "Datei öffnen")
прописать свой путь?? не получается...
...
Рейтинг: 0 / 0
12.08.2010, 12:29
    #36788025
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
> Автор: lara-punk
> так.. с 1 пунктом я вроде разобрался, все в порядке.

Это хорошо, а то нет времени расписывать :)

> А вот второй пока не догоняю, куда этот путь прописывать - просто вместо строки
> iFile = Application.GetOpenFilename("Binare Dateien, *.bin", , "Datei offnen")
Эта строка кода всего лишь показывает диалог выбора файла и по выбору файла передает в переменную iFile путь к
выбранному файлу. Для того что-бы не показывать этот диалог, нужно просто прописать путь к файлу. Например iFile =
"c:\folder_for_binary\test.bin" .Но это обязывает положить файл test.bin d папку folder_for_binary расположенную на
диске С. И если файла не будет, произойдет ошибка.

Поэтому я сделал бы так, вместо первой строки, вторая, похоже нужна для правильной работы макроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
iFile = "c:\folder_for_binary\test.bin"
If Dir(iFile) = "" Then ' Проверяем наличие файла
' Если файла нет, предлагаем указать, где находится нужный файл
    iFile = Application.GetOpenFilename("Binare Dateien, *.bin", , "Datei offnen")
    If Dir(iFile) = "" Then
' Если файла все равно нет, делать больше нечего
        Exit Sub
    End If
End If


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2010, 12:44
    #36788068
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Игорь Горбонос
> Автор: lara-punk
> так.. с 1 пунктом я вроде разобрался, все в порядке.

Это хорошо, а то нет времени расписывать :)

> А вот второй пока не догоняю, куда этот путь прописывать - просто вместо строки
> iFile = Application.GetOpenFilename("Binare Dateien, *.bin", , "Datei offnen")
Эта строка кода всего лишь показывает диалог выбора файла и по выбору файла передает в переменную iFile путь к
выбранному файлу. Для того что-бы не показывать этот диалог, нужно просто прописать путь к файлу. Например iFile =
"c:\folder_for_binary\test.bin" .Но это обязывает положить файл test.bin d папку folder_for_binary расположенную на
диске С. И если файла не будет, произойдет ошибка.

Поэтому я сделал бы так, вместо первой строки, вторая, похоже нужна для правильной работы макроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
iFile = "c:\folder_for_binary\test.bin"
If Dir(iFile) = "" Then ' Проверяем наличие файла
' Если файла нет, предлагаем указать, где находится нужный файл
    iFile = Application.GetOpenFilename("Binare Dateien, *.bin", , "Datei offnen")
    If Dir(iFile) = "" Then
' Если файла все равно нет, делать больше нечего
        Exit Sub
    End If
End If




насчет окна - это понятно! я так и делал, прописывал iFile = "c:\folder_for_binary\test.bin"
Вот только возникла не понятка. Когда я запускаю нужный файл через Application.GetOpenFilename все ОК - я получаю нужный результат. А когда я прописываю прямой путь, оно вроде работает, вот только в качестве результатов выводит все нули... и не могу понять почему. Может что-то подскажете??
...
Рейтинг: 0 / 0
12.08.2010, 12:55
    #36788111
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
> Автор: lara-punk
> выводит все нули... и не могу понять почему. Может что-то подскажете??

Без самого макроса и этого bin-файла уже ничего не подскажу. Замена первой строки на мой код никак не могда изменить
что-то в работе макроса, поэтому мне кажется ты что-то "зацепил" случаянно и не заметил, поэтому и не работает.
Выкладывай и оригинальный макрос и переделанный, посмотрю.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2010, 13:13
    #36788177
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Игорь Горбонос
> Автор: lara-punk
> выводит все нули... и не могу понять почему. Может что-то подскажете??

Без самого макроса и этого bin-файла уже ничего не подскажу. Замена первой строки на мой код никак не могда изменить
что-то в работе макроса, поэтому мне кажется ты что-то "зацепил" случаянно и не заметил, поэтому и не работает.
Выкладывай и оригинальный макрос и переделанный, посмотрю.



файл ведь один и тот же, я ведь просто добавил строку с путем, а предыдущую закоментировал. Так или иначе, если есть возможность, то взгляни! Спасибо!
...
Рейтинг: 0 / 0
12.08.2010, 14:33
    #36788440
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub Bin2Xls()

Dim iFile
Dim lSize

'Bin-Datei цffnen
'iFile = Application.GetOpenFilename("Binдre Dateien, *.bin", , "Datei цffnen")
'iFile = "D:\test2.bin"
iFile = "C:\1_0\test2.bin"
If Dir(iFile) = "" Then ' Проверяем наличие файла
' Если файла нет, предлагаем указать, где находится нужный файл
    iFile = Application.GetOpenFilename("Binare Dateien, *.bin", , "Datei offnen")
    If Dir(iFile) = "" Then
' Если файла все равно нет, делать больше нечего
        Exit Sub
    End If
End If

ChDir FilePath(iFile)

'Datenfeld einlesen
Dim arr() As Single
'Set fs = CreateObject("Scripting.FileSystemObject")
'Set fso = fs.GetFile(iFile)
lSize = FileLen(iFile) 'fso.Size

ReDim arr( 1  To lSize /  4 )
Open iFile For Binary Access Read As # 1 
Get # 1 , , arr
Close # 1 

'Datenfeld in Tabelle schreiben
Set NewSheet = ThisWorkbook.Worksheets.Add 'after:=ThisWorkbook.Worksheets.Count
NewSheet.Name = ShortFileName(iFile)
For ii =  1  To UBound(arr) /  2 
   NewSheet.Cells(ii,  1 ).Value = arr(ii *  2  -  1 )
   NewSheet.Cells(ii,  2 ).Value = arr(ii *  2 )
   NewSheet.Cells(ii,  3 ).Value = Sqr(arr(ii *  2  -  1 ) ^  2  + arr(ii *  2 ) ^  2 )
   'NewSheet.Cells(ii, 4).Value = Tan(arr(ii * 2) / arr(ii * 2 - 1)) * 180 / 3.14159
Next ii
End Sub

Вот так выглядит мой вариант рабочего макроса. Больше я ничего не менял. Файл test2.bin лежит c:\1_0\test2.bin. Все
работает, создается новый лист, называется именем bin-файла и первые три столбца заполняется цифрами до 89 строки, потом
до 101 строки идут нули

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2010, 15:04
    #36788557
lara-punk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Игорь Горбонос,

ух, ну ты и зверь!!! то что надо!! громадное спасибо!!!
...
Рейтинг: 0 / 0
28.04.2011, 17:10
    #37238755
VikVikVik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Очень нуждаюсь в помощи.
У меня к сожелению не запускаеться
Workbooks.Open ("C:\Gorokh\Report\RBNS\CalcRBNS01-01-10_31-03-11.XLS")-это работает

Application.ScreenUpdating = False
Application.Run "CalcRBNS01-01-10_31-03-10.XLS!Module1.Sortirovka_regest_2011_sluch_2011" -это не работает
...
Рейтинг: 0 / 0
29.04.2011, 03:17
    #37239300
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
VikVikVikApplication.Run "CalcRBNS01-01-10_31-03-10.XLS!Module1.Sortirovka_regest_2011_sluch_2011" -это не работает
Так сработает: Application.Run " ' CalcRBNS01-01-10_31-03-10.XLS ' !Module1.Sortirovka_regest_2011_sluch_2011"

И так тоже: Application.Run " ' CalcRBNS01-01-10_31-03-10.XLS ' !Sortirovka_regest_2011_sluch_2011"
...
Рейтинг: 0 / 0
29.04.2011, 12:12
    #37239807
VikVikVik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Спасибо большое :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.05.2012, 16:48
    #37789754
ikosten
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
в Excel 2010 у меня не работает конструкция типа

Код: vbnet
1.
Application.Run("Funcs.xla!Name")



1004
Не удается выполнить макрос ...
Возможно этот макрос отсутствует в текущей книге либо все макросы отключены.


Проверял настройки - макросы включены
...
Рейтинг: 0 / 0
11.05.2012, 19:25
    #37790013
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
Сравните:
vlth
Код: vbnet
1.
Application.Run "Книга2.xls!Module1.МояПроцедура"

ikosten
Код: vbnet
1.
Application.Run("Funcs.xla!Name")

Если даже у вас Name - задекларирована как public , то всё же не мешало бы изучить систаксис вызова подпрограмм с параметрами (скобки... Call ... etc)...
...
Рейтинг: 0 / 0
12.05.2012, 10:41
    #37790540
ikosten
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
AndreTM,

Вообще вызов такой:

Код: vbnet
1.
Name = Application.Run("Funcs.xla!Name")



Код не мой и прекрасно работает в Excel 2003,
а в 2010 валится с ошибкой, пытаюсь разобраться что не так...
...
Рейтинг: 0 / 0
12.05.2012, 12:47
    #37790840
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
ikosten,
попробуйте вместо Funcs.xla подставить полный путь к книге.
...
Рейтинг: 0 / 0
12.05.2012, 13:04
    #37790884
ikosten
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
скукотища,

не помогло.
...
Рейтинг: 0 / 0
12.05.2012, 21:34
    #37791663
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
ikosten,

номер и описание ошибки напиши
...
Рейтинг: 0 / 0
12.05.2012, 21:41
    #37791666
ikosten
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
VSVLAD,

1004
Не удается выполнить макрос ...
Возможно этот макрос отсутствует в текущей книге либо все макросы отключены.
...
Рейтинг: 0 / 0
12.05.2012, 21:46
    #37791674
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
P.S. Проверил в Excel 2010.

Например выполняю
Код: vbnet
1.
Application.Run "ModResolver.xlsm!Module1.Resolver"


То работает нормально если книга с функцией открыта в экземпляре с вызывающим кодом. Иначе, валится с ошибкой. Если указать полный путь, то книга аттачится к Excel'ю но функция опять валится с ошибкой, но стоит убрать и вызвать книгу только по имени - то всё ОК.
Вывод: Надо проверить открыта ли сейчас книга с функциями, если нет, то открыть и уже потом сделать вызов.

Также можно (если например книга с функциями всегда будет не подалёку) сделать ссылку на книгу через окно Tools -> References. Тогда книга автоматически будет открываться, так как она зависимой от другой книги стала. И вызвать можно будет как по полному пути, например так:
Код: vbnet
1.
VBAProject.Module1.Resolver


или так:
Код: vbnet
1.
Module1.Resolver


главное чтобы имена не пересекались
...
Рейтинг: 0 / 0
12.05.2012, 22:15
    #37791706
ikosten
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск макроса в другом файле Excel
VSVLAD,

Спасибо за развернутый ответ, но не помогло

Книга с функциями открыта, ссылка на нее прописана :(
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск макроса в другом файле Excel / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]