Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler beim Ausführen eines Makros

Fehler beim Ausführen eines Makros
28.01.2015 10:46:12
Felix
Hallo zusammen,
ich habe ein Problem und komme nicht so richtig weiter...
Ich habe mir zwei Makros geschrieben. Sie haben vom Prinzip her die gleiche Funktion. Sie fügen beide in einem bestimmten Bereich eine Tabelle ein. Der Unterschied ist nur, dass sie unterschiedliche Farben haben.
Jetzt führe ich ein Makro aus und es funktioniert auch alles so, wie ich es gerne möchte. Aber sobald ich das Makro erneut ausführe kommt eine Fehlermeldung und es funktioniert nicht mehr.
Ich glaube, dass es daran liegt, dass der Name der Tabelle die eingefügt wird immer "Tabelle1" ist. Aber ich weis nicht, falls das der Fehler ist, wie ich ihn ausmerzen kann. z.B. Dass der Name der Tabelle sich automatisch erweitert (ungefähr so: Tabelle1; Tabelle2; Tabelle3; Tabelle4 usw....).
Der genau Fehler der auftaucht ist folgender (falls jemand den wissen muss):
Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler
Hier ist das Makro, dass ich mir geschrieben habe:
Sub Okay()
'Bereich in dem die Tabelle eingefügt werden soll, wird nun markiert
ActiveCell.Select
ActiveCell.Offset(0, 0).Select
Selection.End(xlToLeft).Select
ActiveCell.Resize(1, 16).Select
ActiveCell.Offset(0, 0).Select
Selection.End(xlToLeft).Select
ActiveCell.Resize(2, 16).Select
ActiveCell.Offset(0, 0).Select
Selection.End(xlToLeft).Select
ActiveCell.Resize(3, 16).Select
'Der Bereich wurde markiert und jetzt soll die Tabelle in dem Bereich eingefügt werden
ActiveSheet.ListObjects.Add(xlSrcRange, , xlNo).Name = _
"Tabelle1"
Range("Tabelle1[#All]").Select
ActiveSheet.ListObjects("Tabelle1").TableStyle = "TableStyleLight16"
ActiveSheet.ListObjects("Tabelle1").ShowHeaders = False
'Die Tabelle wurde an dem markiertem Bereich eingefügt
'Jetzt wird die Zeile über der frisch eingefügten Tabelle markiert
Selection.End(xlToRight).Select
Selection.End(xlToLeft).Select
ActiveCell.Offset(0, 0).Select
ActiveCell.Offset(-1, 0).Select
ActiveCell.Select
ActiveCell.Offset(0, 0).Select
Selection.End(xlToLeft).Select
ActiveCell.Resize(1, 16).Select
'Nun wird der markierte Bereich verbunden und zentriert
'Außerdem wird er eine Hintergrundfarbe und ein Gitternetz bekommen
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
End Sub

Gruß
Felix

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler beim Ausführen eines Makros
28.01.2015 10:57:54
mumpel
Hallo!
Dürfte dieses Zeile sein, da falsche Syntax: Range("Tabelle1[#All]").Select
So ist es richtig: Sheets("Tabelle1").Range("A11").Select
Gruß, René

Musste auch zweimal hinsehen, Mumpel!
28.01.2015 11:12:36
Klaus
Hi Rene,
So ist es richtig: Sheets("Tabelle1").Range("A11").Select
das ist hier falsch. Er spricht einen als Tabelle definierten Bereich innerhalb eines Blattes an. Der definierte Bereich heißt "Tabelle1". Damit ist die Syntax an dieser Stelle erstmal richtig (wenn auch nicht sinnhaft).
Grüße,
Klaus M.vdT.

AW: Fehler beim Ausführen eines Makros
28.01.2015 10:58:46
Daniel
Hi
du kannst die Tabelle erstellen und sie bearbeiten, ohne dass du den Namen angeben musst:
Erstetze diesen Codeteil
ActiveSheet.ListObjects.Add(xlSrcRange, , xlNo).Name = _
"Tabelle1"
Range("Tabelle1[#All]").Select
ActiveSheet.ListObjects("Tabelle1").TableStyle = "TableStyleLight16"
ActiveSheet.ListObjects("Tabelle1").ShowHeaders = False
durch diesen:
    With ActiveSheet.ListObjects.Add(xlSrcRange, , , xlYes)
.TableStyle = "TableStyleLight16"
.ShowHeaders = False
.Range.Select
End With
Damit ist der Name den Excel vergibt egal und du bekommst diesen Fehler nicht.
Gruß Daniel

Anzeige
AW: Fehler beim Ausführen eines Makros
28.01.2015 11:10:14
Klaus
Hi,
häng doch an den Namen irgendwas dran, damit er eindeutig ist. Zum Beispiel das Datum oder die Zelladresse der ersten Zelle.
Die ganzen überflüssigen Selects habe ich mal rausgeworfen, genauso wie die überflüssigen Makrorekorder-Zeilen. Das eine Select am Anfang bekomme ich nicht weg, weil ich mich mit dem "Tabellen-in-Blatt" einfügen noch nie beschäftigt habe, aber sicher wird auch das nicht benötigt.
Sub Okay()
Dim TabelleName As String
'Bereich in dem die Tabelle eingefügt werden soll, wird nun markiert
ActiveCell.End(xlToLeft).Resize(3, 16).Select
'Der Bereich wurde markiert und jetzt soll die Tabelle in dem Bereich eingefügt werden
TabelleName = "Tabelle1" & ActiveCell.Address
With ActiveSheet
.ListObjects.Add(xlSrcRange, , xlNo).Name = TabelleName
.ListObjects(TabelleName).TableStyle = "TableStyleLight16"
.ListObjects(TabelleName).ShowHeaders = False
End With
'Die Tabelle wurde an dem markiertem Bereich eingefügt
'Jetzt wird die Zeile über der frisch eingefügten Tabelle markiert
'Nun wird der markierte Bereich verbunden und zentriert
'Außerdem wird er eine Hintergrundfarbe und ein Gitternetz bekommen
With Selection.Offset(-1, 0).End(xlToLeft).Resize(1, 16)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Merge
.Borders(xlEdgeLeft).ColorIndex = 0
.Borders(xlEdgeTop).ColorIndex = 0
.Borders(xlEdgeBottom).ColorIndex = 0
.Borders(xlEdgeRight).ColorIndex = 0
.Interior.Color = RGB(177, 160, 199)
End With
End Sub

Grüße,
Klaus M.vdT.

Anzeige
AW: Fehler beim Ausführen eines Makros
28.01.2015 11:36:43
Felix
Hi Klaus,
das klappt genau so, wie ich es haben wollte. Vielen Dank.
Und auch dankeschön an dich Daniel.
Wünsche euch noch einen schönen restlichen Tag :)
Liebe Grüße
Felix

Danke für die Rückmeldung! owT.
28.01.2015 11:39:08
Klaus
.

Nochmal kürzer und ganz ohne select
28.01.2015 11:59:13
Klaus
Felix,
es hat mir keine Ruhe gelassen und ich habe herausgefunden wie man auch das letzte Select aus dem Code entfernen kann. Ausserdem habe ich Daniels Rat eingebaut, das Objekt direkt mit WITH anzusprechen statt den Umweg über den Namen + Zusatz zu machen. Anbei der neue Code:
Sub Okay()
With ActiveSheet.ListObjects.Add(xlSrcRange, ActiveCell.End(xlToLeft).Resize(3, 16), xlNo)
.TableStyle = "TableStyleLight16"
.ShowHeaders = False
With .Range.Cells(1, 1).EntireRow.Offset(-1, 0)
.HorizontalAlignment = xlCenter
.Merge
.Borders(xlEdgeLeft).ColorIndex = 0
.Borders(xlEdgeTop).ColorIndex = 0
.Borders(xlEdgeBottom).ColorIndex = 0
.Borders(xlEdgeRight).ColorIndex = 0
.Interior.Color = RGB(177, 160, 199)
End With
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Korrektur :-)
28.01.2015 12:11:09
Klaus
Wollte die Datei grad schließen, bin dann aber zum Glück doch noch nach rechts gescrollt :-)
EntireRow ist natürlich quatsch. So ist es besser (und leichter zu modifizieren)
Sub Okay()
Const TabelleBreite As Long = 16
Const TabelleTiefe As Long = 3
With ActiveSheet.ListObjects.Add(xlSrcRange, ActiveCell.End(xlToLeft).Resize(TabelleTiefe,  _
TabelleBreite), xlNo)
.TableStyle = "TableStyleLight16"
.ShowHeaders = False
With .Range.Cells(1, 1).Offset(-1, 0).Resize(1, TabelleBreite)
.HorizontalAlignment = xlCenter
.Merge
.Borders(xlEdgeLeft).ColorIndex = 0
.Borders(xlEdgeTop).ColorIndex = 0
.Borders(xlEdgeBottom).ColorIndex = 0
.Borders(xlEdgeRight).ColorIndex = 0
.Interior.Color = RGB(177, 160, 199)
End With
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Korrektur :-)
28.01.2015 13:57:13
Felix
Vielen Danke nochmal für die überarbeitung :)
Sieht echt super aus und funktioniert genau so gut! Optimal!
Liebe Grüße und noch einen schönen Tag
Felix

erneut Danke für die Rückmeldung! owT.
28.01.2015 14:08:45
Klaus
.

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige