2016-05-23 5 views
1

Ich versuche, Tabellen aus Excel-Arbeitsmappen zu röhrenbegrenzten TXT-Dateien zu exportieren, die auf die gleiche Weise wie das entsprechende Blatt benannt sind. Das Problem ist, dass ich meine Makros nicht dazu bringen kann, die verschiedenen Blätter in einer Arbeitsmappe zu durchlaufen, um alle nicht leeren Zellen in eine TXT-Datei zu exportieren. Unten ist mein Code:Wie wird der Zellenbereich ausgewählt, von der ersten nicht-schwarzen bis zur letzten nicht-leeren Zelle (VBA)?

Sub TableExtract() 

Dim myFile As String, WS_Count As Integer, x As Integer, rng As Range, cellValue As Variant, i As Integer, j As Integer 

WS_Count = ActiveWorkbook.Worksheets.Count 
For x = 1 To WS_Count 

    myFile = "C:\Users\mohamednuri.beitelma\Desktop\" & ActiveSheet.Name & ".txt" 

    Set rng = Sheets(x).Range("A1").CurrentRegion 
    Open myFile For Output As #1 

    For i = 1 To rng.Rows.Count 
     For j = 1 To rng.Columns.Count 

      cellValue = rng.Cells(i, j).Value 

      If j = rng.Columns.Count Then 
       Print #1, cellValue 
      Else 
       Print #1, cellValue & "|", 
      End If 

      Next j 
     Next i 
    Close #1 
Next x 

End Sub 

Dieser Code gibt einen Fehler zurück. Irgendeine Idee, wie ich den Inhalt im Bereich zwischen der ersten und letzten nicht leeren Zelle auswählen und exportieren kann?

+0

Können Sie den Fehler anzeigen, den Sie erhalten? –

Antwort

0

die aktuelle Region Eigenschaft verwenden:

Set rng = Range("A1").CurrentRegion 

Dies ist der equivelant der Auswahl A1 und drückt Ctrl +A


Ihr Fehler verursacht wird, weil Sie die Zuordnung eine Zeilennummer und eine Spaltennummer für die Methode Range, in der Sie eine Adresse oder eine Start-/Endzelle haben sollten:

'// lets assume row = 5 
row = Range("A" & Rows.Count).End(xlUp).row 

'// lets assume col = 10 
col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column 

'// this will produce Range(5, 10) <~~ invalid syntax 
Range(row, col).Select 

'// consider instead: 
Set rng = Range(Cells(1, 1), Cells(row, col)) 
'// or use the .CurrentRegion property as mentioned above if there are no gaps in your data. 
+0

Das funktionierte, aber aus irgendeinem Grund durchläuft es nicht die Blätter. Es exportiert nur das, auf dem ich gerade bin. Ich habe den obigen Code so geändert, dass er die aktuelle Regionseigenschaft widerspiegelt. Irgendwelche Ideen? –

+1

Sie müssen den Bereich mit einem Blattobjekt qualifizieren, ansonsten wird standardmäßig das 'AcitveSheet' verwendet. Anstelle von 'Set rng = Range (" A1 "). CurrentRegion' verwende 'Set rng = Sheets (x) .Range (" A1 "). CurrentRegion' –

+0

Ich habe das gemacht, aber die einzige Ausgabe, die ich bekomme, ist die für die erstes Blatt. Ich habe grundsätzlich eine Tabelle in Blatt 1, und eine andere in Blatt 2. Ich möchte jedes in einer separaten TXT-Datei exportieren, aber derzeit kann ich nur eine (die, die ich gerade bin) bekommen. –

Verwandte Themen