Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
5 / 5 / 0
Регистрация: 25.02.2010
Сообщений: 34

Можно ли активировать форму в другом файле?

31.08.2011, 12:41. Показов 4819. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможна ли активация формы (выполнение Load UserForm) из другого файла,
по аналогии с
Application.Run "'My File.xls'!ThisModule.ThisProcedure" ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2011, 12:41
Ответы с готовыми решениями:

Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле?
Подскажите, плз, можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле? (который лежит на другом...

В отдельном потоке создать дочернюю форму, которую можно было бы активировать когда главная форма занята
Дано: Основная форма, длительный рассчёт. Задача: показать progressbar, но хочу показать его на сторонней форме (это надо для...

Можно ли написать события для кнопок в другом файле?
Здравствуйте! Сейчас пишу программу в Microsoft Visual Studio C# 2010 и так получилось, что у меня очень много кнопок (Около 20). Роль...

6
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
31.08.2011, 14:25
на практике не проверял, но у каждой workbook есть VBProject.VBComponents - покури.
PS Сейчас просто не занимаюсь VBA так плотно, как раньше
1
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
31.08.2011, 15:33
Пока делаю для себя предположение, что нельзя запустить непосредственно командой Load форму в другом проекте.

Смысл моего решения:
в другом проекте создаём процедуру, которая вызовет форму.

1. Создание процедуры по запуску формы.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Процедура1()
'Создание процедуры по запуску формы.
Dim Книга As Excel.Workbook
Dim Модуль As VBIDE.VBComponent
'Здесь подразумевается книга, в которой нужно запустить форму.
Set Книга = Workbooks("Книга1.xlsm")
'Создаём в книге, в которой нужно запустить форму, модуль.
Set Модуль = Книга.VBProject.VBComponents.Add(vbext_ct_StdModule)
'Даём имя модулю (без пробелов).
Модуль.Name = "ЗапускФормы"
With Модуль.CodeModule
    'В новом модуле могут оказаться какие-нибудь команды,
    'их надо удалить.
    .DeleteLines StartLine:=1, Count:=.CountOfLines
    'Вставляем текст процедуры ЗапускФормы.
    'Здесь указываем имя процедуры по запуску формы.
    .InsertLines Line:=1, String:="Sub ЗапускФормы()"
    'Здесь указываете имя формы.
    .InsertLines Line:=2, String:="Load UserForm1"
    .InsertLines Line:=3, String:="End sub"
End With
End Sub

2. Запуск в только что созданном модуле процедуры по запуску формы.
Visual Basic
1
2
3
4
Sub Процедура2()
'Запуск в только что созданном модуле процедуры по запуску формы.
Application.Run "'Книга1.xlsm'!ЗапускФормы.ЗапускФормы"
End Sub

3. Удаление только что созданного модуля (если он больше не нужен).
Visual Basic
1
2
3
4
5
6
7
8
Sub Процедура3()
'Удаление только что созданного модуля (если он больше не нужен).
Dim Книга As Excel.Workbook
Dim Модуль As VBIDE.VBComponent
Set Книга = Workbooks("Книга1.xlsm")
Set Модуль = Книга.VBProject.VBComponents("ЗапускФормы")
Книга.VBProject.VBComponents.Remove Модуль
End Sub
1
5 / 5 / 0
Регистрация: 25.02.2010
Сообщений: 34
31.08.2011, 19:37  [ТС]
Спасибо.

Примерно в этом направлении и думал, правда пока не копал.

Форма - штука специфическая, GUI-шная, по смыслу - доступа из внешнего источника предусматриваться как-будто бы не должно. С другой стороны - это просто кусок кода, и если можно запустить некую процедуру, вроде бы и форму не невозможно.

А если знаете - как обращаться к запароленному проекту (пароль известен)?

Добавлено через 2 часа 39 минут
Отвечаю себе и интересющимся:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub UnprotectVBProject()
    Dim VBProj As Object
    Set VBProj = Workbooks("Examlpe.xls").VBProject
    'open VB
    Application.SendKeys "%{f11}"
    'send password
    Application.SendKeys "Pswd", True
    Application.SendKeys "~", True
    VBProj.VBE.SelectedVBComponent.Activate
 
<работаем с модулями>
 
    'close VB
    Application.SendKeys "%{f4}"
    On Error GoTo 0
End Sub
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
31.08.2011, 20:23
Цитата Сообщение от Iasmer Посмотреть сообщение
"Examlpe.xls"
подскажите пжл, а что указывать адрес файла не надо, код и для Ворда пойдёт??
Как его переделать??
Заранее спасибо
0
5 / 5 / 0
Регистрация: 25.02.2010
Сообщений: 34
01.09.2011, 13:53  [ТС]
2 Ц.Э.

> указывать адрес файла

- имеется в виду, что файл открыт

> для Ворда

- с учетом того, что в исходнике было что-то типа - Example.doc, думается пойдет
(sorry, ссылку впопыхах утерял)

Вопрос знатокам:

ПРОБЛЕМА оказалась в другом:
уже в открытом от пароля проекте, при попытке создать модуль
( строка 8 1-го кода уважаемого Busine2009
Set Модуль = Книга.VBProject.VBComponents.Add(vbext_c t_StdModule )

ругается:

Run-time error '50289':
Can't perform operation since the project Is protected.


при этом в незащищенной книге модуль вписывается и удаляется на ура.

Добавлено через 14 часов 19 минут
Дополнения:
1. Выяснилось следующее: с 1-м файлом работает; в цикле - сбоит т.е. видимо код пытается что-то делать во время сохранения предыдущего файла;

2. Во время работы sendkeys (не быстой) приходится держать руки прочь от мышки и клавы - в противном случае пароль легко вписывается куда попало (вернее, куда сместился курсор).

Доп вопрос: по п.1 можно ли четко отследить закрытие файла (а ведь по простоте души казалось что код не должен выполняться до момента закрытия)?

обработка проста как хоз.мыло
в цикле

Visual Basic
1
2
3
Workbooks.Open Filename:=CFPATH
Call UnprotectVBProject(WhatFile(j))
ActiveWorkbook.Close SaveChanges:=True
нешто код выполняется до завершения ActiveWorkbook.Close ? - по ощущениям так

Добавлено через 2 часа 59 минут
Итак, резюме на сегодня (может кто подскажет умное):

1. из VBE, по F5 программка выполняется, но только 1 раз, если нет цикла, запускающего обработку пакета файлов;

2. извне (из окошка макросов) программка обламывается "на взлете" (SendKeys вероятно не отрабатывают (или поток идет "не туда" - VBAProject остается запароленным)

Вопрос: м.б. можно/нужно как-то перенести (куда) фокус (т.е. на чем фокусируется курсор в п.2 ?)

в п.1, как уже говорилось, по ощущениям: после начала сохранения файла, продолжается выполнение кода - открывается следующий файл, в результате интерпретатор охреневает, не понимая в котором файле ему требуется обращаться к VBAProject; как дать задержку исполнения кода до полного закрытия предыдущего файла (или здесь что-то другое?)

Советы будут приняты с благодарностью.
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
06.09.2011, 09:24
Цитата Сообщение от Iasmer Посмотреть сообщение
из VBE
просто VBA называйте. (Просто совпадает и название языка программирования и название среды разработки).

Может просто что-то не успевает открываться/закрываться. Нужно сделать DoEvent в цикле, пока что-то не откроется/не закроется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2011, 09:24
Помогаю со студенческими работами здесь

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

А как можно из одного файла экспортировать 2 и больше данных и импортировать в другом файле.
А как можно из одного файла экспортировать 2 и больше данных и импортировать в другом файле. Например let a = 5; let b...

Как одному классу узнать о другом в другом файле, если они не имеют общего наследования
Есть два класса в разных файлах, первому классу нужно знать о втором и использовать указатели типа второго у себя внутри, второму нужно...

Как активировать форму
Проблема такая: Есть Form 1 на которой есть кнопочка вызывающая форму с таблицей. У второй формы такой код: // запись...

Как в VB.NET активировать форму?
В VB6 все было просто - Form.Show , а VB.NET как это сделать никак не пойму. Помогите, пожалуйста.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru