2015-08-04 8 views
5

Ho cercato in giro e so come chiamare una funzione da Personal.xlsb da una macro VB, ma come posso chiamare la funzione da utilizzare in una nuova cartella di lavoro?Utilizzare la funzione Personal.xlsb nella nuova cartella di lavoro?

Ecco la mia funzione, salvato in 'Module1' nel mio Personal.xlsb:

Public Function GetColumnLetter(colNum As Integer) As String 
    Dim d As Integer 
    Dim m As Integer 
    Dim name As String 
    d = colNum 
    name = "" 
    Do While (d > 0) 
     m = (d - 1) Mod 26 
     name = Chr(65 + m) + name 
     d = Int((d - m)/26) 
    Loop 
    GetColumnLetter= name 
End Function 

ho creato una nuova cartella di lavoro e pensato che avrei potuto chiamare che solo con =getcolumnletter(1), ma la funzione non "popolano" quando Inizio a digitare =...

Sto trascurando qualcosa ?? Come si usa questa funzione in altre cartelle di lavoro, senza VBA?

Grazie per qualsiasi consiglio!

risposta

9

Ah, era più semplice di quanto pensassi. Basta usare il nome della cartella di lavoro prima della macro, quindi =Personal.xlsb![macroname]. Quindi nel mio caso, ho appena messo questo nella cella: =Personal.xlsb!GetColumnLetter(2) per restituire "B".

+0

Sì, è una cosa spiacevole su excel, non si otterrà il popolamento a meno che non si trovi nel libro della funzione o si crei un componente aggiuntivo – Raystafarian

+0

Questo è strano, perché nella mia mente, Personal.xlsb sarebbe dove si dovrebbero creare/memorizzare macro che si utilizzare "Excel wide". Non è forse lo scopo di Microsoft per Personal.xlsb? (E specialmente in Personal.xlsb se hai una 'Funzione pubblica', penserei naturalmente che sia disponibile su tutte le cartelle di lavoro senza doverla chiamare con' = Personal.xlsb! [Qualunque] '. – BruceWayne

+0

È un buon posto per archiviare subroutine e funzioni, ma non funzioni pubbliche: – Raystafarian

7

Come già scoperto, è possibile aggiungere alla funzione il prefisso Personal.xlsb!. Ma anche notare che ci sono due opzioni disponibili, se si desidera evitare anteponendo le funzioni:

Opzione 1
Creare un di riferimento in ogni cartella di lavoro che chiamerà la funzione. Aprire la cartella di lavoro in cui si desidera utilizzare la funzione e accedere all'editor VBA. Nel menu, fare clic su Tools --> References.... Nella finestra di dialogo che appare, spunta la casella del progetto VBA di Personal.xlsb. Si noti che verrà elencato con il nome del progetto ("VBAproject" a meno che non si sia modificato il nome predefinito) anziché il nome file; se sono aperte altre cartelle di lavoro, potrebbe essere presente più di una voce con il nome predefinito "VBAproject", quindi è consigliabile rinominarlo per primo. Maggiori dettagli si possono trovare in questo articolo, che è stato pubblicato dopo l'OP: http://www.myonlinetraininghub.com/creating-a-reference-to-personal-xlsb-for-user-defined-functions-udfs

Opzione 2
Se si desidera un general-purpose UDF veramente, sempre disponibile senza né prefisso o di riferimento, è possibile installare è un componente aggiuntivo . Questo viene fatto salvando il file con l'UDF come un file .xlam (questo sarebbe ovviamente un file separato rispetto personal.xlsb.) Ulteriori dettagli in un articolo separato dalla stessa fonte: http://www.myonlinetraininghub.com/create-an-excel-add-in-for-user-defined-functions-udfs

+0

Questo è fantastico! Ho sempre saputo della seconda opzione, ma non mi ero reso conto che avrei potuto creare un riferimento anche al mio progetto personale.Grazie mille per la tua risposta! – BruceWayne

+0

Stupefacenti cose qui. Option1 è molto conveniente come ha affermato @BruceWayne. Ho sempre appena copiato e incollato le mie funzioni personali nel mio progetto attuale, se necessario. –