Frage zur FAQ

Hallo
entweder bin ich komplett Benebelt oder bei mir funktioniert:

Beispieltabellen darstellen?

[FAQ:2363] (29.7.2008)

nicht (mehr).

Wenn ich das Makro, wie es ist einfüge funktioniert es nicht, da alle zeilen insbesonder die Umbruch _ zeilen mit Leerzeilen einfügt.

Das kriege ich noch hin.
Dann kommt der fehler Sub nicht definiert

' Call BedingteFormatierungEinlesen 'WINTER

'If strBF "Bedingte Formatierung(en):" & vbLf Then strSatz = strSatz & vbLf & strBF 

Wenn ich das auskommentiere (Ich dachte mir, dass kann ich machen, da ich keine bedingte Formatierung verwende.) kommt als nächster Fehler next ohne For:

Next lngZ

und dann habe ich aufgegeben.
Und ich habe schon mal Das verwendet. das aht schon mal funktioniert. (nachdme ich den Verweis gesetzt hatte).
Kann mir jemand (vielleicht der Autor dieses genialen Scripts) weiterhelfen? Oder werden Leute, die noch nicht einmal die FAQ verstehen ausgeschlossen?

Grüße Anonymer
(Winter der den Account nicht verlieren will) :wink:

Hallo Winter,

entweder bin ich komplett Benebelt oder bei mir funktioniert:

Beispieltabellen darstellen?

[FAQ:2363] (29.7.2008)

nicht (mehr).

also ging es mal?

Wenn ich das Makro, wie es ist einfüge funktioniert es nicht,
da alle zeilen insbesonder die Umbruch _ zeilen mit Leerzeilen
einfügt.

Probier mal den nachfolgenden Code den ich aktuell benutze.
Er prüft nicht alle möglichen Konstellationen ab, vielleicht liegt es an dem Umbruch, wer weiß.
Da er leider selten genutzt wird, habe ich auch keinen Handlungsbedarf ihn zu verbessern.

Gruß
Reinhard

Option Explicit
#If VBA6 = 0 Then
 Const FM20\_GUID = "{C43ABEE0-5C8F-4D95-B2C1-05B898491C64}" 'XL97
#Else
 Const FM20\_GUID = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}" 'XL2000
#End If
Public intAnzS As Integer, lngAnzZ As Long, bytFehl As Byte, varNameZ, varNameS
Public varFormat, varBereich, varZeile, strLinie As String, varBreite, strLinieU As String
Public strSatz As String, strNamen As String, strFormeln As String, strMatrixformeln As String
Public strZF As String, varZahlenformat, wksAltesBlatt As Worksheet
'
Sub Excel2W\_W\_W()
' Programm zum formatierten Darstellen von Tabellenblattbereichen bei wer-weiss-was.
' Getestet auf XL97, entwickelt Nov. 2006, geändert Feb.2008 by Reinhard
' Wie man Vba-Code einfügt und ausführt siehe FAQ:4712
' Benutzung: gewünschten Tabellenblattbereich per Maus oder Tastatur markieren und Makro
' ausführen lassen. Im Eingabefeld von w-w-w dann Strg+V drücken.
' Versionen höher als XL8.0 (=XL97) benötigen den Verweis auf "Microsoft Forms 2.0 Object Library"
' Der Verweis wird benötigt für "DataObject"
' Mit folgendem Code wird das Makro dem Tastenkürzel "Strg+w" zugewiesen, es empfiehlt sich
' den Code ins Modul "DiesArbeitsmappe" der Personl.xls zu kopieren, dann steht das Tastenkürzel
' in allen Dateien zur Verfügung
'
' Private Sub Workbook\_Open()
' Call VerweisSetzen
' Application.OnKey "^t", "w\_w\_w2Excel"
' Application.OnKey "^w", "Excel2W\_W\_W"
' End Sub
'
Dim objkurz As New DataObject, N
Set wksAltesBlatt = ActiveSheet
Call BereichEinlesen
If bytFehl = 255 Then Exit Sub
Call ZeilenErzeugen
Call TabelleinSatzEinfügen
objkurz.SetText strSatz
objkurz.PutInClipboard
Set objkurz = Nothing
'
' ab hier kann der nachfolgende Code (bis auf End Sub!) dieser Prozedur gelöscht werden,
' wenn man keine Kontrollausgabe in einem Hilfsblatt oder/und Notepad haben möchte
'
'\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Ausgabe in Hilfsblatt \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
'On Error Resume Next
'Application.DisplayAlerts = False
'ActiveWorkbook.Worksheets("Testxyz").Delete
'Application.DisplayAlerts = True
'Worksheets.Add after:=Worksheets(Worksheets.Count)
'ActiveSheet.Name = "Testxyz"
'With Columns(1).Font
' .Name = "Courier New"
' .Size = 10
'End With
'Range("A1").Select
'ActiveSheet.Paste
'ActiveSheet.Buttons.Add(244.5, 123.75, 111.75, 42.75).Select
'With Selection
' .OnAction = "PERSONL.XLS!BlattLoeschen"
' .Characters.Text = "Dieses Blatt löschen"
'End With
'Range("A1").Select
''\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Ausgabe in Notepad \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
'strSatz = Application.WorksheetFunction.Substitute(strSatz, Chr(13), "")
'strSatz = Application.WorksheetFunction.Substitute(strSatz, Chr(10), Chr(13) & Chr(10))
'objkurz.SetText strSatz
'objkurz.PutInClipboard
'Application.SendKeys "^v"
'N = Shell(Environ("systemroot") & "\notepad.exe", vbMaximizedFocus)
End Sub
'
Sub BereichEinlesen()
'Die Zellen (und ihre Formate) der Selection werden eingelesen
Dim lngZ As Long, intS As Integer
On Error GoTo Fehler
bytFehl = 1
If TypeName(Selection) "Range" Then GoTo Fehler
intAnzS = Selection.Columns.Count
lngAnzZ = Selection.Rows.Count
ReDim varBereich(lngAnzZ, intAnzS)
ReDim varFormat(lngAnzZ, intAnzS)
ReDim varZahlenformat(lngAnzZ, intAnzS)
ReDim varBreite(intAnzS)
ReDim varNameZ(lngAnzZ)
ReDim varNameS(intAnzS)
Call NamenZellen(Selection.Cells(1, 1).Address)
For lngZ = 1 To lngAnzZ
 For intS = 1 To intAnzS
 varZahlenformat(lngAnzZ, intAnzS) = Selection.Cells(lngZ, intS).NumberFormatLocal
 varBereich(lngZ, intS) = Selection.Cells(lngZ, intS).Text
 If Len(varBereich(lngZ, intS)) \> varBreite(intS) \_
 Then varBreite(intS) = Len(varBereich(lngZ, intS))
 varFormat(lngZ, intS) = XFormat(Selection.Cells(lngZ, intS))
 Next intS
Next lngZ
For intS = 1 To intAnzS
 If Len(varNameS(intS)) \> varBreite(intS) Then varBreite(intS) = Len(varNameS(intS))
Next intS
For lngZ = 1 To lngAnzZ
 For intS = 1 To intAnzS
 Select Case varFormat(lngZ, intS)
 Case -4131
 varBereich(lngZ, intS) = Left(varBereich(lngZ, intS) \_
 & String(varBreite(intS), " "), varBreite(intS))
 Case -4108
 varBereich(lngZ, intS) = Left(String(Int((varBreite(intS) \_
 - Len(varBereich(lngZ, intS))) / 2), " ") & varBereich(lngZ, intS) \_
 & String(Int((varBreite(intS) - Len(varBereich(lngZ, intS))) / 2) \_
 + 1, " "), varBreite(intS))
 Case -4152
 varBereich(lngZ, intS) = Right(String(varBreite(intS), " ") \_
 & varBereich(lngZ, intS), varBreite(intS))
 Case Else
 bytFehl = 2
 GoTo Fehler
 End Select
 varBereich(lngZ, intS) = " " & varBereich(lngZ, intS) & " "
 Next intS
Next lngZ
Exit Sub
Fehler:
 Call Fehler(bytFehl)
End Sub
'
Sub tt()
Err.Raise vbObjectError + 100, , "Fehler mit der Selection"
End Sub
'
Sub Fehler(ByVal Nummer As Integer)
'Es wurden Fehler erkannt
Dim strMldg As String
Select Case Nummer
 Case 1
 strMldg = "Es wurde kein gültiger Zellenbereich selektiert"
 Case 2
 strMldg = "Problem mit Formatierung"
 Case Else
 strMldg = "Unbekannter Fehler"
End Select
MsgBox strMldg & Chr(13) & Chr(13) & "Makro wird beendet"
bytFehl = 255
End Sub
'
Sub NamenZellen(OberelinkeZelle As String)
'Ermittlung der Zeilen- und Spaltenbezeichnungen ausgehend von der oberen
'linken Zelle der Selektion.
'NamenZellen() wird von BereichEinlesen() aufgerufen
Dim lngZ As Long, intS As Integer, strAdr As String
For lngZ = 1 To lngAnzZ
 varNameZ(lngZ) = Range(OberelinkeZelle).Offset(lngZ - 1, 0).Row
Next lngZ
For intS = 1 To intAnzS
 strAdr = Range(OberelinkeZelle).Offset(0, intS - 1).Address
 varNameS(intS) = Left(Mid(strAdr, 2), InStr(2, strAdr, "$") - 2)
Next intS
End Sub
'
Function XFormat(Zelle As Range)
'Ermittlung ob Zelleninhalt linksbündig, rechtsbündig oder zentriert ist.
'XFormat() wird von BereichEinlesen() aufgerufen
Select Case Zelle.HorizontalAlignment
 Case -4131, -4108, -4152
 XFormat = Zelle.HorizontalAlignment
 Case Else
 XFormat = 1
End Select
If XFormat = 1 Then
 If IsDate(Zelle.Value) Or IsNumeric(Zelle.Value) Then XFormat = -4152
 If IsError(Zelle.Value) Then XFormat = -4108
End If
If XFormat = 1 Then XFormat = -4131
End Function
'
Sub TabelleinSatzEinfügen()
'strSatz ist der Gesamtstring, der nachher in die Zwischenablage kopiert wird.
'in diesem Projekt wird er zusammengesetzt.
'strSatz besteht aus pre-Tag, Blattname, Tabelle, ggfs. Formeln, ggfs. Matrixformeln,
'ggfs. Namen, Zahlenformate, ggfs. Bed. Formatierungen, ggfs. erster Zirkelbezug
'/pre-Tag, Schlußfloskel
Dim lngZ As Long, intS As Integer
strSatz = Chr(60) & "pre" & Chr(62) & "Tabellenblatt: "
If ActiveWorkbook.Path "" Then strSatz = strSatz & ActiveWorkbook.Path & "\"
strSatz = strSatz & "[" & ActiveWorkbook.Name & "]!" & ActiveSheet.Name & vbLf
strSatz = strSatz & varZeile(0) & vbLf
For lngZ = 1 To lngAnzZ
 strSatz = strSatz & strLinie & vbLf
 strSatz = strSatz & varZeile(lngZ) & vbLf
Next lngZ
strSatz = strSatz & strLinieU
Call FormelMatrixNamenEinlesen
If strFormeln vbLf Then strSatz = strSatz & vbLf & "Benutzte Formeln:" & strFormeln
If strMatrixformeln vbLf Then
 strSatz = strSatz & vbLf & "Benutzte Matrixformeln:" & strMatrixformeln
 strSatz = strSatz & "(Matrixformeln nicht mit " & Chr(34) & "Enter" & Chr(34) \_
 & " sondern mit " & Chr(34) & "Strg+Shift+Enter" & Chr(34) & " eingeben." & vbLf
 strSatz = strSatz & "Die Spezialklammern nicht manuell eingeben, sie werden von Excel erzeugt.)"
End If
If strNamen vbLf Then strSatz = strSatz & vbLf & vbLf & "Festgelegte Namen:" & strNamen
Call ZahlenFormate
strSatz = strSatz & vbLf & strZF
Call BedingteFormatierungEinlesen
If strBF "Bedingte Formatierung(en):" & vbLf Then strSatz = strSatz & vbLf & strBF
If Not ActiveSheet.CircularReference Is Nothing Then strSatz = strSatz & vbLf & vbLf \_
 & "Zirkelbezug in Zelle: " & ActiveSheet.CircularReference.Address(0, 0) & vbLf
strSatz = strSatz & vbLf & Chr(60) & "/pre" & Chr(62) & \_
 "Tabellendarstellung erreicht mit dem Code in [FAQ:2363](/t/faq/9292363)" & vbLf
'strSatz = strSatz & "Dargestellte Tabelle kann man mit Code aus der gleichen FAQ in \_
' ein Tabellenblatt einfügen." & vbLf
strSatz = strSatz & "Gruß" & vbLf & "Reinhard" & vbLf 'Environ("Username")
End Sub
'
Sub ZeilenErzeugen()
'Die Zeilen der späteren Tabelle werden erstellt
Dim lngZ As Long, intS As Integer, Tr
Tr = Array(ChrW(9474), ChrW(9472), ChrW(9532), ChrW(9508), ChrW(9524), ChrW(9496))
ReDim varZeile(lngAnzZ)
varZeile(0) = String(Len(varNameZ(lngAnzZ)) + 1, " ") & Tr(0)
For lngZ = 1 To lngAnzZ
 varZeile(lngZ) = Right(" " & varNameZ(lngZ), Len(varNameZ(lngAnzZ))) & " " & Tr(0)
 For intS = 1 To intAnzS
 varZeile(lngZ) = varZeile(lngZ) & varBereich(lngZ, intS) & Tr(0)
 Next intS
Next lngZ
strLinie = String(Len(varNameZ(lngAnzZ)), Tr(1)) & Tr(1) & Tr(2)
strLinieU = String(Len(varNameZ(lngAnzZ)), Tr(1)) & Tr(1) & Tr(4)
For intS = 1 To intAnzS
 strLinie = strLinie & String(varBreite(intS) + 2, Tr(1)) & Tr(2)
 strLinieU = strLinieU & String(varBreite(intS) + 2, Tr(1)) & Tr(4)
 varZeile(0) = varZeile(0) & Left(String(Int((varBreite(intS) + 2) / 2), " ") \_
 & varNameS(intS) & String(varBreite(intS), " "), varBreite(intS) + 2) & Tr(0)
Next intS
strLinie = Left(strLinie, Len(strLinie) - 1) & Tr(3)
strLinieU = Left(strLinieU, Len(strLinieU) - 1) & Tr(5)
End Sub
'
Sub FormelMatrixNamenEinlesen()
'Formeln, Matrixformeln,Namen werdn eingelesen.
'Namen die sich auf einen relativen Zellbezug beziehen sind schlecht darzustellen
'denn jenachdem welche Zelle gerade aktiv ist ändert sich der Inhalt von ReferesTo
'Namen die sich auf einen relativen Zellbezug beziehen, werden, soweit vom Code erkannt,
'diesbezügluch in der Anzeige kommentiert.
Dim intS As Integer, lngZ As Long, intAnzN As Integer, LängeN As Integer, N As Integer
Dim Merker As Range, Ref1 As String, Ref2 As String, Ze As Range
Dim Merk As String, Vorh As Boolean
strFormeln = vbLf
strMatrixformeln = vbLf
strNamen = vbLf
Set Merker = Selection
With Selection
 For intS = 1 To intAnzS
 For lngZ = 1 To lngAnzZ
 If .Cells(lngZ, intS).HasFormula And Not .Cells(lngZ, intS).HasArray Then \_
 strFormeln = strFormeln & Left(.Cells(lngZ, intS).Address(0, 0) \_
 & " ", Len(.Cells(lngAnzZ, intAnzS).Address(0, 0))) & ": " \_
 & .Cells(lngZ, intS).FormulaLocal & vbLf
 If .Cells(lngZ, intS).HasArray Then strMatrixformeln = strMatrixformeln \_
 & Left(.Cells(lngZ, intS).Address(0, 0) & " ", \_
 Len(.Cells(lngAnzZ, intAnzS).Address(0, 0))) & ": " & "{" & \_
 .Cells(lngZ, intS).FormulaLocal & "}" & vbLf
 Next lngZ
 Next intS
 intAnzN = ActiveWorkbook.NameS.Count 'Anzahl der im Workbook benutzten Namen ermitteln
 If intAnzN \>= 1 Then 'Wenn es Namen gibt
 LängeN = Len(ActiveWorkbook.NameS.Item(1).Name)
 For N = 2 To intAnzN ' größte Namenslänge ermitteln
 If LängeN Ref2 Then 'Relativer Name!
 strNamen = strNamen & ActiveWorkbook.NameS.Item(N).RefersToLocal & " \*rel. Name"
 On Error Resume Next 'wg specialcells
 If Not Intersect(Merker, ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)) \_
 Is Nothing Then
 For Each Ze In Intersect(Merker, ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas))
 If InStr(Ze.FormulaLocal, ActiveWorkbook.NameS.Item(N).Name) \> 0 Then
 Merk = Application.WorksheetFunction.Substitute(Ze.FormulaLocal, \_
 ActiveWorkbook.NameS.Item(N).Name, "")
 If IsError(Evaluate(Merk)) = True Then
 Ze.Select
 strNamen = strNamen & ", so gültig in " & Ze.Address(0, 0)
 Exit For
 End If
 End If
 Next Ze
 End If
 Else
 strNamen = strNamen & ActiveWorkbook.NameS.Item(N).RefersToLocal
 End If
 If ActiveWorkbook.NameS.Item(N).Visible = False Then strNamen = strNamen \_
 & ", \*versteckter Name"
 Vorh = False
 On Error Resume Next
 If Not Intersect(Merker, ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)) Is Nothing Then
 For Each Ze In Intersect(Merker, ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas))
 If InStr(Ze.FormulaLocal, ActiveWorkbook.NameS.Item(N).Name) \> 0 Then
 Merk = Application.WorksheetFunction.Substitute(Ze.FormulaLocal, ActiveWorkbook.NameS.Item(N).Name, "")
 If IsError(Evaluate(Merk)) = True Then
 Vorh = True
 Exit For
 End If
 End If
 Next Ze
 End If
 On Error GoTo 0
 If Vorh = False Then strNamen = strNamen & ", unbenutzt in Selektion."
 strNamen = strNamen & vbLf
 Next N
 End If
End With
Merker.Select
End Sub
'
Sub ZahlenFormate()
'Wenn in der Selection verschiedene Zahlenformate vorkommen werden diese in "Col"
'gespeichert. "Col" wird in einer Schleife abgearbeitet und in einer Unterschleife
'wird ermittelt welche zellen das jeweilige zahlenformat in "Col" haben.
Dim Col As New Collection, C As Long, lngZ As Long, intS As Integer
Dim strZFkurz As String, strMldg As String, intPos As Integer
strZF = "Zahlenformate der Zellen im gewählten Bereich:" & vbLf
If Not Selection.NumberFormatLocal = Empty Then
 strZF = Selection.Address(0, 0) & vbLf & IIf(Selection.Cells.Count 1, "haben", "hat")
 strZF = strZF & " das Zahlenformat: "
 strZF = strZF & IIf(Selection.NumberFormatLocal = "@", "Text", Selection.NumberFormatLocal) & vbLf
Else
 On Error Resume Next 'wg. Col
 For intS = 1 To Selection.Columns.Count
 With Selection.Columns(intS)
 If Not .NumberFormatLocal = Empty Then
 Col.Add Item:=.NumberFormatLocal, key:=.NumberFormatLocal
 varZahlenformat(0, intS) = .NumberFormatLocal
 C = C + 1
 End If
 End With
 Next intS
 If C intAnzS Then
 For intS = 1 To intAnzS
 If varZahlenformat(0, intS) = "" Then
 For lngZ = 1 To lngAnzZ
 Col.Add Item:=Selection.Cells(lngZ, intS).NumberFormatLocal, key:=Selection.Cells(lngZ, intS).NumberFormatLocal
 varZahlenformat(lngZ, intS) = Selection.Cells(lngZ, intS).NumberFormatLocal
 Next lngZ
 End If
 Next intS
 End If
 On Error GoTo 0
 For C = 1 To Col.Count
 For intS = 1 To intAnzS
 If varZahlenformat(0, intS) "" Then
 If Col.Item(C) = varZahlenformat(0, intS) Then
 strZF = strZF & Selection.Columns(intS).Address(0, 0) & ","
 End If
 Else
 strZFkurz = ""
 For lngZ = 1 To lngAnzZ
 If Col.Item(C) = varZahlenformat(lngZ, intS) Then
 strZFkurz = strZFkurz & Selection.Cells(lngZ, intS).Address(0, 0) & ","
 End If
 Next lngZ
 strZF = strZF & BereicheZ(strZFkurz)
 End If
 Next intS
 strMldg = IIf(InStr(strZF, ",") = Len(strZF) And InStr(strZF, ":") = 0, "hat", "haben")
 strZF = Left(strZF, Len(strZF) - 1) & vbLf & strMldg & " das Zahlenformat: " & IIf(Col.Item(C) = "@", "Text", Col.Item(C)) & vbLf
 Next C
 strZF = BereicheS(strZF)
End If
End Sub
'
Function BereicheZ(ByVal F As String) As String
'Zusammengehörende Zellen einer Spalte werden zusammengefasst zu einem Bereich
'um die Anzeigenbreite bei Zahlenformaten zu verkleinern
'Bereiche() wird von Zahlenformate() aufgerufen wenn in einer Spalte verschiedene
'Zahlenformate vorhanden sind.
Dim M As Long, N As Long, lngPos As Long, g() As Variant, Anz As Long
Dim lngOff As Long
While InStr(lngPos + 1, F, ",") \> 0
 Anz = Anz + 1
 ReDim Preserve g(Anz)
 g(Anz) = Mid(F, lngPos + 1, InStr(lngPos + 1, F, ",") - lngPos - 1)
 lngPos = InStr(lngPos + 1, F, ",")
Wend
If Anz = 1 Then
 BereicheZ = g(1) & ","
 Exit Function
End If
Anz = Anz + 1
ReDim Preserve g(Anz)
g(Anz) = g(1) 'Dummmy
For N = 1 To UBound(g) - 1
 lngOff = 1
 While Range(g(N)).Offset(lngOff, 0).Address(0, 0) = Range(g(N + lngOff)).Address(0, 0)
 lngOff = lngOff + 1
 Wend
 BereicheZ = BereicheZ & g(N)
 If lngOff \> 1 Then BereicheZ = BereicheZ & ":" & Range(g(N)).Offset(lngOff - 1, 0).Address(0, 0)
 BereicheZ = BereicheZ & ","
 N = N + lngOff - 1
Next N
End Function
'
Function BereicheS(ByVal F As String) As String
'Zellen in Spalten zusammenfassen wenn zusammengehörig,
Dim Anz, Pos, Zellen, PosZ, g() As Variant, AnzZ, N, lngOff, PosK
While InStr(Pos + 1, F, vbLf) \> 0
 Zellen = Mid(F, Pos + 1, InStr(Pos + 1, F, vbLf) - Pos)
 If InStr(Zellen, "Zahlen") \> 0 Then
 BereicheS = BereicheS & Zellen
 Else
 PosZ = 0
 Zellen = Zellen & ",IU65530," 'Dummy anfügen
 AnzZ = 0
 While InStr(PosZ + 1, Zellen, ",") \> 0
 AnzZ = AnzZ + 1
 ReDim Preserve g(AnzZ)
 g(AnzZ) = Mid(Zellen, PosZ + 1, InStr(PosZ + 1, Zellen, ",") - PosZ - 1)
 PosZ = InStr(PosZ + 1, Zellen, ",")
 Wend
 For N = 1 To UBound(g) - 1
 g(N) = Application.WorksheetFunction.Substitute(g(N), vbLf, "")
 'MsgBox InStr(g(N), vbLf)
 If InStr(g(N), ":") = 0 Then
 lngOff = 1
 While Range(g(N)).Offset(0, lngOff).Address(0, 0) = Range(g(N + lngOff)).Address(0, 0)
 lngOff = lngOff + 1
 Wend
 BereicheS = BereicheS & g(N)
 If lngOff \> 1 Then BereicheS = BereicheS & ":" & Range(g(N)).Offset(0, lngOff - 1).Address(0, 0)
 BereicheS = BereicheS & ","
 N = N + lngOff - 1
 Else
 BereicheS = BereicheS & Application.WorksheetFunction.Substitute(g(N), vbLf, "") & ","
 End If
 Next N
 If Right(BereicheS, 1) = "," Then BereicheS = Left(BereicheS, Len(BereicheS) - 1)
 BereicheS = BereicheS & vbLf
 End If
 Pos = InStr(Pos + 1, F, vbLf)
 Anz = Anz + 1
Wend
Pos = 0
While InStr(Pos + 1, BereicheS, vbLf) \> 0
 Zellen = Mid(BereicheS, Pos + 1, InStr(Pos + 1, BereicheS, vbLf) - Pos)
 If InStr(Zellen, "Zahlen") = 0 Then
 PosK = Pos
 While Len(Zellen) \> 70
 PosK = InStr(PosK + 70, BereicheS, ",")
 Mid(BereicheS, PosK, 1) = vbLf
 Zellen = Mid(Zellen, 70)
 Wend
 End If
 Pos = InStr(Pos + 1, BereicheS, vbLf)
Wend
BereicheS = Left(BereicheS, Len(BereicheS) - 1)
End Function
'
Sub VerweisSetzen()
Dim intIndex As Integer, blnFound As Boolean, Dateipfad As String
Dateipfad = Application.Path & "\MSWORD" & Left(Application.Version, \_
 InStr(Application.Version, ".") - 1) & ".OLB"
On Error GoTo err\_exit
With ThisWorkbook.VBProject.References
 For intIndex = 1 To .Count
 If .Item(intIndex).Name = "MSForms" Then .Remove .Item(intIndex)
 Next
 .AddFromGuid GUID:=FM20\_GUID, Major:=2, Minor:=0
End With
Exit Sub
err\_exit:
MsgBox "Fehler " & CStr(Err.Number) & vbLf & vbLf & Err.Description, vbCritical, "Fehler"
End Sub
'
Sub VerweisSetzen2()
Dim intIndex As Integer, blnFound As Boolean
On Error GoTo err\_exit
With ThisWorkbook.VBProject.References
 For intIndex = 1 To .Count
 If .Item(intIndex).GUID = FM20\_GUID Then
 If .Item(intIndex).IsBroken Then
 .Remove .Item(intIndex)
 Else
 blnFound = True
 End If
 End If
 Next
 If Not blnFound Then .AddFromGuid GUID:=FM20\_GUID, Major:=2, Minor:=0
End With
Exit Sub
err\_exit:
 MsgBox "Fehler " & CStr(Err.Number) & vbLf & \_
 vbLf & Err.Description, vbCritical, "Fehler"
End Sub

Hallo reinhard,
danke.
Sorry das ich erst jetzt mich melde, aber die letzten Tage waren ******

also ging es mal?

ja.
dann haben ich es nochmal mir geholt ( sah nach einer neuen Version aus) und dann ging es nicht.

Probier mal den nachfolgenden Code den ich aktuell benutze.
Er prüft nicht alle möglichen Konstellationen ab, vielleicht
liegt es an dem Umbruch, wer weiß.

Am Umbruch liegt es nicht. der findet Funktionen nicht.

Da er leider selten genutzt wird, habe ich auch keinen
Handlungsbedarf ihn zu verbessern.

Das ist schade der ist super genial
Gruß Winter

Hallo Winter,

Am Umbruch liegt es nicht. der findet Funktionen nicht.

lade mal bitte eine Beispieldatei hoch, FAQ:2861 ,die den Code beinhaltet so wie du ihn benutzt, damit wir vom exakt gleichen Code reden und nicht noch Zusatzproblematiken vom Rauskopieren und deEiinfügen des Codes dazukommen können.

Und dadrin halt eine kleine Beispieltabelle mit dem Bereich gekennzeichnet den du nach w-w-w kopieren möchtest.

Danns chau ich mal wodran da was liegt.

Gruß
Reinhard

Danns chau ich mal wodran da was liegt.

http://www.hostarea.de/server-09/September-306818f85…

DANKE
(ein grosses fettes Danke
Gruß Winter

Test1

Tabellenblatt: C:\DOKUME~1\ICHALS~1\LOKALE~1\Temp\[September-306818f85e.xls]!Tabelle1
 │ A │ B │ C │ D │ E │ F │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 1 │ qwe │ wer │ qwer │ qwer │ wqer │ wer │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 2 │ 0,32981007 │ 0,78291097 │ 0,17646052 │ 0,37682967 │ 0,06653969 │ 0,3989856 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 3 │ 0,21054682 │ 0,8000437 │ 0,94076814 │ 0,33146155 │ 0,01357956 │ 0,9079466 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 4 │ 0,14332158 │ 0,05972505 │ 0,68427773 │ 0,38184364 │ 0,08383373 │ 0,40056952 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 5 │ 0,06668239 │ 0,25594487 │ 0,23033205 │ 0,41532637 │ 0,45738369 │ 0,36989984 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 6 │ 0,82574366 │ 0,43946564 │ 0,94289249 │ 0,49886765 │ 0,25637881 │ 0,17337415 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 7 │ 0,15816134 │ 0,18037272 │ 0,128998 │ 0,49433489 │ 0,21562557 │ 0,90581676 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 8 │ 0,25010783 │ 0,34824063 │ 0,62630767 │ 0,40358344 │ 0,9713461 │ 0,70422139 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 9 │ 0,5178028 │ 0,58415153 │ 0,87275819 │ 0,34755311 │ 0,26202967 │ 0,73987101 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
10 │ 0,23554156 │ 0,42253436 │ 0,12655462 │ 0,90857155 │ 0,18446694 │ 0,4472258 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
11 │ 0,52144274 │ 0,92554063 │ 0,01293365 │ 0,17926322 │ 0,15083102 │ 0,96603314 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
12 │ 0,86040168 │ 0,78235739 │ 0,00485734 │ 0,00268873 │ 0,38029898 │ 0,24558102 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
13 │ 0,46121676 │ 0,76203829 │ 0,22250344 │ 0,94905548 │ 0,66569541 │ 0,51663543 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
14 │ 0,04236959 │ 0,09513065 │ 0,28497073 │ 0,50748331 │ 0,38077707 │ 0,92967305 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
15 │ 0,36742616 │ 0,3144002 │ 0,24185105 │ 0,04846752 │ 0,86988729 │ 0,88830666 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
16 │ 0,94217191 │ 0,92096765 │ 0,58590864 │ 0,12111722 │ 0,15035942 │ 0,02631939 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
17 │ 0,52896196 │ 0,17424298 │ 0,80593586 │ 0,89276868 │ 0,58142625 │ 0,01464437 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
18 │ │ │ │ │ │ │
───┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘
A1:F18
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Test2

Tabellenblatt: C:\DOKUME~1\ICHALS~1\LOKALE~1\Temp\[September-306818f85e.xls]!Tabelle1
 │ A │ B │ C │ D │ E │ F │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 1 │ qwe │ wer │ qwer │ qwer │ wqer │ wer │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 2 │ 0,32981007 │ 0,78291097 │ 0,17646052 │ 0,37682967 │ 0,06653969 │ 0,3989856 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 3 │ 0,21054682 │ 0,8000437 │ 0,94076814 │ 0,33146155 │ 0,01357956 │ 0,9079466 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 4 │ 0,14332158 │ 0,05972505 │ 0,68427773 │ 0,38184364 │ 0,08383373 │ 0,40056952 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 5 │ 0,06668239 │ 0,25594487 │ 0,23033205 │ 0,41532637 │ 0,45738369 │ 0,36989984 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 6 │ 0,82574366 │ 0,43946564 │ 0,94289249 │ 0,49886765 │ 0,25637881 │ 0,17337415 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 7 │ 0,15816134 │ 0,18037272 │ 0,128998 │ 0,49433489 │ 0,21562557 │ 0,90581676 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 8 │ 0,25010783 │ 0,34824063 │ 0,62630767 │ 0,40358344 │ 0,9713461 │ 0,70422139 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
 9 │ 0,5178028 │ 0,58415153 │ 0,87275819 │ 0,34755311 │ 0,26202967 │ 0,73987101 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
10 │ 0,23554156 │ 0,42253436 │ 0,12655462 │ 0,90857155 │ 0,18446694 │ 0,4472258 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
11 │ 0,52144274 │ 0,92554063 │ 0,01293365 │ 0,17926322 │ 0,15083102 │ 0,96603314 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
12 │ 0,86040168 │ 0,78235739 │ 0,00485734 │ 0,00268873 │ 0,38029898 │ 0,24558102 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
13 │ 0,46121676 │ 0,76203829 │ 0,22250344 │ 0,94905548 │ 0,66569541 │ 0,51663543 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
14 │ 0,04236959 │ 0,09513065 │ 0,28497073 │ 0,50748331 │ 0,38077707 │ 0,92967305 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
15 │ 0,36742616 │ 0,3144002 │ 0,24185105 │ 0,04846752 │ 0,86988729 │ 0,88830666 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
16 │ 0,94217191 │ 0,92096765 │ 0,58590864 │ 0,12111722 │ 0,15035942 │ 0,02631939 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
17 │ 0,52896196 │ 0,17424298 │ 0,80593586 │ 0,89276868 │ 0,58142625 │ 0,01464437 │
───┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
18 │ │ │ │ │ │ │
───┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘
A1:F18
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Alles klar, mein Fehler
Hallo Winter,

füge noch ein Modul ein mit nachfolgendem Code, dann müßte es klappen.

Gruß
Reinhard

Option Explicit
Public strBF As String, Zelle As Range, B As Byte
'
Sub BedingteFormatierungEinlesen()
' Code in diesem Modul weitestgehend entwickelt von Ypsilon (Micha)
Dim F1 As Variant, F2 As Variant, Merker As Range, BFkurz As String
On Error GoTo Ende
Application.ScreenUpdating = False
F1 = Array("Dummy", "zwischen ", "nicht zwischen ", "gleich ", "ungleich ", "größer ", \_
 "kleiner ", "größer gleich ", "kleiner gleich ")
F2 = Array("Dummy", " und ", " und ", " ", " ", " ", " ", " ", " ")
strBF = "Bedingte Formatierung(en):" & vbLf
Set Merker = Selection
If Selection.FormatConditions.Count = 0 Then GoTo Ende
For Each Zelle In Selection
 Zelle.Select
 For B = 1 To Zelle.FormatConditions.Count
 BFkurz = String(Len(Selection.Cells(lngAnzZ, intAnzS).Address(0, 0)), " ")
 If B = 1 Then BFkurz = Left(Zelle.Address(0, 0) & " ", Len(BFkurz))
 strBF = strBF & BFkurz & ": "
 With Zelle.FormatConditions.Item(B)
 strBF = strBF & B & ".te Bedingung: "
 If .Type = 1 Then
 strBF = strBF & "Zellwert ist "
 strBF = strBF & F1(.Operator) & .Formula1 & F2(.Operator)
 If .Operator = 1 Or .Operator = 2 Then strBF = strBF & .Formula2
 ElseIf .Type = 2 Then
 strBF = strBF & "Formel ist " & .Formula1
 Else
 MsgBox "Unbekannter Typ: " & .Type & vbLf & "Admin anrufen!"
 Exit Sub
 End If
 strBF = strBF & vbLf
 erfüllte\_bedingung
 End With
 Next
Next Zelle
strBF = Left(strBF, Len(strBF) - 1)
Ende:
 Merker.Select
 Application.ScreenUpdating = True
End Sub
'
Sub erfüllte\_bedingung()
'Exit Sub 'ist dannn vielleicht zuviel Information
With Zelle.FormatConditions.Item(B).Interior
 'Farbe
 If Not .ColorIndex = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird die Zelle " & Zelle.Address(0, 0) & " mit dem Colorindex " & .ColorIndex & " eingefärbt" & vbLf
 'Muster
 If Not .Pattern = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird die Zelle " & Zelle.Address(0, 0) & " mit dem Muster " & .Pattern & " versehen" & vbLf
 'Musterfarbe
 If Not .PatternColorIndex = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird das Zellenmuster " & Zelle.Address(0, 0) & " mit der Farbe " & .PatternColorIndex & " versehen" & vbLf
End With
With Zelle.FormatConditions.Item(B).Font
 'Schriftfarbe -4105=Automatische farbe
 If Not .ColorIndex = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird die Zellenschrift in " & Zelle.Address(0, 0) & " mit der Schriftfarbe " & .ColorIndex & " eingefärbt" & vbLf
 'Schriftart
 If Not .Name = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird die Zelle " & Zelle.Address(0, 0) & " mit dem Font " & .Name & " versehen" & vbLf
 'Schriftstärke
 If Not .FontStyle = Empty Then strBF = strBF & "Bei erfüllter Bedingung wird die Zelle " & Zelle.Address(0, 0) & " mit der Schriftstärke " & .FontStyle & " versehen" & vbLf
 'Schriftgrösse
 If Not .Size Then strBF = strBF & "Bei erfüllter Bedingung wird die Zelle " & Zelle.Address(0, 0) & " mit der Schriftgrösse " & .Size & " versehen" & vbLf
End With
With Selection.FormatConditions(B).Borders(xlLeft)
 If Not .LineStyle = Empty Then strBF = strBF & "Bei erfüllter Bedingung erhält die Zelle " & Zelle.Address(0, 0) & " links eine " & Linienart(.LineStyle) & "-Linie in der Breite " & Liniendicke(.Weight) & " mit Farbe " & .ColorIndex & vbLf
End With
With Selection.FormatConditions(B).Borders(xlRight)
 If Not .LineStyle = Empty Then strBF = strBF & "Bei erfüllter Bedingung erhält die Zelle " & Zelle.Address(0, 0) & " rechts eine " & Linienart(.LineStyle) & "-Linie in der Breite " & Liniendicke(.Weight) & " mit Farbe " & .ColorIndex & vbLf
End With
With Selection.FormatConditions(B).Borders(xlTop)
 If Not .LineStyle = Empty Then strBF = strBF & "Bei erfüllter Bedingung erhält die Zelle " & Zelle.Address(0, 0) & " oben eine " & Linienart(.LineStyle) & "-Linie in der Breite " & Liniendicke(.Weight) & " mit Farbe " & .ColorIndex & vbLf
End With
With Selection.FormatConditions(B).Borders(xlBottom)
 If Not .LineStyle = Empty Then strBF = strBF & "Bei erfüllter Bedingung erhält die Zelle " & Zelle.Address(0, 0) & " unten eine " & Linienart(.LineStyle) & "-Linie in der Breite " & Liniendicke(.Weight) & " mit Farbe " & .ColorIndex & vbLf
End With
'noch offen :frowning: gibt es die Möglichkeiten alle ? \*grummel\*
' With Selection.Font
' .Strikethrough = False
' .Superscript = False
' .Subscript = False
' .OutlineFont = False
' .Shadow = False
' .Underline = xlUnderlineStyleNone
' End With
End Sub
'
Function Liniendicke(ByVal Nummer) As String
'xlHairline, xlThin, xlMedium oder xlThick. Long Schreib-Lese-Zugriff.
Select Case Nummer
 Case 1
 Liniendicke = "xlHairline"
 Case 2
 Liniendicke = "xlThin"
 Case -4138
 Liniendicke = "xlMedium"
 Case 4
 Liniendicke = "xlxlThick"
 Case Else
 MsgBox "Fehler mit Liniendicke"
End Select
End Function
'
Function Linienart(ByVal Nummer) As String
Select Case Nummer
 Case 1
 Linienart = "xlContinuous"
 Case -4115
 Linienart = "xlDash"
 Case 4
 Linienart = "xlDashDot"
 Case 5
 Linienart = "xlDashDotDot"
 Case -4118
 Linienart = "xlDot"
 Case -4119
 Linienart = "xlDouble"
 Case 13
 Linienart = "xlSlantDashDot"
 Case -4142
 Linienart = "xlLineStyleNone"
 Case Else
 MsgBox "Fehler mit Linienart"
End Select
End Function
'
Sub Selektieren()
Range("A3:E18").Select
End Sub
'
Sub BlattLoeschen()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
wksAltesBlatt.Activate
End Sub

Hallo reinhard,

füge noch ein Modul ein mit nachfolgendem Code, dann müßte es
klappen.

Gruß
Reinhard

Servus,

Tabellenblatt: T:\Report\[Controlling.xls]!Monatsübersicht
 │ A │ B │ C │ D │ E │ F │ G │ H │
──┼────────────┼─────┼──────┼────┼──────┼──────┼───┼───────┤
2 │ 1. Sep. 08 │ 78 │ 4,11 │ 19 │ 3,50 │ 2,55 │ │ 12,7 │
──┼────────────┼─────┼──────┼────┼──────┼──────┼───┼───────┤
3 │ 2. Sep. 08 │ 99 │ 4,71 │ 21 │ 4,13 │ 3,00 │ │ 14,10 │
──┼────────────┼─────┼──────┼────┼──────┼──────┼───┼───────┤
4 │ 3. Sep. 08 │ 93 │ 4,23 │ 22 │ 4,11 │ 3,36 │ │ 15,5 │
──┼────────────┼─────┼──────┼────┼──────┼──────┼───┼───────┤
5 │ 4. Sep. 08 │ 101 │ 5,32 │ 19 │ 4,33 │ 3,55 │ │ 15,8 │
──┴────────────┴─────┴──────┴────┴──────┴──────┴───┴───────┘

Festgelegte Namen:
Zahlenformate der Zellen im gewählten Bereich:
A2:A5
haben das Zahlenformat: [$-407]T. MMM. JJ;@
B2:B5,D2:smiley:5,G2:G5,H2,H4:H5
haben das Zahlenformat: Standard
C2:C5,E2:E5,F2:F5,H3
haben das Zahlenformat: 0,00

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Jetzt klappt es,
vllt lag es dran, dass es so selten verwendet wurde?
DANKE
Liebe Montangmorgen Grüße
Winter