2016-05-19 17 views
1

Ich versuche zu:
- Öffnen eine Datei "perpetual.xlsx"
- Filter eine Spalte auf Kriterien
- Summe einer anderen Spalte nehmen und es in meiner ursprünglichen Datei in einem anderen eingeben Säule. Meine ursprüngliche Datei ist wie im Bild unten gezeigt.
- Setzen Sie die Schleife von Schritt 2 bis zur letzten Zeile der ursprünglichen Datei fort.Summe der Spalte nach den Autofilter vba

enter image description here Hier ist mein Code:

Private Sub CommandButton1_Click() 
Dim RowLast As Long 
Dim tempLast As Long 
tempLast = ThisWorkbook.Sheets("combine BOMs").Cells(Rows.Count, "B").End(xlUp).Row 
Dim perporig As Workbook 

'ThisWorkbook.Sheets("combine BOMs").Cells(1, 9).Value = here 
For i = 5 To tempLast 
    Set perporig = Workbooks.Open("\\Etnfps02\vol1\DATA\Inventory\Daily tracking\perpetual.xlsx", UpdateLinks:=False, ReadOnly:=True) 
    With perporig.Sheets("perpetual") 
     .AutoFilterMode = False 
     RowLast = .Cells(Rows.Count, "A").End(xlUp).Row 
     .Range("A3:J" & RowLast).AutoFilter field:=1, criteria:=Range("B" & i).Value 
     ThisWorkbook.Sheets("combine BOMs").Cells(i, 5).Value = Application.WorksheetFunction.Sum(Columns("H:H")) 
     .AutoFilterMode = False 
    End With 
    perporig.Close savechanges:=False 
    ThisWorkbook.Sheets("myperpetual").Activate 
Next i 
Cells(1, 9).Value = here 
End Sub 

Der Code läuft nur bis Zeile 9, d.h .: Set perporig = .... und nach, dass es aus irgendeinem Grund stehen bleibt. Die Datei "perpetual.xlsx" öffnet sich und der Code stoppt. Wenn ich das Apostroph in Zeile 6 entferne, scheint der Code überhaupt nicht zu laufen.

BEARBEITET CODE: Vielen Dank für Ihre Vorschläge. Ich wusste nicht, wo ich meinen Code platzieren sollte, also hier ist es. Auch hier läuft der Code nur bis Zeile 7, also: Set perporig = .... und danach stoppt er aus irgendeinem Grund. Die Datei "perpetual.xlsx" öffnet sich und der Code stoppt. Wenn ich das Apostroph in Zeile 6 entferne, scheint der Code überhaupt nicht zu laufen. Bitte helfen Sie.

Private Sub CommandButton1_Click() 
Dim RowLast As Long 
Dim tempLast As Long 
tempLast = ThisWorkbook.Sheets("combine BOMs").Cells(Rows.Count, "B").End(xlUp).Row 
Dim perporig As Workbook 
'ThisWorkbook.Sheets("combine BOMs").Cells(1, 9).Value = "here" 
Set perporig = Workbooks.Open("\\Etnfps02\vol1\DATA\Inventory\Daily tracking\perpetual.xlsx", UpdateLinks:=False, ReadOnly:=True) 
For i = 5 To tempLast 
    With perporig.Sheets("perpetual") 
     .AutoFilterMode = False 
     RowLast = .Cells(Rows.Count, "A").End(xlUp).Row 
     .Range("A3:J" & RowLast).AutoFilter field:=1, criteria:=ThisWorkbook.Sheets("combine BOMs").Cells(i, 2).Value 
     ThisWorkbook.Sheets("combine BOMs").Cells(i, 5).Value = Application.WorksheetFunction.Sum(Range("H:H").SpecialCells(xlCellTypeVisible)) 
     .AutoFilterMode = False 
    End With 
Next 
perporig.Close savechanges:=False 
ThisWorkbook.Sheets("combine BOMs").Activate 
Cells(1, 9).Value = "here" 
End Sub 
+1

Sie öffnen die "Perpetual.xlsx" für jede Zeile, das ist übermäßig schwere Sachen. Öffnen Sie die Anwendung in einem Objekt und schließt es außerhalb der Schleife –

+0

Entfernen Sie "Next i" am Ende der Schleife, behalten Sie nur die "Next" ohne die "I" Zähler –

+1

Auch das ist nicht Ihr Problem, aber es wird sein, Sum ignoriert, ob die Zeile durch den Filter ausgeblendet wird oder nicht und fügt sie in die Ausgabe ein. Sie müssen in die Funktion Zwischensumme() schauen. Oder wiederhole dich selbst durch die Zeilen und prüfe ob es versteckt ist oder nicht und behalte deine eigene Summe. –

Antwort

1

Der Grund, warum die Linie 7 nicht läuft, ist, weil Sie nicht definiert haben, was "hier" ist. Wenn Sie Text in diese Zelle schreiben wollen, sollten Sie die Zeile mit = "here" beenden, damit dieser Wert eine Zeichenkette ist.

Wie der andere Kommentator sagt. Sie sollten die Arbeitsmappe nicht innerhalb einer Schleife öffnen. Öffnen Sie zuerst die Arbeitsmappe und führen Sie dann die Schleifenoperationen mit geöffnetem Buch (perporig) durch.

+0

Nur realisiert, ich hatte eine andere Datei geöffnet das hatte seinen eigenen Code und intervenierte wahrscheinlich. Ich habe es geschlossen und nicht in die for-Schleife, aber es gibt einen Fehler in Zeile 12 (Autofilter-Linie). Ich bekomme "anwendungsdefinierte oder objektdefinierte Fehler". –

0

Endlich, es war ein einfacher Fehler, zusätzlich zu den Vorschlägen aller anderen, hatte ich folgende Kriterien: = anstelle von criteria1: =
Dummer Fehler.

Verwandte Themen