Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VBA e vlookup

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

VBA e vlookup

Postdi dipic » 13/01/10 15:19

Buongiorno a tutti.
Seguendo i vari post del forum, ho sviluppato una piccola macro che dovrebbe riportarmi un dato sulla barra di stato:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A3:A21")) Is Nothing Then
aFamiglia = Right(ActiveWorkbook.Names("FAM0001"), Len(ActiveWorkbook.Names("FAM0001")) - 1)
sStBarMsg = CStr(Application.VLookup(Target, aFamiglia, 6, True))
Application.StatusBar = sStBarMsg
Else
Application.StatusBar = ""
End If
End Sub

Mi viene generato l'errore 2015. Non capisco come gestire FAM0001 che è un nome contenente una matrice (ARTICOLI!A2:N14) ... nella riga dove creo il msg (sStBarMsg) ho provato a sostituire la variabile aFamiglia con "ARTICOLI!A2:N14", ma l'errore è sempre lo stesso.
...
Non riesco a capire dov'è l'errore ...
grazie per qualsiasi suggerimento
Avatar utente
dipic
Utente Junior
 
Post: 95
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Sponsor
 

Re: VBA e vlookup

Postdi Flash30005 » 13/01/10 15:44

Ammesso che "sStBarMsg" sia una variabile (numero o stringa)
dovresti inizializzare l'applicazione della barra io uso questo codice

Codice: Seleziona tutto
oldStatusBar = Application.DisplayStatusBar    '<<< chiamo oldStatusBar la barra di default
Application.DisplayStatusBar = True     '<<<< inizializzo la visualizzazione

 Application.StatusBar =  xxxx '<<<< variabile numerica o testo, nel tuo caso = sStBarMsg  (ma non so se questo è un dato reale)

Application.DisplayStatusBar = oldStatusBar  '<<< ripristino a default l'applicazione
Application.DisplayStatusBar = False   '<<< nascondo la barra

Se non fai la procedura di ripristino, il valore della barra rimane memorizzato e alla nuova apertura ti troverai un valore errato.

Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: VBA e vlookup

Postdi dipic » 13/01/10 15:52

Grazie per la cortese e veloce risposta ...
il problema dello status della barra lo risolvo con una sub identica su "Worksheet_Change" ... praticamente se cambio dato nella cella e/o mi sposto di cella, controlla se è nel range specificato, se no, mi resetta lo status della barra ... e quello funziona.
Il problema è che non riesco a recuperare il dato dalla matrice FAM0001 con vlookup, mi dà sempre "errore 2015".
Avatar utente
dipic
Utente Junior
 
Post: 95
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Re: VBA e vlookup

Postdi Anthony47 » 13/01/10 16:09

In aggiunta al messaggio di Flash (vedi sopra).

Cercando di capire il tuo bisogno (inespresso) dalla macro non funzionante mi viene la sensazione che dovresti semplicemente usare sStBarMsg = CStr(Application.VLookup(Target, Range("FAM0001"), 6, True)) e abbandonare aFamiglia.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA e vlookup

Postdi dipic » 13/01/10 16:45

Ciao Anhony,
non ho nessun problema ad abbandonare la variabile aFamiglia ... stò cercando il metodo migliore e funzionante ...
purtroppo il metodo indicato mi dà errore run-time 1004 (metodo range dell'oggetto worksheet non riuscito).

Dalla tua esperienza, pensi ci sia un metodo migliore per recuperare il dato che stà nel secondo foglio della mia cartella? .... qualsiasi suggerimento è ben accetto.
grazie

p.s.
Perchè dici ... "bisogno della macro inspresso" ????
Ho scritto : "piccola macro che dovrebbe riportarmi un dato sulla barra di stato" ... il problema è che non riesco a recuperare il dato.
Avatar utente
dipic
Utente Junior
 
Post: 95
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Re: VBA e vlookup

Postdi Anthony47 » 13/01/10 17:10

Dico che il tuo bisogno era inespresso perche' non l' hai descritto, l' ho dedotto dalla macro.
Ma non l' ho dedotto completamente perche' non ho immaginato che l' intervallo FAM0001 fosse su un foglio diverso da quello su cui lavori. Quindi userai
sStBarMsg = CStr(Application.VLookup(Target, Sheets("IlFoglioDoveSiTrovaFam0001").Range("FAM0001"), 6, True))

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA e vlookup

Postdi dipic » 13/01/10 17:30

Funziona ...
riepilogando..... siccome il dato è dinamico devo recuperare anche il nome della cartella dalla matrice "FAM0001" ... ho fatto come segue (se a qualcuno può servire):
'
' FAM0001 = "ARTICOLI!$A$2:$N$14"
'
aFamiglia = Right(ActiveWorkbook.Names("FAM0001"), Len(ActiveWorkbook.Names("FAM0001")) - 1)
iPos = InStr(1, aFamiglia, "!", 1)
sSheet = Left(aFamiglia, iPos - 1)
sRange = Right(aFamiglia, Len(aFamiglia) - iPos)
sStBarMsg = "Peso=" & CStr(Application.VLookup(Target, Sheets(sSheet).Range(sRange), 6, True))

Grazie per il prezioso aiuto
Avatar utente
dipic
Utente Junior
 
Post: 95
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Re: VBA e vlookup

Postdi dipic » 14/01/10 23:10

Ciao Anthony (o comunque chiunque voglia rispondere),
premesso che (come detto nel post precedente), tutto funziona, volevo solo per conoscenza personale, sostituire la ricerca di vlookup (indicata nel tuo post precedente) con:
Index (combinato con match)
offset (sempre combinato con match)
... entrambe a livello di funzione sono più affidabili di vlookup ...

il codice però continua a darmi errori di varia natura, non riesco a capire qual'è l'oggetto/espressione corretto per usare la funzione interessata ... come nel caso citato nel tuo post , ovvero

sStBarMsg = CStr(Application.VLookup(Target, Sheets("IlFoglioDoveSiTrovaFam0001").Range("FAM0001"), 6, True))

infatti se digito Sheets. nella casella combinata che appare, il comando RANGE non c'è ... puoi cortesemente aiutarmi a capire il funzionamento ... oppure indicarmi dove posso trovare delle indicazioni da studiare?

grazie per la tua pazienza e cortesia
Avatar utente
dipic
Utente Junior
 
Post: 95
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Re: VBA e vlookup

Postdi Anthony47 » 15/01/10 14:51

Le "WorksheetFunctions" hanno bisogno dei parametri propri delle equivalenti funzioni excel; l' uso di Match intrinsecamente non pone difficolta', ma nel tuo caso non vedo proprio il vantaggio di usare questa funzione, che presuppone il calcolo preliminare dell' indirizzo della colonna N. 6 dell' intervallo FAM0001 e l' uso del risultato ottenuto in un' alta funzione successiva (quindi 3 fasi invece che 1).

Se con ". . se digito Sheets. nella casella combinata che appare, il comando RANGE non c'è. . " intendi dire che quando scrivi i parametri della formula Vlookup non ti compaiono suggerimenti su metodi e proprieta' usabili, questo e' perche' sei nell' area "parametri", l' help di vba che ti compare dice Arg1 / Arg2 / etc, ed e' la sintassi della WorksheetFunction che stai usando che determina cosa deve essere Arg1, che cosa Arg2, etc.

L' help on line vba sulle WorksheetFunction e' scarno, d' altra parte parliamo di una proprieta' che consente di usare nel vba le funzioni che teoricamente l' utente di excel ha imparato a usare prima del vba.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "VBA e vlookup":


Chi c’è in linea

Visitano il forum: alfrimpa, enrico43 e 4 ospiti