Zum Inhalt springen

„Wikipedia:Technik/Text/Basic/Excel2Wiki“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
K PerfektesChaos verschob Seite Wikipedia:Textverarbeitung/Excel2Wiki nach Wikipedia:Technik/Text/Basic/Excel2Wiki: Reorganisation
Anpassung
Zeile 1: Zeile 1:
{{Hilfreiches|* [[Wikipedia:Textverarbeitung/EXCEL-Tabellenumwandlung|EXCEL-Tabellenumwandlung]]
{{Hilfreiches|
* [[Wikipedia:Textverarbeitung/EXCEL-Tabellenumwandlung|EXCEL-Tabellenumwandlung]]
|Ähnliche Programme
|Ähnliche Programme
}}
}}
[[VisualBasic]]-Code für [[Mirosoft Excel]]. Damit kann jede Excel-Tabelle sofort ohne Umwege in eine Textdatei geschrieben werden, welche dann im Wiki einfach nur eingefügt werden muss.
==Beschreibung==

Das ist eine Vorversion eines VBA-Makro für Excel. Damit kann jede Excel-Tabelle sofort ohne Umwege in eine Textdatei geschrieben werden, welche dann im Wiki einfach nur eingefügt werden muss. Das Makro funktioniert nur bis Excel 2003. Exel 2007 und höher werden nicht unterstützt.<br/>
Vorversion; funktioniert nur bis Excel 2003. Exel 2007 und höher werden nicht unterstützt.


'''Funktionsumfang'''
'''Funktionsumfang'''
*...
* ...
*Berücksichtigung von verbundenen Zellen
* Berücksichtigung von verbundenen Zellen
*Möglichkeit der Drehung einer Tabelle und der Zeilenumkehr. - Auch möglich durch: BEARBEITEN > INHALT EINFÜGEN (Option TRANSPONIEREN), sofern diese Funktion zur Verfügung steht.
* Möglichkeit der Drehung einer Tabelle und der Zeilenumkehr. Auch möglich durch: BEARBEITEN > INHALT EINFÜGEN (Option TRANSPONIEREN), sofern diese Funktion zur Verfügung steht.


== Anleitung zum VBA-Makro ==
== Anleitung zum VBA-Makro ==
''Im Prinzip:'' Einfach in einem Modul im VBA-Editor einfügen und starten.<br/>
''Im Prinzip:'' Einfach in einem Modul im VBA-Editor einfügen und starten.<br />
Die folgende Anleitung kann für andere Excel-Versionen leicht abweichen:
Die folgende Anleitung kann für andere Excel-Versionen leicht abweichen:
# Mit Excel die Datei öffnen, die umgewandelt werden soll
# Mit Excel die Datei öffnen, die umgewandelt werden soll
# Den VBA-Editor öffnen (Menü: Extras/Makro/Visual-Basic-Editor) oder 'Alt-F11'
# Den VBA-Editor öffnen (Menü: Extras/Makro/Visual-Basic-Editor) oder 'Alt-F11'
# In der linken Spalte sind die geöffneten Dokumente angezeigt
# In der linken Spalte sind die geöffneten Dokumente angezeigt
# Dort auf 'VBA-Projekt' (mit dem Namen des aktuellen Dokuments, also nicht bei Eurotools!) mit der rechten Maustaste hinklicken
# Dort auf 'VBA-Projekt’ (mit dem Namen des aktuellen Dokuments, also nicht bei Eurotools!) mit der rechten Maustaste hinklicken
# Im Kontextmenü Einfügen/Modul wählen
# Im Kontextmenü Einfügen/Modul wählen
# Im rechten großen Fenster erscheint eine leere weiße Seite (evtl. steht oben ''Option Explicit'')
# Im rechten großen Fenster erscheint eine leere weiße Seite (evtl. steht oben ''Option Explicit'')
Zeile 24: Zeile 24:


Könnte mal jemand hiereinschreiben, wie man das Makro in Excel 2003 ausführt?
Könnte mal jemand hiereinschreiben, wie man das Makro in Excel 2003 ausführt?
--> ist ein h&auml;sslicher Hack, aber funktioniert auf die Schnelle:
--> ist ein hässlicher Hack, aber funktioniert auf die Schnelle:
Ersetze
Ersetze
<syntaxhighlight lang="VB">
<syntaxhighlight lang="VB">
Zeile 35: Zeile 35:
</syntaxhighlight>
</syntaxhighlight>


und f&uuml;ge vor <code>StartZelle = InputBox("Ab ...</code> folgendes ein:
und füge vor <code>StartZelle = InputBox("Ab ...</code> folgendes ein:
<syntaxhighlight lang="VB">
<syntaxhighlight lang="VB">
Blatt = InputBox("Welches Tabellenblatt soll umgewandelt werden ?", _
Blatt = InputBox("Welches Tabellenblatt soll umgewandelt werden ?", _
Zeile 41: Zeile 41:
</syntaxhighlight>
</syntaxhighlight>


Danach l&auml;sst sich das Makro mit Alt-F8 aufrufen.
Danach lässt sich das Makro mit Alt-F8 aufrufen.


== VBA-Makro zum Kopieren ==
== VBA-Makro zum Kopieren ==
Zeile 50: Zeile 50:
'Zweitens die Drehung einer Tabelle Zeilen in Spalten und umgekehrt (Zelle A1 bleibt Zelle A1)
'Zweitens die Drehung einer Tabelle Zeilen in Spalten und umgekehrt (Zelle A1 bleibt Zelle A1)
'Drittens die Reihenfolge der Zeilen umzudrehen (erste Zeile wird letzte)
'Drittens die Reihenfolge der Zeilen umzudrehen (erste Zeile wird letzte)

'Schritte zum Einbinden am Beginn der Unterprogramme
'Schritte zum Einbinden am Beginn der Unterprogramme
Const maxa = 100 'maximale Zahl der Tabellen
Const maxa = 100 'maximale Zahl der Tabellen
Global Numm As Integer
Global Numm As Integer
Global switch, schon As Integer
Global switch, schon As Integer


Sub Excel2Wiki(Blatt, Kopf As String)
Sub Excel2Wiki(Blatt, Kopf As String)
Dim fHandle, i, j, k, pos, mehr As Integer
Dim fHandle, i, j, k, pos, mehr As Integer
Zeile 65: Zeile 65:
Dim mzeil, mspal, mzahl, mmzeil As Integer
Dim mzeil, mspal, mzahl, mmzeil As Integer
Dim inhalt As Object
Dim inhalt As Object

fHandle = FreeFile()
fHandle = FreeFile()
Formatierungstags = "" 'bisher noch nicht eingebaut
Formatierungstags = "" 'bisher noch nicht eingebaut

'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Ggf. mit Einfügen einen Modul einfügen.
'Ggf. mit Einfügen einen Modul einfügen.
Zeile 96: Zeile 96:
'Die Zahlenwerte müssen angepaßt werden und die Zeile an die entsprechende Stelle kopiert werden
'Die Zahlenwerte müssen angepaßt werden und die Zeile an die entsprechende Stelle kopiert werden
'(entsprechend Felder löschen)
'(entsprechend Felder löschen)

StartZelle = InputBox("Ab welcher Zelle (links oben) soll umgewandelt werden ?", _
StartZelle = InputBox("Ab welcher Zelle (links oben) soll umgewandelt werden ?", _
"Startzeile - Schritt 1 von 4", "A1")
"Startzeile - Schritt 1 von 4", "A1")
Zeile 105: Zeile 105:
Kopf = InputBox("Text Tabellenkopf", _
Kopf = InputBox("Text Tabellenkopf", _
"Kopf - Schritt 3 von 4", Kopf)
"Kopf - Schritt 3 von 4", Kopf)

DateiName = DateiPfad & Blatt & ".txt"
DateiName = DateiPfad & Blatt & ".txt"

StartSpalte = adre(CStr(StartZelle))
StartSpalte = adre(CStr(StartZelle))
StartZeile = Numm
StartZeile = Numm
EndSpalte = adre(CStr(EndZelle))
EndSpalte = adre(CStr(EndZelle))
EndZeile = Numm
EndZeile = Numm

Open DateiName For Output As #fHandle
Open DateiName For Output As #fHandle
ZeilenText = Str(EndSpalte + 1 - StartSpalte)
ZeilenText = Str(EndSpalte + 1 - StartSpalte)
Zeile 120: Zeile 120:
Print #fHandle, "{| {{prettytable-R}}"
Print #fHandle, "{| {{prettytable-R}}"
Print #fHandle, "|+ " & Kopf
Print #fHandle, "|+ " & Kopf

switch = 0
switch = 0
schon = 0
schon = 0
Zeile 126: Zeile 126:
ZeilenText = "|"
ZeilenText = "|"
mehr = 0
mehr = 0

For j = StartSpalte To EndSpalte
For j = StartSpalte To EndSpalte
If mehr = 1 Then ZeilenText = ZeilenText & "||"
If mehr = 1 Then ZeilenText = ZeilenText & "||"
Zeile 133: Zeile 133:
ZellInhalt = Worksheets(Blatt).Cells(i, j)
ZellInhalt = Worksheets(Blatt).Cells(i, j)
If ZellInhalt = Empty Then ZellInhalt = "&nbsp;"
If ZellInhalt = Empty Then ZellInhalt = "&nbsp;"

If Worksheets(Blatt).Cells(i, j).MergeCells = "Wahr" Then
If Worksheets(Blatt).Cells(i, j).MergeCells = "Wahr" Then
mzeil = Worksheets(Blatt).Cells(i, j).MergeArea.Row
mzeil = Worksheets(Blatt).Cells(i, j).MergeArea.Row
Zeile 167: Zeile 167:
ZeilenText = ZeilenText & Formatierungstags & ZellInhalt
ZeilenText = ZeilenText & Formatierungstags & ZellInhalt
End If
End If


If 1 = 2 Then
If 1 = 2 Then
If 1 = 2 Then
If 1 = 2 Then
Zeile 174: Zeile 174:
End If
End If
End If
End If

Next j
Next j

Print #fHandle, ZeilenText
Print #fHandle, ZeilenText
Print #fHandle, "|-"
Print #fHandle, "|-"
Zeile 188: Zeile 188:
End If
End If
Next i
Next i

ZeilenText = Str(EndSpalte + 1 - StartSpalte)
ZeilenText = Str(EndSpalte + 1 - StartSpalte)
Print #fHandle, "|colspan=""" & ZeilenText & """|<small>Anmerkung: </small>"
Print #fHandle, "|colspan=""" & ZeilenText & """|<small>Anmerkung: </small>"
Print #fHandle, "|}"
Print #fHandle, "|}"
Close #fHandle
Close #fHandle

End Sub
End Sub
'
'
Zeile 199: Zeile 199:
Dim Blatt1, nam(maxa), meld, EndZelle As String
Dim Blatt1, nam(maxa), meld, EndZelle As String
Dim spal, hn, i, j, naz(maxa), EndZeile As Integer
Dim spal, hn, i, j, naz(maxa), EndZeile As Integer

'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Ggf. mit Einfügen einen Modul einfügen.
'Ggf. mit Einfügen einen Modul einfügen.
Zeile 223: Zeile 223:
'die Excel-Tabelle gedreht in die neue Tabelle kopiert
'die Excel-Tabelle gedreht in die neue Tabelle kopiert
'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.
'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.

Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-dreh"
Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-dreh"

hn = Worksheets.Count
hn = Worksheets.Count
If hn > maxa - 1 Then
If hn > maxa - 1 Then
Zeile 259: Zeile 259:
Exit Sub
Exit Sub
End If
End If

EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll gedreht werden ?", _
EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll gedreht werden ?", _
"Endzelle: ", "N24")
"Endzelle: ", "N24")

hn = adre(CStr(EndZelle))
hn = adre(CStr(EndZelle))
EndZeile = Numm
EndZeile = Numm

For i = 1 To EndZeile
For i = 1 To EndZeile
For j = 1 To hn
For j = 1 To hn
Zeile 276: Zeile 276:
Dim Blatt1, nam(maxa), meld, EndZelle As String
Dim Blatt1, nam(maxa), meld, EndZelle As String
Dim spal, hn, i, j, EZ, naz(maxa), EndZeile As Integer
Dim spal, hn, i, j, EZ, naz(maxa), EndZeile As Integer

'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
'Ggf. mit Einfügen einen Modul einfügen.
'Ggf. mit Einfügen einen Modul einfügen.
Zeile 300: Zeile 300:
'die Excel-Tabelle gedreht in die neue Tabelle kopiert
'die Excel-Tabelle gedreht in die neue Tabelle kopiert
'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.
'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.

Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-kehr"
Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-kehr"

hn = Worksheets.Count
hn = Worksheets.Count
If hn > maxa - 1 Then
If hn > maxa - 1 Then
Zeile 319: Zeile 319:
naz(i) = 0
naz(i) = 0
Next i
Next i

EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll umgedreht werden ?", _
EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll umgedreht werden ?", _
"Endzelle: ", "N24")
"Endzelle: ", "N24")

For i = 1 To hn
For i = 1 To hn
For j = 1 To hn + 1
For j = 1 To hn + 1
Zeile 340: Zeile 340:
Exit Sub
Exit Sub
End If
End If

hn = adre(CStr(EndZelle))
hn = adre(CStr(EndZelle))
EndZeile = Numm
EndZeile = Numm

EZ = EndZeile
EZ = EndZeile
For i = 1 To EZ
For i = 1 To EZ
Zeile 359: Zeile 359:
'adre: Spaltennummer als Zahl, Numm als Zeilenadresse
'adre: Spaltennummer als Zahl, Numm als Zeilenadresse
On Error GoTo ErrorHandler ' Fehlerbehandlung aktivieren.
On Error GoTo ErrorHandler ' Fehlerbehandlung aktivieren.

Dim meld, spa, spa1, spah, hi As String
Dim meld, spa, spa1, spah, hi As String
Dim hz, i, hh, hl As Integer
Dim hz, i, hh, hl As Integer

spa = Left(h0, 1)
spa = Left(h0, 1)
If IsNumeric(spa) Then
If IsNumeric(spa) Then
Zeile 370: Zeile 370:
End If
End If
hi = Mid(h0, 2)
hi = Mid(h0, 2)

spa1 = Left(hi, 1)
spa1 = Left(hi, 1)
If IsNumeric(spa1) Then
If IsNumeric(spa1) Then
Zeile 391: Zeile 391:
Numm = CInt(hi)
Numm = CInt(hi)
End If
End If

hi = spa & spa1
hi = spa & spa1
If IsNumeric(hi) And (Not IsEmpty(hi)) Then
If IsNumeric(hi) And (Not IsEmpty(hi)) Then
Zeile 418: Zeile 418:
End If
End If
Exit Function
Exit Function

ErrorHandler:
ErrorHandler:
meld = "In Funktion adre"
meld = "In Funktion adre"
Zeile 425: Zeile 425:
i = MsgBox(meld, , "Fehlermeldung")
i = MsgBox(meld, , "Fehlermeldung")
End
End

End Function
End Function

Function wandeln(was As String) As String
Function wandeln(was As String) As String
Dim pos, k As Integer
Dim pos, k As Integer

If (was = " ") Or (was = "") Then was = "&nbsp;"
If (was = " ") Or (was = "") Then was = "&nbsp;"

If IsNumeric(was) Then
If IsNumeric(was) Then
was = Format(was)
was = Format(was)
Zeile 444: Zeile 444:
End If
End If
End If
End If

If switch > 0 Then
If switch > 0 Then
For k = 1 To switch
For k = 1 To switch
Zeile 460: Zeile 460:
schon = switch + 1
schon = switch + 1
End If
End If

If was = "" Then was = "&nbsp;"
If was = "" Then was = "&nbsp;"

wandeln = was
wandeln = was

End Function
End Function
</syntaxhighlight>
</syntaxhighlight>


[[Kategorie:Wikipedia:Technik/Text]]

[[Kategorie:Wikipedia:Hilfsmittel]]
[[Kategorie:Wikipedia:Hilfsmittel]]

Version vom 20. Juli 2013, 21:58 Uhr

VisualBasic-Code für Mirosoft Excel. Damit kann jede Excel-Tabelle sofort ohne Umwege in eine Textdatei geschrieben werden, welche dann im Wiki einfach nur eingefügt werden muss.

Vorversion; funktioniert nur bis Excel 2003. Exel 2007 und höher werden nicht unterstützt.

Funktionsumfang

  • ...
  • Berücksichtigung von verbundenen Zellen
  • Möglichkeit der Drehung einer Tabelle und der Zeilenumkehr. – Auch möglich durch: BEARBEITEN > INHALT EINFÜGEN (Option TRANSPONIEREN), sofern diese Funktion zur Verfügung steht.

Anleitung zum VBA-Makro

Im Prinzip: Einfach in einem Modul im VBA-Editor einfügen und starten.
Die folgende Anleitung kann für andere Excel-Versionen leicht abweichen:

  1. Mit Excel die Datei öffnen, die umgewandelt werden soll
  2. Den VBA-Editor öffnen (Menü: Extras/Makro/Visual-Basic-Editor) oder 'Alt-F11'
  3. In der linken Spalte sind die geöffneten Dokumente angezeigt
  4. Dort auf 'VBA-Projekt’ (mit dem Namen des aktuellen Dokuments, also nicht bei Eurotools!) mit der rechten Maustaste hinklicken
  5. Im Kontextmenü Einfügen/Modul wählen
  6. Im rechten großen Fenster erscheint eine leere weiße Seite (evtl. steht oben Option Explicit)
  7. Den gesamten Quelltext unten kopieren und auf diese leere weisse Seite einfügen
  8. Das Makro ausführen (Die Variablen Startspalte, Startzeile, Endspalte, Endzeile und Dateiname werden automatisch bei jedem Start abgefragt)

Könnte mal jemand hiereinschreiben, wie man das Makro in Excel 2003 ausführt? --> ist ein hässlicher Hack, aber funktioniert auf die Schnelle: Ersetze

Sub Excel2Wiki(Blatt, Kopf As String)

durch

Sub Excel2Wiki()
   Dim Blatt, Kopf As String

und füge vor StartZelle = InputBox("Ab ... folgendes ein:

   Blatt = InputBox("Welches Tabellenblatt soll umgewandelt werden ?", _
                           "Tabellenblatt - Schritt 0 von 4", "Tabelle1")

Danach lässt sich das Makro mit Alt-F8 aufrufen.

VBA-Makro zum Kopieren

 Option Explicit
 'Hier sind 3 Programme:
 'Erstens die Umwandlung Excel-Tabelle in wiki-Format
 'Zweitens die Drehung einer Tabelle Zeilen in Spalten und umgekehrt (Zelle A1 bleibt Zelle A1)
 'Drittens die Reihenfolge der Zeilen umzudrehen (erste Zeile wird letzte)

 'Schritte zum Einbinden am Beginn der Unterprogramme
 Const maxa = 100     'maximale Zahl der Tabellen
 Global Numm As Integer
 Global switch, schon As Integer


 Sub Excel2Wiki(Blatt, Kopf As String)
    Dim fHandle, i, j, k, pos, mehr As Integer
    Dim StartZeile, EndZeile As Integer
    Dim StartSpalte, EndSpalte As Integer
    Dim ZeilenText, ZellInhalt, DateiName, Formatierungstags As String
    Dim StartZelle, EndZelle, DateiPfad, typf, hilf As String
    Dim mzeil, mspal, mzahl, mmzeil As Integer
    Dim inhalt As Object

    fHandle = FreeFile()
    Formatierungstags = "" 'bisher noch nicht eingebaut

    'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
    'Ggf. mit Einfügen einen Modul einfügen.
    'Dieses VBA-Programm in einen Modul kopieren und
    'die nachfolgende Zeile in die Zwischenablage übernehmen:
    '  Call Excel2Wiki(CommandButton1.Parent.Name, CommandButton1.Parent.Name)  'Blattname, Tabellenkopf
    'Danach auf dem Excel-Tabellenblatt im Pull-down-Menü Ansicht den
    'Punkt "Symbolleisten" anklicken und dann "Steuerelement Toolbox" anklicken
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Befehlsschaltfläche" (linke Spalte, 4.Element von oben) anklicken
    'Mit der Maus an die geünschte Stelle gehen und das bei der Mausbewegung
    'entstehende Rechteck auf die
    'gewünschte Größe ziehen und die Maustaste loslassen.
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Code anzeigen" (linke Spalte, 2.Element von oben) anklicken und
    'anschließend in den erscheinenden Code zwischen "Private Sub ..." und "End Sub" die
    'Zeile der Zwischenablage übernehmen (bei der kopierten Zeile erstes "'" löschen.
    'Ggf. diesen Stand schon speichern.
    'Wenn gewünscht Symbolleiste "Steuerelement Toolbox" schließen
    'Anschließend die Zahlen in der Zeile 2 entsprechend Ihrer Tabelle anpassen. Die
    'Bedeutung steht in Zeile 1 in der Reihenfolge (Spaltenbuchstaben in Anführungszeichen einschließen).
    'Beim Drücken der neuen Befehlsschaltfläche wird die Excel-Tabelle im wiki-Format
    'ausgegeben und zwar auf der nachfolgenden Datei - ggf. anpassen.
    'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.
    'Als Hilfsmittel für den Feinschliff sind noch colspan und rowspan
    'als Kommentar angegeben:
    'Die Zahlenwerte müssen angepaßt werden und die Zeile an die entsprechende Stelle kopiert werden
    '(entsprechend Felder löschen)

    StartZelle = InputBox("Ab welcher Zelle (links oben) soll umgewandelt werden ?", _
                            "Startzeile - Schritt 1 von 4", "A1")
    EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll umgewandelt werden ?", _
                            "Endzeile - Schritt 2 von 4", "N24")
    DateiPfad = InputBox("Wie soll die Ausgabepfad heissen?", _
                            "Dateiname - Schritt 3 von 4", "C:\")
    Kopf = InputBox("Text Tabellenkopf", _
                            "Kopf - Schritt 3 von 4", Kopf)

    DateiName = DateiPfad & Blatt & ".txt"

    StartSpalte = adre(CStr(StartZelle))
    StartZeile = Numm
    EndSpalte = adre(CStr(EndZelle))
    EndZeile = Numm

    Open DateiName For Output As #fHandle
    ZeilenText = Str(EndSpalte + 1 - StartSpalte)
    Print #fHandle, "<!-- |colspan=""" & ZeilenText & """ align=""center"" -->"
    ZeilenText = Str(EndZeile + 1 - StartZeile)
    Print #fHandle, "<!-- |rowspan=""" & ZeilenText & """ align=""center"" -->"
    Print #fHandle, "{| {{prettytable-R}}"
    Print #fHandle, "|+ " & Kopf

    switch = 0
    schon = 0
    For i = StartZeile To EndZeile
        ZeilenText = "|"
        mehr = 0

        For j = StartSpalte To EndSpalte
            If mehr = 1 Then ZeilenText = ZeilenText & "||"
            mehr = 1
            typf = Worksheets(Blatt).Cells(i, j).NumberFormat
            ZellInhalt = Worksheets(Blatt).Cells(i, j)
            If ZellInhalt = Empty Then ZellInhalt = "&nbsp;"

            If Worksheets(Blatt).Cells(i, j).MergeCells = "Wahr" Then
                mzeil = Worksheets(Blatt).Cells(i, j).MergeArea.Row
                mspal = Worksheets(Blatt).Cells(i, j).MergeArea.Column
                mzahl = Worksheets(Blatt).Cells(i, j).MergeArea.Count
                If mspal = j Then
                    k = 1
                    While ((j + k) <= EndSpalte) And (Worksheets(Blatt).Cells(i, j + k).MergeArea.Column = j)
                        k = k + 1 ' Zähler hochzählen.
                    Wend    'While-Schleife beenden
                    If j + k = EndSpalte Then If Worksheets(Blatt).Cells(i, j + k).MergeArea.Column = j Then k = k + 1
                    j = j + k - 1
                    If mzeil = i Then
                        hilf = CStr(k)
                        ZeilenText = ZeilenText & "colspan=""" & hilf & """ align=""center"""
                        mmzeil = CInt(mzahl / k)
                        If mmzeil > 1 Then
                            hilf = CStr(mmzeil)
                            ZeilenText = ZeilenText & " rowspan=""" & hilf & """"
                        End If
                        ZeilenText = ZeilenText & "|" & ZellInhalt
                    Else
                        mehr = 0
                    End If
                Else
                    GoTo nichts2
                End If
            Else
                Select Case typf
                    Case "@"
                    Case Else: ZellInhalt = wandeln(CStr(ZellInhalt))
                End Select
                ZeilenText = ZeilenText & Formatierungstags & ZellInhalt
            End If


            If 1 = 2 Then
            If 1 = 2 Then
 nichts2:
            End If
            End If

        Next j

        Print #fHandle, ZeilenText
        Print #fHandle, "|-"
        ZeilenText = ""
        If schon = 0 Then
            switch = 0
        Else
            i = i - 1
            switch = switch + 1
            schon = 0
        End If
    Next i

    ZeilenText = Str(EndSpalte + 1 - StartSpalte)
    Print #fHandle, "|colspan=""" & ZeilenText & """|<small>Anmerkung: </small>"
    Print #fHandle, "|}"
    Close #fHandle

 End Sub
 '
 Sub drehen(Blatt As String)
    Dim Blatt1, nam(maxa), meld, EndZelle As String
    Dim spal, hn, i, j, naz(maxa), EndZeile As Integer

    'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
    'Ggf. mit Einfügen einen Modul einfügen.
    'Dieses VBA-Programm in einen Modul kopieren und
    'die nachfolgende Zeile in die Zwischenablage übernehmen:
    '   Call drehen(CommandButton1.Parent.Name) 'Blattname, Zelle A1 bleibt Zelle A1
    'Danach auf dem Excel-Tabellenblatt im Pull-down-Menü Ansicht den
    'Punkt "Symbolleisten" anklicken und dann "Steuerelement Toolbox" anklicken
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Befehlsschaltfläche" (linke Spalte, 4.Element von oben) anklicken
    'Mit der Maus an die geünschte Stelle gehen und das bei der Mausbewegung
    'entstehende Rechteck auf die
    'gewünschte Größe ziehen und die Maustaste loslassen.
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Code anzeigen" (linke Spalte, 2.Element von oben) anklicken und
    'anschließend in den erscheinenden Code zwischen "Private Sub ..." und "End Sub" die
    'Zeile der Zwischenablage übernehmen (bei der kopierten Zeile erstes "'" löschen.
    'Ggf. diesen Stand schon speichern.
    'Wenn gewünscht Symbolleiste "Steuerelement Toolbox" schließen
    'Anschließend die Zahlen in der Zeile 2 entsprechend Ihrer Tabelle anpassen. Die
    'Bedeutung steht in Zeile 1 in der Reihenfolge (Spaltenbuchstaben in Anführungszeichen einschließen).
    'Beim Drücken der neuen Befehlsschaltfläche wird ein neues Tabellenblatt angelegt und
    'die Excel-Tabelle gedreht in die neue Tabelle kopiert
    'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.

    Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-dreh"

    hn = Worksheets.Count
    If hn > maxa - 1 Then
        i = MsgBox(meld, , "zuviele Blätter - Abbruch")
        Exit Sub
    End If
    For i = 1 To hn
        If Worksheets(i).Name = Blatt1 Then
            i = MsgBox(meld, , "neues Blatt schon vorhanden - Abbruch")
            Exit Sub
        End If
        nam(i) = Worksheets(i).Name
    Next i
    Worksheets.Add
    For i = 1 To hn + 1
        naz(i) = 0
    Next i
    For i = 1 To hn
        For j = 1 To hn + 1
            If Worksheets(j).Name = nam(i) Then naz(j) = i
        Next j
    Next i
    j = 0
    For i = 1 To hn + 1
        If naz(i) = 0 Then
            Worksheets(i).Name = Blatt1
            j = 1
            Exit For
        End If
    Next i
    If j = 0 Then
        i = MsgBox(meld, , "Blatt konnte nicht benannt werden - Abbruch")
        Exit Sub
    End If

    EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll gedreht werden ?", _
                            "Endzelle: ", "N24")

    hn = adre(CStr(EndZelle))
    EndZeile = Numm

    For i = 1 To EndZeile
        For j = 1 To hn
            Worksheets(Blatt1).Cells(j, i) = Worksheets(Blatt).Cells(i, j)
        Next j
    Next i
 End Sub
 '
 Sub kehrt(Blatt)
    Dim Blatt1, nam(maxa), meld, EndZelle As String
    Dim spal, hn, i, j, EZ, naz(maxa), EndZeile As Integer

    'Hinweise zur Nutzung: Aus dem Excel-Blatt mit [Alt] + [F11] Visual Basic aufrufen.
    'Ggf. mit Einfügen einen Modul einfügen.
    'Dieses VBA-Programm in einen Modul kopieren und
    'die nachfolgende Zeile in die Zwischenablage übernehmen:
    '   Call kehrt(CommandButton1.Parent.Name)  'Blattname
    'Danach auf dem Excel-Tabellenblatt im Pull-down-Menü Ansicht den
    'Punkt "Symbolleisten" anklicken und dann "Steuerelement Toolbox" anklicken
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Befehlsschaltfläche" (linke Spalte, 4.Element von oben) anklicken
    'Mit der Maus an die geünschte Stelle gehen und das bei der Mausbewegung
    'entstehende Rechteck auf die
    'gewünschte Größe ziehen und die Maustaste loslassen.
    'Anschließend auf der Symbolleiste "Steuerelement Toolbox" den
    'Button "Code anzeigen" (linke Spalte, 2.Element von oben) anklicken und
    'anschließend in den erscheinenden Code zwischen "Private Sub ..." und "End Sub" die
    'Zeile der Zwischenablage übernehmen (bei der kopierten Zeile erstes "'" löschen.
    'Ggf. diesen Stand schon speichern.
    'Wenn gewünscht Symbolleiste "Steuerelement Toolbox" schließen
    'Anschließend die Zahlen in der Zeile 2 entsprechend Ihrer Tabelle anpassen. Die
    'Bedeutung steht in Zeile 1 in der Reihenfolge (Spaltenbuchstaben in Anführungszeichen einschließen).
    'Beim Drücken der neuen Befehlsschaltfläche wird ein neues Tabellenblatt angelegt und
    'die Excel-Tabelle gedreht in die neue Tabelle kopiert
    'Danach ist ggf. noch ein Feinschliff der Tabelle notwendig.

    Blatt1 = Left(Blatt, Len(Blatt) - 1) & "-kehr"

    hn = Worksheets.Count
    If hn > maxa - 1 Then
        i = MsgBox(meld, , "zuviele Blätter - Abbruch")
        Exit Sub
    End If
    For i = 1 To hn
        If Worksheets(i).Name = Blatt1 Then
            i = MsgBox(meld, , "neues Blatt schon vorhanden - Abbruch")
            Exit Sub
        End If
        nam(i) = Worksheets(i).Name
    Next i
    Worksheets.Add
    For i = 1 To hn + 1
        naz(i) = 0
    Next i

    EndZelle = InputBox("Bis zu welcher Zelle (rechts unten) soll umgedreht werden ?", _
                            "Endzelle: ", "N24")

    For i = 1 To hn
        For j = 1 To hn + 1
            If Worksheets(j).Name = nam(i) Then naz(j) = i
        Next j
    Next i
    j = 0
    For i = 1 To hn + 1
        If naz(i) = 0 Then
            Worksheets(i).Name = Blatt1
            j = 1
            Exit For
        End If
    Next i
    If j = 0 Then
        i = MsgBox(meld, , "Blatt konnte nicht benannt werden - Abbruch")
        Exit Sub
    End If

    hn = adre(CStr(EndZelle))
    EndZeile = Numm

    EZ = EndZeile
    For i = 1 To EZ
        For j = 1 To EZ
            Worksheets(Blatt1).Cells(EZ + 1 - i, j) = Worksheets(Blatt).Cells(i, j)
        Next j
    Next i
 End Sub
 '
 Function adre(h0 As String) As Integer
    'Feldadresse in zwei Zahlen verwandeln
        'Eingabe:
            'hi: Feldadresse (Spalte als Buchstaben, Zeile als Zahl)
        'Ausgabe
            'adre: Spaltennummer als Zahl, Numm als Zeilenadresse
    On Error GoTo ErrorHandler  ' Fehlerbehandlung aktivieren.

    Dim meld, spa, spa1, spah, hi As String
    Dim hz, i, hh, hl As Integer

    spa = Left(h0, 1)
    If IsNumeric(spa) Then
        meld = "erstes Zeichen von " & h0 & "ist kein Spaltenbuchstabe - Abbruch"
        hi = MsgBox(meld, , "Fehlermeldung")
        End
    End If
    hi = Mid(h0, 2)

    spa1 = Left(hi, 1)
    If IsNumeric(spa1) Then
        spa1 = ""
        If Not IsNumeric(hi) Then
            meld = h0 & "ist keine Zellenadresse - Abbruch"
            hi = MsgBox(meld, , "Fehlermeldung")
            End
        End If
        Numm = CInt(hi)
    Else
        spa = spa & spa1
        spa1 = ""
        hi = Mid(hi, 2)
        If Not IsNumeric(hi) Then
            meld = h0 & "ist keine Zellenadresse - Abbruch"
            hi = MsgBox(meld, , "Fehlermeldung")
            End
        End If
        Numm = CInt(hi)
    End If

    hi = spa & spa1
    If IsNumeric(hi) And (Not IsEmpty(hi)) Then
        adre = CInt(hi)
    Else
        hz = Len(hi)
        hl = 0
        Select Case hz
        Case 1
            hh = Asc(hi) - 64
            If hh > 58 Then GoTo Falsch
            If hh > 26 Then hh = hh - 32
            If hh > 26 Then GoTo Falsch
        Case 2
            hl = Asc(Mid(hi, 2, 1)) - 64
            If hh > 58 Then GoTo Falsch
            If hh > 26 Then hh = hh - 32
            If hh > 26 Then GoTo Falsch
        Case Else
 Falsch:
            meld = h0 & "ist keine Zellenadresse"
            hi = MsgBox(meld, , "Fehlermeldung")
            End
        End Select
        adre = hl * 26 + hh
    End If
 Exit Function

 ErrorHandler:
    meld = "In Funktion adre"
    meld = meld & " ist Fehler " & Err.Number
    meld = meld & " aufgetreten. Deswegen Rechnungsabbruch"
    i = MsgBox(meld, , "Fehlermeldung")
    End

 End Function

 Function wandeln(was As String) As String
    Dim pos, k As Integer

    If (was = " ") Or (was = "") Then was = "&nbsp;"

            If IsNumeric(was) Then
                was = Format(was)
                pos = InStr(was, ",")
                If pos > 0 Then
                    was = Left(was, pos + 2)
                    If Len(was) = pos Then was = was & "&nbsp;&nbsp;"
                    If Len(was) = pos + 1 Then was = was & "&nbsp;"
                Else
                    was = was & "&nbsp;&nbsp;&nbsp;"
                End If
            End If

            If switch > 0 Then
                For k = 1 To switch
                    pos = InStr(was, Chr(10))
                    If pos > 0 Then
                        was = Mid(was, pos + 1)
                    Else
                        was = ""
                    End If
                Next k
            End If
            pos = InStr(was, Chr(10))
            If pos > 0 Then
                was = Left(was, pos - 1)
                schon = switch + 1
            End If

            If was = "" Then was = "&nbsp;"

    wandeln = was

 End Function