Vlookup nella Macro di Excel

Ho creato un modulo in excel che accetta input da parte degli utenti e consente di risparmiare la stessa nel Foglio2. Ho una combobox nome Account da cui gli utenti potranno selezionare il nome dell’account. Tuttavia, ogni account avrà un Id univoco associato con esso. Io non voglio esporre questo Id per gli utenti finali, ma allo stesso tempo voglio l’Id corrispondente al Conto selezionato popolato in foglio2.

Sto cercando di fare un Vlookup per la ricerca per Id dell’Account selezionato.

Ho impostato i valori di Conto in Foglio3.

Esempio: 
Colonna A ColumnB 
Account1 Id12345 
Account2 Id23456 
Account3 Id34567 

Il mio codice nella macro di excel sembra qualcosa di simile al di sotto.

Private Sub Save_Click()

Dim RowCount As Long
Dim myValue as String

RowCount = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count
With Worksheets("Sheet2").Range("A1")
 .Offset(RowCount, 0).Value = Me.Account.Value
myValue = WorksheetFunction.VLookup(Range("A2"), Range("Sheet3!G1:G14"), 2, False)

Io non sono sicuro perché non funziona. Qualsiasi suggerimento sarà molto apprezzato.

Grazie,

  • Cambiare Range("Sheet3!G1:G14") per Sheet3.Range("G1:G14"), o Worksheets("Sheet3").Range("G1:G14") o qualcosa del genere.
  • Ho cambiato Foglio3.Range(“G1:G14”) si genera un errore che indica Errore di Runtime: 424; l’Oggetto richiesto.
  • Questo perché si riferisce ad una sola colonna qui quando hai voglia di tornare a seconda colonna. G1:G14 è solo una colonna, ma tu sei il terzo argomento è impostato per 2. Che sarà sicuramente generare un errore. Cambiare la vostra gamma di G1:H14 o cambiare la vostra terzo argomento 1.
  • Ho cambiato il codice di myValue = WorksheetFunction.VLookup(Range(“A2”), Sheeet3.Range(“G1:H14”), 2, False), stesso errore.
  • buon punto :).
  • Qual è l’errore?
  • Grazie, @DougGlancy. La riga evidenziata quando l’errore è generato e che cosa è l’errore?
  • L’errore è lo stesso Errore di Runtime: 424; l’Oggetto richiesto. è la stessa vacche che viene evidenziato “myValue = WorksheetFunction.VLookup(Range(“A2”), Sheeet3.Range(“G1:H14″), 2, False)”
  • inoltre, si potrebbe desiderare di aggiungere un gestore di errore sul Vlookup. Se non riesce in qualche modo a individuare ciò che la tua ricerca per (ad esempio, restituisce #N/A) genererà un errore. Inoltre non End With?
  • Un buon punto. Tuttavia, 1004 è abbastanza cordiale, a questo punto, per gestire, harhar. 424 è una specie di dolore per individuare, a volte.
  • Non ha veramente bisogno il With parte come le sue azioni sul Sheet2 sono minime nel migliore dei casi, a meno che che sarà lui a qualificare la sua variabili di meglio. Credo che questo ti risulta qualche esercizio delle migliori pratiche. 😀

 

3 Replies
  1. 0

    Provare questo:

    Private Sub Save_Click()
    
        Dim RowCount As Long
        Dim myValue As Variant
        Dim Sh2 As Worksheet, Sh2 As Worksheet
        Dim RefRange As Range
    
        With ThisWorkbook
            Set Sh2 = .Sheets("Sheet2")
            Set Sh3 = .Sheets("Sheet3")
        End With
    
        RowCount = Sh2.Range("A1").CurrentRegion.Rows.Count
        Set RefRange = Sh3.Range("G1:H14") '--Change as necessary.
    
        Sh2.Range("A1").Offset(RowCount, 0).Value = Me.Account.Value
        On Error GoTo myValueErrHandle
        myValue = WorksheetFunction.VLookup(Sh2.Range("A2").Value, RefRange, 2, False)
        '--More code, etc etc.
    
    myValueErrHandle:
        If Err.Number = 1004 Then
            MsgBox "No match using VLOOKUP."
        End If
        Exit Sub
    
    End Sub

    Per quanto possibile, qualificare tutto il possibile e utilizzare sintetica ma significativa codice. Non utilizzare Range("A2") se si desidera che ciò che sta dentro. Utilizzare .Value come questo è la migliore pratica. Per quanto posso vedere, non c’è nulla di sbagliato. Ho anche aggiunto un Error 1004 gestione per nessuna corrispondenza. Infine, nota che ho cambiato myValue per un Variant, solo per coprire le basi.

    Facci sapere se funziona.

    • Grazie BK201, ho provato il tuo codice. Ora lancia un popup come “Nessuna Corrispondenza con VLookup”. il che suggerisce che per qualche motivo non è in grado di trovare l’Id corrispondente per l’account selezionato.
    • Ma c’è supposto per essere una partita? Perché se non c’è, quindi penso che abbiamo il diritto di codice, non abbiamo? 🙂
  2. 0

    provare questo? : Mi dispiace troppo lungo per mettere in commento:

    With Worksheets("Sheet2")
        .Range("A1").Offset(RowCount, 0).Value = Me.Account.Value
        myValue = WorksheetFunction.VLookup(.Range("A2"), Sheeet3.Range("G1:H14"), 2, False)" 
    End With

    Solo forse, quindi provare.

  3. 0
    Sub Lookup()
    Dim Emp As String
    Dim Lookup_Range As Range
    Dim Age As Single
    Emp = "Jitu"
    Set Lookup_Range = Range("A1:B8")
    Age = Application.WorksheetFunction.VLookup(Emp, Lookup_Range, 2, False)
    
    MsgBox "Age is : $ " & Age
    End Sub

    Tabella:
    Emp Età
    bibhash 22
    rahul 22
    abhisek 23
    jitu 21
    sujit 24
    tinku 25
    rudra 26

Lascia un commento