2013-05-26 11 views
15

Vorrei chiamare un sottotitolo da un altro sub all'interno dello stesso modulo. Il primo sub sarebbe il mio codice principale e lì chiamerei la seconda subroutine. La seconda subroutine riceve più input come integer, double, double array e double matrices. La dimensione degli array e delle matrici è nota e memorizzata in una variabile intera. Il sub restituisce anche diverse uscite. Quindi, mi piacerebbe fare qualcosa di simile.Excel VBA che chiama sub da un altro sub con più ingressi, uscite di diverse dimensioni

sub Main() 
    Nc As integer 
    Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double 
    'I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc. 

    CalculateA(Nc,kij, xi, a1, a) 
    Cells(5,5)=a 
end sub 

sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double) 
    a=0 
    For i=1 To Nc 
     For j=1 To Nc 
      a = a + kij(i,j)*x(i)*x(j) 
     Next j 
    Next i 
    a = a*a1 
end sub 

Come fa a sapere quale sub è il sub principale in cui inizia a correre. Posso mettere il secondario secondario in cima e il codice in qualche modo parte dalla subroutine in basso?

+0

possibile duplicato di [Calling a Sub in VBA] (http://stackoverflow.com/questions/7715044/calling-a-sub-in-vba) – MackM

risposta

27

Per chiamare un sub all'interno di un altro sub avete solo bisogno di fare:

Call Subname() 

Allora, dove si dispone di CalculateA(Nc,kij, xi, a1, a) è necessario avere call CalculateA(Nc,kij, xi, a1, a)

Come il che corre primo problema è per voi a decidere, quando vuoi eseguire un sottotitolo puoi andare all'elenco delle macro selezionare quello che vuoi eseguire ed eseguirlo, puoi anche dargli una scorciatoia jey e devi solo premere quei tasti, sui sottotitoli secondari di solito lo faccio come Private sub CalculateA(...) in questo modo non appare nell'elenco delle macro ed è più facile da lavorare

Speranza che aiuta, Bruno

PS: Se avete qualche altra domanda basta chiedere, ma questo non è una comunità in cui si chiede il codice, è venuto qui con una domanda o un codice che isn' t in esecuzione e chiedere aiuto, non come hai fatto "Sarebbe bello se si potesse scrivere nel formato VBA di Excel."

2

Queste sono davvero due domande.

La prima risposta qui: Calling a Sub in VBA

Per il secondo, PROTIP: non c'è subroutine principale in VBA. Dimentica le lingue procedurali e di uso generale. I sottotitoli VBA sono "macro": puoi eseguirli premendo Alt + F8 o aggiungendo un pulsante al tuo foglio di lavoro e richiamando il sottotitolo desiderato dal sottotitolo "ButtonX_Click" generato automaticamente.

2

I sottotitoli VBA non sono macro. Un sub VBA può essere una macro, ma non è un must.

Il termine "macro" viene utilizzato solo per azioni utente registrate. da queste azioni un codice viene generato e memorizzato in un sottomarino. Questo codice è semplice e non fornisce potenti strutture come loop, ad esempio Do .. until, for .. next, while .. do e others.

Il modo più elegante è, di progettare e scrivere il proprio codice VBA, senza l'uso delle funzioni macro!

VBA è un linguaggio a oggetti e orientato agli eventi. I sottotitoli o bette chiamano "sub-routine", sono avviati da eventi dedicati. L'evento può essere la pressione di un pulsante o l'apertura di una cartella di lavoro e molti altri eventi molto specifici.

Se ci si concentra a VB6 e non a VBA, allora si può affermare, che c'è sempre un main-finestra o modulo principale. Questo modulo viene avviato se si avvia l'eseguibile compilato "xxxx.exe".

In VBA non hai niente di simile, ma si dispone di un file di wich XLSM viene avviato da Excel. È possibile allegare del codice all'evento Workbook_Open.Questo evento viene generato se apri il file Excel desiderato che viene chiamato una cartella di lavoro. All'interno della cartella di lavoro hai fogli di lavoro.

È utile acquisire familiarità con il cosiddetto modello a oggetti di Excel. La cartella di lavoro ha diversi eventi e metodi. Anche il foglio di lavoro ha diversi eventi e metodi.

Nel modello basato su oggetti si hanno oggetti, che hanno eventi e metodi. i metodi sono azioni che puoi fare con un oggetto. gli eventi sono cose che possono accadere a un oggetto. Un oggetto può contenere un altro oggetto e così via. Puoi creare nuovi oggetti, come fogli o grafici.

+0

Come si crea una subroutine in VBA, quindi chiamarla dal Funzione macro della scheda sviluppatore? Se Excel non fornisce questa capacità, è seriamente imperfetto. –