Come chiamare la funzione VBA da celle Excel (2010)?

Ho definito alcune funzioni in una cartella di lavoro utilizzando VBA, quindi mi aspettavo di poterle utilizzare in una formula di cella, ma Excel non riconosce la funzione. Ho appena ricevuto #NAME?

Provato:

  • Rendendomi conto di aver creato un file XSLX, l’ho convertito in un file XSLM. Non ha funzionato
  • Rimosso tutti i tipi dalla dichiarazione della funzione. Non ha funzionato
  • Spostata la funzione nel modulo VBA del foglio di lavoro. Non ha funzionato
  • Aggiunto pubblico alla dichiarazione. Non ha funzionato

Cosa mi manca?

Questo non è un codice intelligente, neanche:

Function Square2(AnyNumber) 'return the square of any integer Square2 = AnyNumber * AnyNumber End Function 

Risposta

Mettere la funzione nell’area “ThisWorkbook” può causare il #NAME? problema. Crea un nuovo modulo (fai clic con il tasto destro sulla cartella VBAProject, Inserisci, Nuovo modulo) e metti invece la funzione lì.

passi

  1. Apri l’editor VBA ( Alt + F11 su Windows / Fn + Option + F11 su Mac)
  2. Fare clic con il pulsante destro del mouse su VBAProject
  3. Seleziona Inserisci >> Modulo
  4. Creare una funzione Public all’interno di Module1 , ad esempio:

     Public Function findArea(ByVal width as Double, _ ByVal height as Double) As Double ' Return the area findArea = width * height End Function 
  5. Chiamalo da una cella, come qualsiasi altra funzione: =findArea(B12,C12)

Screenshot macro

Ho affrontato lo stesso problema, dopo aver lottato in seguito ha funzionato per me:

La mia funzione era all’interno di un modulo in una cartella di lavoro macro chiamata Personal.XLSB. Ho prefisso il nome della funzione con il nome file personale della cartella di lavoro e!, Quindi se il nome della funzione è theFunction (x, y), ho inserito nella cella “= PERSONAL.XLSB! TheFunction (x, y).

Si noti che PERSONAL.XLSB è sempre aperto in modalità nascosta per me.

Assicurati di non essere in modalità progettazione.

C’è un pulsante della modalità di progettazione nella scheda dello sviluppatore in Excel e accanto ai pulsanti di esecuzione / arresto nell’editor VBA. Se è selezionato e non ti consente di deselezionarlo, prova a riaprire la cartella di lavoro con le macro abilitate.

Se è ancora abilitato, o non permetterà l’esecuzione di macro, assicurati che le macro siano abilitate.

Attiva macro.

  • Excel 2010
  • Excel 2007

https://stackoverflow.com/a/20659823/258482

Ho avuto un problema identico, inclusa una funzione di lavoro che in seguito ha smesso di funzionare causando un errore #NOME. Sono riuscito a risolvere entrambi, assicurandomi che il nome del modulo non fosse lo stesso del nome della funzione. Avevo una funzione di lavoro F_1 nel Module1, ho cambiato il nome del modulo in F_1 e ha smesso di funzionare, ora torna al Module1 e la funzione funziona di nuovo. La mia seconda funzione ha iniziato a funzionare anche quando ho cambiato il nome del modulo da F_2 a Module2.

Il file XLSX e i file XLSM non hanno nulla a che fare con questo. Il formato riproduce il ruolo quando si salva il file. (In XLSX, il codice VBA verrà rimosso durante il salvataggio del file).

Il seguente codice http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspx funziona abbastanza bene all’interno di un nuovo modulo nel mio excel.

 Function Discount(quantity, price) If quantity >= 100 Then Discount = quantity * price * 0.1 Else Discount = 0 End If Discount = Application.Round(Discount, 2) End Function 

Dato che non riesco a vedere il tuo codice, puoi provare se la funzione qui sotto funziona anche per te? In tal caso, inizia a modificare la funzione seguente in modo che diventi la tua funzione (ad esempio, prima modifica il nome e controlla se funziona, quindi modifica il numero di parametri e controlla se funziona, quindi cambia il nome dei parametri).

Ho aperto Excel, aperto l’editor di codice (Alt + F11), selezionato la nuova cartella di lavoro, inserito un nuovo modulo, digitato

 Function Decrement(i As Integer) As Integer Decrement = i - 1 End Function 

poi torna alla cartella di lavoro e in A1 typed = Decrement (2) e premi Invio, e ha funzionato. Il decremento si è mostrato nell’elenco a discesa delle funzioni mentre scrivevo = Decr … È stato riconosciuto e ha funzionato. Non ho nemmeno dovuto salvare la cartella di lavoro.

So che questa non è esattamente una risposta alla tua domanda, ma è la ricetta con cui ho avuto fortuna.

Attiva macro.

  • Excel 2010
  • Excel 2007

Penso che potrebbe esserci un problema se il tuo modulo ha lo stesso nome della tua funzione. Prova a rinominare il tuo modulo o la tua funzione.

Se si utilizzano le versioni più recenti di Excel, per visualizzare le funzioni VBA in un’altra cartella di lavoro è necessario:

  1. Salva le cartelle di lavoro come .xlsm
  2. Abilita le macro come suggerito sopra
  3. Imposta un riferimento. In VBA (Alt-F11) scegli Strumenti / Riferimenti, quindi vai alla cartella di lavoro che contiene la macro che desideri utilizzare. Controlla quel riferimento nella lista.

    Se si ottiene un messaggio di errore sui nomi dei moduli in conflitto, basta rinominarlo prima in Project Explorer.