Formatierter Text (.prn) ist in Excel auf 240 Zeichen pro Zeile beschränkt

Symptome

Wenn Sie in Microsoft Excel ein Arbeitsblatt als Datei mit formatiertem Text (durch Leerzeichen getrennt) (.prn) speichern, werden alle Zeichen, die über das zweihundertzigste Zeichen hinausgehen, in die nächste Zeile umschlossen.

Hinweis

Wenn mehrere Zeilen auf demselben Blatt Text mehr als 240 Zeichen enthalten, beginnt der Text mit dem Umbruch an der Zeile nach der letzten Zeile, die Text enthält.

Betrachten Sie beispielsweise das folgende Blatt:

Cell Anzahl der Zeichen
A1 40
A2 255
A3 10
A4 21
A5 2
A6 52
A7 255
A8 5
A9 3
A20 13

Die resultierende formatierte Textdatei enthält Zeilen mit der folgenden Anzahl von Zeichen:

Zeilennummer Characters
1 40
2 240
3 10
4 21
5 2
6 52
7 240
8 5
9 3
10-19 0
20 13
21 0
22 15
23-26 0
27 15

Nach der letzten Zeile (in diesem Beispiel Zeile 20) beginnt die Zeilennummerierung bei 1 für die Zeilen, die umschlossen werden. Tatsächlich entspricht Zeile 21 zeile 1, Zeile 22 entspricht Zeile 2 usw.

Ursache

Dieses Verhalten tritt auf, weil formatierte Textdateien (Durch Leerzeichen getrennt) (.prn) standardmäßig auf 240 Zeichen pro Zeile beschränkt sind.

Problemumgehung

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionsfähigkeit sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Microsoft Support-Spezialisten können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. Verwenden Sie ein Makro ähnlich dem folgenden Beispielmakro, um eine Textdatei mit Leerzeichentrennzeichen zu erstellen, die die Beschränkung auf 240 Zeichen pro Zeile überschreitet.

Hinweis

Bevor Sie dieses Makro ausführen, gehen Sie wie folgt vor:

  • Wählen Sie die Zellen aus, die in die Textdatei eingeschlossen werden sollen.
  • Stellen Sie sicher, dass die Spaltenbreiten breit genug sind, um die größte Zeichenfolge in jeder Spalte anzuzeigen. Die maximale Spaltenbreite für eine einzelne Excel-Spalte beträgt 255 Zeichen, wenn sie mit einer Schriftart mit fester Breite formatiert ist.
  • Verwenden Sie die Menübefehle Formatvorlage, um das Arbeitsblatt so zu formatieren, dass es eine Schriftart mit fester Breite verwendet. Courier ist beispielsweise eine Schriftart mit fester Breite.

Der folgende Beispielcode kann geändert werden, um Daten zu exportieren, die mit anderen Zeichen als einem Leerzeichen getrennt sind. Sie müssen den zu exportierenden Datenbereich auswählen, bevor Sie dieses Beispielmakro ausführen.

Sub ExportText()

Dim delimiter As String
   Dim quotes As Integer
   Dim Returned As String

       delimiter = " "

       quotes = MsgBox("Surround Cell Information with Quotes?", vbYesNo)

' Call the WriteFile function passing the delimiter and quotes options.
      Returned = WriteFile(delimiter, quotes)

' Print a message box indicating if the process was completed.
      Select Case Returned
         Case "Canceled"
            MsgBox "The export operation was canceled."
         Case "Exported"
            MsgBox "The information was exported."
      End Select

End Sub

'------------------------------------------------------------

Function WriteFile(delimiter As String, quotes As Integer) As String

  ' Dimension variables to be used in this function.
   Dim CurFile As String
   Dim SaveFileName
   Dim CellText As String
   Dim RowNum As Integer
   Dim ColNum As Integer
   Dim FNum As Integer
   Dim TotalRows As Double
   Dim TotalCols As Double

   ' Show Save As dialog box with the .TXT file name as the default.
   ' Test to see what kind of system this macro is being run on.
   If Left(Application.OperatingSystem, 3) = "Win" Then
      SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "Text Delimited (*.txt), *.txt", , "Text Delimited Exporter")
   Else
       SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "TEXT", , "Text Delimited Exporter")
   End If

   ' Check to see if Cancel was clicked.
      If SaveFileName = False Then
         WriteFile = "Canceled"
         Exit Function
      End If
   ' Obtain the next free file number.
      FNum = FreeFile()

   ' Open the selected file name for data output.
      Open SaveFileName For Output As #FNum

   ' Store the total number of rows and columns to variables.
      TotalRows = Selection.Rows.Count
      TotalCols = Selection.Columns.Count

   ' Loop through every cell, from left to right and top to bottom.
      For RowNum = 1 To TotalRows
         For ColNum = 1 To TotalCols
            With Selection.Cells(RowNum, ColNum)
            Dim ColWidth as Integer
            ColWidth=Application.RoundUp(.ColumnWidth, 0)
            ' Store the current cells contents to a variable.
            Select Case .HorizontalAlignment
               Case xlRight
                  CellText = Space(Abs(ColWidth - Len(.Text))) & .Text
               Case xlCenter
                  CellText = Space(Abs(ColWidth - Len(.Text))/2) & .Text & _
                             Space(Abs(ColWidth - Len(.Text))/2)
               Case Else
                  CellText = .Text & Space(Abs(ColWidth - Len(.Text)))
            End Select
            End With
   ' Write the contents to the file.
   ' With or without quotation marks around the cell information.
            Select Case quotes
               Case vbYes
                  CellText = Chr(34) & CellText & Chr(34) & delimiter
               Case vbNo
                  CellText = CellText & delimiter
            End Select
            Print #FNum, CellText;

   ' Update the status bar with the progress.
            Application.StatusBar = Format((((RowNum - 1) * TotalCols) _
               + ColNum) / (TotalRows * TotalCols), "0%") & " Completed."

   ' Loop to the next column.
         Next ColNum
   ' Add a linefeed character at the end of each row.
         If RowNum <> TotalRows Then Print #FNum, ""
   ' Loop to the next row.
      Next RowNum

   ' Close the .prn file.
      Close #FNum

   ' Reset the status bar.
      Application.StatusBar = False
      WriteFile = "Exported"
   End Function

Hinweis

Die Ausgabedatei, die von dieser Routine erstellt wird, unterscheidet sich per Definition von einer Formatierten Text(*.prn)-Datei. Definitionsgemäß darf die formatierte Textdatei nicht mehr als 240 Zeichen pro Zeile enthalten. Darüber hinaus enthält die formatierte Textdatei auch Informationen zur Druckerschriftart. In diesem Beispielmakro ist dies nicht der Fall. Diese Lösung wurde entwickelt, um Flexibilität beim Exportieren in Textdateien zu bieten.