2015-10-07 5 views
2

У меня очень большой объем кода, написанного в VBA в файлах Access .mdb, содержащих формы и подключающихся к базе данных Access. Мне нужно перенести этот код в приложение VB6. Это нецелесообразно переписывать все это, поскольку слишком много.Возможно ли запустить файл VBA из приложения VB6?

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

Update

я, наконец, удалось выяснить, как запустить файл MDB VBA из моей формы VB6, используя эту инструкцию:

Call Shell("C:\Program Files (x86)\Microsoft Office\OFFICE11\MSACCESS.EXE C:\presto.mdb /runtime /cmd", 1) 

Так проект VBA теперь запущена из формы VB6 , но при запуске он сработает, показывая эту ошибку «Ошибка выполнения» 3024 «Не удалось найти файл« C: \ db.mdb ». Я чувствую, что я на полпути к тебе. Но я не знаю, чего мне здесь не хватает?

+2

Файлы VBA не имеют смысла сами по себе. Они должны находиться внутри хостинга.Если это так, что у вас есть файл VBA, который не относится к каким-либо функциям хостинга, а просто представляет собой абстрактную библиотеку, вы можете вставить его в форму VB6 как есть. В противном случае он будет терпеть неудачу, потому что ему нужно приложение хоста. – GSerg

+0

Какое приложение для вашего кода VBA? – MatthewD

+0

VBA и VB6 используют ту же среду выполнения, что и @GSerg указывает, что вам не нужно «переписывать», по крайней мере, с точки зрения основного языка. –

ответ

1

Не зная структуру вашего приложения VB6 и ваших файлов доступа и что они делают, практически невозможно дать какой-либо полезный ответ.

То, что вы хотите сделать, нелегко, как указано в комментариях. Проекты VBA не предназначены для работы таким образом.

Однако некоторые предложения.

  1. Исследуйте команду RunMacro и узнайте, подходит ли вам это.
  2. Вы можете попытаться использовать такой инструмент, как autohotkey, чтобы записывать щелчки мыши по их желанию и воспроизводить их с вашего приложения VB6.
  3. Посмотрите на вытягивание разделов VBA, которые являются бизнес-логикой и напрямую копируют и вставляют код в ваше приложение VB6. Это может работать или не работать в зависимости от кода.
  4. Начните медленный процесс перезаписи (но не переписывайте в VB6, используйте VB.Net, C# или веб-приложение или что-то вроде приложения 2015 года).

Если вы хотите, мой честный совет начинают мигрировать на более современные решения, такие как VB.NET, так что вы не будете иметь еще худшую проблему в 2020 г.

Существует NO серебряная пуля для твоя проблема.

+0

VB.Net быстро мутирует, поэтому вам, возможно, придется смириться с гораздо более дорогостоящим циклом текущего обслуживания. – Bob77

0

Было бы лучше спроектировать новую форму в VB6 с кнопкой, как вы сказали, но также и с некоторыми текстами или списками/вещами, которые вы хотите отобразить, затем вы копируете/вставляете VBA в событие button_click (s) для его выполнения и добавить к этому VBA-коду некоторый вывод в текст (ы)/список (ы)/все, что вы решили разместить в форме VB6.

Редактирование: Хорошо, поэтому, учитывая ваш комментарий, возможно, этот трюк может помочь избежать повторной записи тысяч строк кода: добавьте в код VBA цикл while, который запускает некоторый Sub или Function при наличии флага на (например, c: \ temp \ fileFlag.txt), так как он появляется, когда вызывается код VBA ... если VB6 управляет флагом, выполнит ли это задание? :)

+0

Я ценю ваше предложение. Но это невозможно сделать. Как я уже сказал, каждый файл VBA представляет собой полный проект. У нас нет времени переписывать 10 лет работы в VB6. Итак, нам нужно просто называть те файлы VBA с помощью кнопок формы VB6. – AndroWeed