Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
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

Laufzeitfehler '1004' NUR bei UNgeöffnetem Sheet

Laufzeitfehler '1004' NUR bei UNgeöffnetem Sheet
Tommy
Moin Moin,
ich bekomme bei meinem Makro immer den Laufzeitfehler 1004 - Die Select-Methode des Range-Objekts konnte nicht ausgeführt werden.
Die Fehlermeldung kommt aber nur, wenn das Tabellenblatt "ManuelleListe" nicht geöffnet. Ansonsten klappt es.
Ich kann mir das nicht erklären.
Als Fehlerzeile wird myRange.Select markiert.
Das myRange habe ich nur eingeführt, weil ich im internet gelesen habe, dass sich mannchmal dieser Fehler damit beheben lässt.
Habe den Code auch schon in eine neue "frische" Arbeitsmappe kopiert. Gleiches Problem. Das heißt, wenn ihr den Code kopiert und ein Tabellenblatt mit dem Namen "ManuelleListe" erstellt, könnt ihr den Code testen.
Der komplette Code ist wie folgt:
Public Sub AbbildenLagerlayout()
Dim intExAnzGang As Integer             ' Anzahl Gänge
Dim intExAnzPalGang As Integer          ' Anzahl Paletten pro Gang
intExAnzGang = 10
intExAnzPalGang = 20
'With ThisWorkbook.Worksheets("Parameter") ' liest die WErte aus dem excel sheet ein
'    intExAnzGang = .Range("I7").Value
'    intExAnzPalGang = .Range("I8").Value
'End With
Dim RunGang As Integer
Dim RunPal As Integer
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("ManuelleListe")
ThisWorkbook.Worksheets("ManuelleListe").Range("B3:ZZ3").ClearContents
ThisWorkbook.Worksheets("ManuelleListe").Range("B4:ZZ1000").Clear
Dim myRange As Range
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
For RunPal = 1 To intExAnzPalGang
wks.Cells(3 + RunPal, 1).Value = RunPal
Next RunPal
For RunGang = 1 To intExAnzGang
wks.Cells(3, RunGang * 2).Value = RunGang
Set myRange = wks.Range(wks.Cells(4, RunGang * 2), wks.Cells(3 + intExAnzPalGang, RunGang *  _
_
2))
myRange.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
Next
ThisWorkbook.Worksheets("ManuelleListe").Rows(4 & ":" & (4 + intExAnzPalGang)).Select
Selection.RowHeight = 40
ThisWorkbook.Worksheets("ManuelleListe").Range(Columns(2), Columns(2 + intExAnzGang * 2)).  _
_
Select
Selection.ColumnWidth = 4
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Ich weiß leider einfach nicht merh weiter. Wenn du mir hier helfen kansnt, wäre ich dir serh dankbar!
Grüße
Tommy

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Laufzeitfehler '1004' NUR bei UNgeöffnetem Sheet
29.04.2010 15:51:54
Björn
Hallo,
lass das select ganz weg.
Statt
myRange.Select
Selection.Borders...
Kannst du gleich
myRange.Borders...
schreiben
Gruß
Björn B.
Vielen Dank, funzt, Aber ....
29.04.2010 16:10:53
Tommy
Hi Björn,
vielen Dank. habe das alles geändert. jetzt tritt aber der Fehler noch ganz am Ende auf.
Und zwar in dieser Zeile:
ThisWorkbook.Worksheets("ManuelleListe").Range(Columns(2), Columns(2 + intExAnzGang * 2)).ColumnWidth = 4
Der Fehler heißt 1004 Anwedungs- oder objektdefinierter Fehler. Und tritt weider nur auf, wenn das Blatt nicht geöffnet ist.
Der komplette geänderte Code ist:
Public Sub AbbildenLagerlayout()
Dim intExAnzGang As Integer             ' Anzahl Gänge
Dim intExAnzPalGang As Integer          ' Anzahl Paletten pro Gang
intExAnzGang = 10
intExAnzPalGang = 20
'With ThisWorkbook.Worksheets("Parameter") ' liest die WErte aus dem excel sheet ein
'    intExAnzGang = .Range("I7").Value
'    intExAnzPalGang = .Range("I8").Value
'End With
Dim RunGang As Integer
Dim RunPal As Integer
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("ManuelleListe")
ThisWorkbook.Worksheets("ManuelleListe").Range("B3:ZZ3").ClearContents
ThisWorkbook.Worksheets("ManuelleListe").Range("B4:ZZ1000").Clear
Dim myRange As Range
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
For RunPal = 1 To intExAnzPalGang
wks.Cells(3 + RunPal, 1).Value = RunPal
Next RunPal
For RunGang = 1 To intExAnzGang
wks.Cells(3, RunGang * 2).Value = RunGang
Set myRange = wks.Range(wks.Cells(4, RunGang * 2), wks.Cells(3 + intExAnzPalGang, RunGang *  _
2))
myRange.Borders(xlDiagonalDown).LineStyle = xlNone
myRange.Borders(xlDiagonalUp).LineStyle = xlNone
With myRange.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With myRange.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With myRange.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With myRange.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
myRange.Borders(xlInsideVertical).LineStyle = xlNone
With myRange.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
Next
ThisWorkbook.Worksheets("ManuelleListe").Rows(4 & ":" & (4 + intExAnzPalGang)).RowHeight =  _
40
    ThisWorkbook.Worksheets("ManuelleListe").Range(Columns(2), Columns(2 + intExAnzGang * 2)) _
.ColumnWidth = 4
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Anzeige
Versuch es so
29.04.2010 16:18:49
Björn
Hallo,
schreibe statt Deiner fehlerhaften Zeile mal das:
ThisWorkbook.Worksheets("ManuelleListe").Columns(2 & ":" & (2 + intExAnzGang * 2)) _
.ColumnWidth = 4
ISt aber nicht getestet.
Gruß
Björn B.
AW: Versuch es so
29.04.2010 16:40:23
Tommy
Hallo Björn,
jetzt läuft alles. Die letzte zeile muss, so wie Erich es geschrieben hat, heißen:
With wks
.Rows(4 & ":" & (4 + intExAnzPalGang)).RowHeight = 40
.Range(.Columns(2), .Columns(2 + intExAnzGang * 2)).ColumnWidth = 4
End With
Vielen Dank euch beiden.
gruß
Tommy
Code ein wenig umgeschrieben
29.04.2010 16:16:59
Erich
Hi,
ohne mich um Lauffähigkeit und Zweck des Codes zu kümmern, hab ich ihn ein wenig umgeschrieben.
Dim-Anweisungen sollten alle am Anfang der Prozedur stehen.
Wenn man eine Objektvariable (wks) deklariert und füllt, verwendet man sie besser überall.
With ist fast immer nützlich, Select fast immer schädlich.
Statt
X. Select
Selection.Machwasmit
schreibt man besser
X.Machwasmit
Man sagt doch auch nicht
- Greife die Tür
- Schließe, was zu gegriffen hast
sondern:
- Schließe die Tür

Option Explicit
Public Sub AbbildenLagerlayout()
Dim intExAnzGang As Integer             ' Anzahl Gänge
Dim intExAnzPalGang As Integer          ' Anzahl Paletten pro Gang
Dim RunGang As Integer
Dim RunPal As Integer
Dim wks As Worksheet
Dim myRange As Range
intExAnzGang = 10
intExAnzPalGang = 20
'With ThisWorkbook.Worksheets("Parameter") ' liest die WErte aus dem excel sheet ein
'    intExAnzGang = .Range("I7").Value
'    intExAnzPalGang = .Range("I8").Value
'End With
Set wks = ThisWorkbook.Worksheets("ManuelleListe")
wks.Range("B3:ZZ3").ClearContents
wks.Range("B4:ZZ1000").Clear
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
For RunPal = 1 To intExAnzPalGang
wks.Cells(3 + RunPal, 1).Value = RunPal
Next RunPal
For RunGang = 1 To intExAnzGang
wks.Cells(3, RunGang * 2).Value = RunGang
Set myRange = wks.Range(wks.Cells(4, RunGang * 2), _
wks.Cells(3 + intExAnzPalGang, RunGang * 2))
With wks.Range(wks.Cells(4, RunGang * 2), _
wks.Cells(3 + intExAnzPalGang, RunGang * 2))
'      myRange.Select Wozu? - Weg damit!
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
.Borders(xlInsideVertical).LineStyle = xlNone
With .Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlMedium
End With
End With
Next
wks.Rows(4 & ":" & (4 + intExAnzPalGang)).RowHeight = 40
wks.Range(Columns(2), Columns(2 + intExAnzGang * 2)).ColumnWidth = 4
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
umgeschriebener Code - Korrektur
29.04.2010 16:22:02
Erich
Hi,
da müsste es heißen
wks.Range(wks.Columns(2), wks.Columns(2 + intExAnzGang * 2)).ColumnWidth = 4,
Wenn man das wks. vor Columns(2) weglässt, ist Spalte B des aktiven Blatts gemeint, nicht Spalte B von wks.
Besser machte man natürlich auch das mit With:

With wks
.Rows(4 & ":" & (4 + intExAnzPalGang)).RowHeight = 40
.Range(.Columns(2), .Columns(2 + intExAnzGang * 2)).ColumnWidth = 4
End With
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: umgeschriebener Code - Korrektur
29.04.2010 16:37:56
Tommy
Super, Vielen Dank.
Jetzt funktioniert alles. Auch vielen Dank fürs aufräumen ;\ Werde dies ab jetzt merh beherzigen.
Grüße
Tommy
PS:
Die Selections waren deswegen überall drin, weil ich einen Teil mit dem Rekorder aufgenommen habe, da ich das erste Mal formatierungen ändern wollte.
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige