2017-04-20 3 views
0

Ich habe eine Arbeitsmappe (nennen wir es Arbeitsmappe A):vba Wert von geschlossener Arbeitsmappe erhalten?

enter image description here

Wenn Zelle C5 Änderungen, die ich möchte, dass meine geschlossenen Arbeitsmappe (2017 Planner) und nach unten schauen Spalte K. Wenn der Wert in Spalte K suchen in Planer passt mit dem in Zelle C5 Ich möchte den Wert in einer Nachricht anzeigen.

Im Moment bin ich immer eine 0

Bitte kann mir jemand zeigen, wo ich falsch gehe?

-Code (von this answer genommen):

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim wbPath As String, wbName As String 
    Dim wsName As String, cellRef As String 
    Dim Ret As String 


    If Not Intersect(Target, Target.Worksheet.Range("C5")) Is Nothing Then 

    'wbPath = "C:\Documents and Settings\Siddharth Rout\Desktop\" 
    wbPath = "G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\" 

    wbName = "2017 Planner.xlsx" 
    wsName = "Planner" 
    cellRef = "K:K" 

    Ret = "'" & wbPath & "[" & wbName & "]" & _ 
      wsName & "'!" & Range(cellRef).Address(True, True, -4150) 

    MsgBox ExecuteExcel4Macro(Ret) 

    End If 
End Sub 

EDIT:

Dank @MacroMarc für seine Hilfe bei der Code so weit. Ich habe immer noch einige Probleme mit dem Code.

Meine Nummer in der Zelle C5 in Arbeitsmappe A 113545.

Diese Zahl in Spalte K in Zeile 4 in meinem Planer Arbeitsmappe vorhanden ist.

Das Nachrichtenfeld, das ich bekomme, sagt mir, dass es C11 sucht. Aber ich bin mir nicht sicher warum? Es sollte in Spalte K suchen: K? Sollte es nicht?

Es wird auch Value nicht gefunden.

Ich brauche das Meldungsfeld, um mir die Zelladresse des passenden Wertes in K4 zu zeigen.

enter image description here

+0

nicht direkt, aber man konnte eine Verschachtelungsebene durch den Zustand invertiert und tun 'Beenden Sub' entfernen zu bail out, anstatt den ganzen Körper in einen 'If ... End If'-Block zu wickeln. –

+0

Zeigt 'MsgBox Dir (wbPath & wbName)' nichts an? –

+0

Sie versuchen, den Wert einer ganzen Spalte zu erhalten. Vorausgesetzt, die Datei existiert, wird Sie das wahrscheinlich nicht bekommen, was Sie erwarten. 'Ret' wird einen Wert von einer Zelle in diesem Bereich enthalten. Wenn Sie ** einen Wert ** suchen möchten, müssen Sie eine * Lookup * -Funktion verwenden. –

Antwort

0

-Sie könnte eine Funktion in der Ret String wie schreiben:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Me.Range("C5")) Is Nothing Then Exit Sub 

    Dim wbPath As String, wbName As String, wsName As String 
    Dim Ret As String, cellRef As String, externalRange As String 
    wbPath = "G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017" 
    wbName = "2017 Planner.xlsx" 
    wsName = "Planner" 
    cellRef = "K:K" 

    externalRange = "'" & wbPath & "\[" & wbName & "]" & _ 
      wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1) 

    Ret = "VLOOKUP(""" & Target.Value & """," & _ 
      externalRange & ",1,FALSE)" 

    Msgbox Ret 
    On Error GoTo errHandler 'Should handle any error from External Macro... 
    MsgBox ExecuteExcel4Macro(Ret) 

    Exit Sub 
errHandler: 
    MsgBox "Value not found!!" 

End Sub 
+0

@Marcromarc danke für den Vorschlag, in meinem Szenario muss ich nur Spalte K: K verwenden. Also habe ich A: B zu K geändert: K. Dies sagt mir, dass kein Ergebnis gefunden wurde, obwohl der Wert in meiner Planerarbeitsmappe ist. – user7415328

+0

Ich habe etwas bearbeitet. Wenn Sie meine Funktion wie oben beschrieben ausführen, was bekommen Sie? Überprüfen Sie Schrägstriche etc ... Ich dachte, dass dies ein einfaches Debugging wäre ... – MacroMarc

+0

@MarcroMarc siehe Edit. Es funktioniert immer noch nicht richtig – user7415328

Verwandte Themen