Excel, Compile VBAProject - промяна на реда на компилиране на модули

Да предположим, че сме в редактора на Visual Basic в Excel 2007. Създаваме един модул с име modGlass:

Sub VolatileGlass()
    Dim Glass As shiny_surface

End Sub

и след това създаваме втори модул, наречен modMetal:

Sub durableMetal()
    Dim metal As metal_compound

End Sub

въведете описание на изображението тук

Подзаглавията и в двата модула съдържат грешката: "User-defined type not defined."

Когато компилирам проекта с помощта на елемента от менюто Debug: Compile VBAProject, модулът modGlass винаги се компилира първи. Ако аз:

  • щракнете два пъти върху модула modMetal и компилирайте (това?) или
  • преименувайте modMetal на amodMetal (така че металният модул сега да е първи в йерархията на модулното дърво на проекта)

все пак първо се компилира модулът modGlass.

Въпросът: ако имам проект с множество модули във VBE, има ли начин да уточня в каква последователност ще бъдат компилирани модулите?

Наистина не се нуждая от тази функция, но просто съм любопитен дали има някакъв бърз начин да го направя. Използвам Excel 2007.


person colemik    schedule 22.03.2013    source източник


Отговори (1)


Модулите не се компилират въз основа на техните имена, а в последователността, в която са създадени. Така че наистина няма значение дали поставите "a" преди modMetal

За да го тествате, създайте два модула. Уверете се, че и двата модула имат грешки. Когато го компилирате, ще забележите, че модулът, който е създаден първи, ще бъде компилиран първи. Сега изтрийте първия модул и го създайте отново. Този път, когато го компилирате, вторият (не новосъздаденият) се компилира първи :)

Не, за съжаление няма директен начин (AFAIK) за указване на тази последователност. Но мръсният начин да го направите се основава на това, което предложих по-горе. Копирайте всички данни в Notepad и след това изтрийте всички модули и след това ги създайте отново от нулата (в реда, в който искате да ги компилирате)

HTH

person Siddharth Rout    schedule 22.03.2013
comment
Благодаря за отговора. За да уточня последователността, първоначално измислих импортиране и експортиране на модулите обратно, но вашият начин просто да ги изтриете/създадете отново е по-бърз. наздраве - person colemik; 23.03.2013