2014-01-08 2 views
1

У меня есть код VB6, который выполняет различные макросы Excel. Я установил свои точки останова в VB6 и в макросе Excel, а затем начал отладку в приложении VB6. Когда он достигает (контрольной точки) инструкции для выполнения макроса, он пропускает команду и продолжает перемещаться по моему VB6-коду. Я ожидал, что он перейдет в Excel и начнет отладку макроса Excel. Есть ли какая-то конфигурация или трюк для отладки макроса Excel, который вызывается из приложения VB6?Отладка макроса Excel через Microsoft Visual Basic 6.0

+0

Можете ли вы поместить код вызова (или эквивалент) в VBA и запустить его там? Затем вы отлаживаетесь в одной среде. –

+0

Это имело бы смысл и облегчало бы жизнь. Но я только что присоединился к команде Dev, которая создала это приложение несколько лет назад. Я не уверен, что думали оригинальные разработчики, кроме чрезмерно усложняющих процессов. – Jmunndi

+0

Если код VBA должен выполнять большую обработку, и он много раз обращается к файлу Excel, то он, скорее всего, будет работать быстрее, чем эквивалентный код VB, используемый для автоматизации Excel, поскольку VBA не нуждается в маршалировании всего процесса границы (мое понимание IANACS). Возможно, поэтому они так и решили. –

ответ

0

Когда VB6 выполняет свой собственный код, он позволяет программисту, использующему IDE, устанавливать точки останова и давать управление пользователю, когда выполнение достигло указанных упомянутых точек останова. Однако установка контрольных точек в Excel принесет вам пользу, если вы (программист) выполнили макрос из интерфейса Excel. Это не тот случай, когда VB6 отвечает за запуск Excel и сообщает ему о выполнении макросов в книге.

Вот что вы можете сделать:

перенесет все макро-кода в VB6. Это довольно просто, вам просто нужно добавить несколько слов здесь и там, как этот

'In Excel macro: 
Activecell.Offset(0,1).Value = "my value" 

поэтому, если мы хотим, чтобы перенести эту строку макроса VB6:

'In VB6 you must declare an instance of EXCEL application: 

Dim EX as Excel.Application 
EX.Workbooks.Open('c:\my_excel_file.xls') 
EX.Sheets(0).Activate 'Go to the first sheet 

'Then you are back to business: 

EX.ActiveCell.Offset(0,1).Value = "my vlaue" 

'But don't forget to close and dispose of EX instance afterwards. 

EX.Activeworkbook.Close 'Check save options 
EX.Quit 
Set EX = Nothing 

После переноса всех функциональность макросов для VB6, вы можете установить точки останова в VB6, и у вас будет весь контроль над выполнением, и вы сможете отлаживать код, как вы намеревались сделать.

+0

Я работаю с полноценным приложением vb6. Я не могу перенести свои макросы в свой код VB6. Занимательно и трудоемко, потому что макросы очень большие. Не существует ли флажок, который я могу выбрать, или команду для использования во время отладки? – Jmunndi

Смежные вопросы