2016-03-22 5 views
0

zurückgegeben Ich bekomme Laufzeitfehler 91: Objektvariable oder mit Blockvariable nicht festgelegt.Zeilennummer aus Cells.Find-Methode auf einer anderen Arbeitsmappe

Ich muss die Zeilennummer eines Strings, nach dem ich suche, in einer anderen Arbeitsmappe zurückgeben und 6 Spalten entfernt von dem Namen, den ich suche. Die Namen haben leichte Variationen in den Strings, weshalb ich es vorzog, Cells.Find im Gegensatz zu vlookup zu verwenden.

Ich habe versucht, den Bereich, in dem ich suche, als öffentlichen Bereich ohne Erfolg einzustellen. Beide Arbeitsmappen sind geöffnet, aber es scheint, als ob die Methode Cells.Find nur funktioniert, wenn die Arbeitsmappe mit dem Bereich, in dem ich suche, aktiv ist.

FYI, listrange ist der Bereich der Namen auf der aktiven Arbeitsmappe. clientlist ist ein benannter Bereich in der anderen Arbeitsmappe, in der ich suche (offen, aber nicht aktiv). ist die deklarierte Version dieses benannten Bereichs.

Hier ist der Code-Schnipsel:

Public clientlist2 As Range 

Sub sortout() 

    Dim wkb As Workbook 
    Dim clientwks As Worksheet 
    Dim listrange As Range 

    Set wkb = Workbooks("workbook.xlsm") 
    Set clientwks = wkb.Sheets("Sheet1") 
    Set clientlist2 = clientwks.Range("clientlist") 
    Set listrange = Range("A6", Range("A6").End(xlDown)) 

    For Each a In listrange 

     a.Offset(0, 6).value = clientlist2.Cells.Find(a).Row 

    Next a 

End Sub 
+0

'Set Listrange = Range ("A6", Range ("A6"). End (xlDown))' Was Blatt, dass aus sein sollte? Sie haben für 'clientwks' und' clientlist2' geklärt, aber nicht für diesen. Stellen Sie sicher, dass Sie das Arbeitsblatt vor beiden Verwendungen von 'Range()' setzen. Auch welche Zeile löst Ihren Fehler aus? – BruceWayne

+0

listrange wird in sheet1 einer temporären Arbeitsmappe geöffnet, die von einem anderen Programm generiert wird. Der Fehler wird in der For-Schleife in dieser Zeile ausgelöst: a.Offset (0, 6) .value = clientlist2.Cells.Find (a) .Row Ich werde es jetzt versuchen, danke für die schnelle Antwort! – AssemblyRequired

+0

Danke Bruce, aber ich bekomme immer noch den Fehler in der gleichen Zeile. – AssemblyRequired

Antwort

0

Ich würde empfehlen, den Betrieb innerhalb der for-Anweisung in zwei Schritten zu tun, um Fehler zu vermeiden, und es leichter zu beheben.

Wenn ich eine Zelle finden und dann etwas (oder eine Eigenschaft) daraus kopieren würde, würde ich zuerst versuchen, es auf eine Variable zu setzen, und dann überprüfen, was ich davon bekommen habe, bevor ich es versuche alles weitere damit.

In Ihrem Fall;

Dim foundValue As Range 
For Each a In listrange 
    Set foundValue = clientlist2.Cells.Find(a) 
    If Not foundValue Is Nothing Then 
    a.Offset(0, 6).Value = foundValue.Row 
    End If 
Next a 

Dies macht es auch leichter zu beheben, wie Sie prüfen können, welche Werte Ihre verschiedenen Variablen bei jedem Schritt des Weges haben, zum Beispiel durch Verwendung von Debug.Print oder Nachrichtenfelder.

Eine weitere gute Idee ist Option Explicit an der Spitze Ihres Moduls hinzuzufügen. Dies macht es notwendig, dass Sie alle Ihre Variablen definieren (dimmen) und versehentliche Rechtschreibfehler in der Mitte Ihres Codes vermeiden.

+0

Danke, Eirik, das hat geholfen, den Fehler zu stoppen, aber es hat nur an einem Namen funktioniert, der genau übereinstimmt. Die anderen Namen haben Zeichen, die nicht in den clientlist2-Strings gefunden werden. Ich habe versucht, mit "*" & a & "*" zu umgehen, aber es funktioniert nicht. – AssemblyRequired

+0

Hilft es, mehr Argumente für [Find'] bereitzustellen (https://msdn.microsoft.com/en-us/library/office/ff839746.aspx?f=255&MSPPError=-2147217396)? Z.B.Einstellung 'Lookat: = xlPart'? Es ist ein bisschen schwierig zu wissen, was den Fund zum Scheitern bringt, ohne mehr darüber zu wissen, welche Strings Sie in die Funktion einfügen. Vielleicht könnten Sie Ihrer Frage ein paar Beispiele hinzufügen? @ user6100466 – eirikdaude

+0

Ich habe Formatierungsregeln hinzugefügt, die es einfacher machen, dass der Fund funktioniert. Hier ist ein Beispiel von einem, das nicht funktioniert: "Something Finance LTD" und in der anderen Arbeitsmappe ist es nur als "Something" aufgeführt. Es gibt viele Namen wie diese, die keine Daten ziehen. – AssemblyRequired

-2

Ich denke, dass das Problem auftritt, wenn die Arbeitsmappe deaktiviert ist, also aktivieren Sie es vor der Methode suchen.

Workbooks ("BOOK4.XLS"). Aktivieren Sie

Verwandte Themen