Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Select

Forumthread: Select

Select
09.07.2018 10:56:48
Gregor
Hallo
Untenstehendes Makro funktioniert auf meinem PC ohne Fehlermeldung. Sobald dieses Makro von einem Mitarbeiter auf einem anderen PC ausgeführt wird, erfolgt eine erste Fehlermeldung 'Laufzeitfehler 1004' beim Abschnitt Hinfahrt beim Range-Befehl, weitere bei jedem Range-Befehl. Ich kann das lösen, wenn ich vor jedem Range-Befehl den Befehl select einfüge (siehe zweites Makro). Gibt es dafür eine Erklärung, eigentlich sollte der select-Befehl ja unnötig sein und vermieden werden.
Makro ohne select

Sub Übertragen()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim arrBlatt(20)
Dim lZeile_Copy
lastRow = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
arrBlatt(i - 1) = Worksheets("Master").Cells(i, "A")
Next i
For z = 1 To lastRow - 1
If WorksheetExists("DC " & arrBlatt(z)) Then
Else
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "DC " & arrBlatt(z)
Worksheets("DC " & arrBlatt(z)).Select
ActiveWindow.Zoom = 80
MsgBox "Blatt DC " & arrBlatt(z) & " am Ende neu angelegt"
End If
Next
Blattname = Worksheets(1).Name
With Worksheets(Blattname)
.Select
lSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Zeile_Hin = Application.Match("DC Hinfahrt", .Columns(1), 0)
Zeile_Rück = Application.Match("DC Rückfahrt", .Columns(1), 0)
For y = 1 To lastRow - 1
lZeile = .Cells(Cells(Zeile_Rück, 1).End(xlUp).Row + 1, 1).Row
Spalte = 0
Zähler = 1
With Worksheets("DC " & arrBlatt(y)).Rows.EntireRow
.ClearContents 'löscht die Inhalte, bzw. Formeln
.ClearFormats  'löscht die Formate
End With
'Hinfahrt
.Range(Cells(Zeile_Hin, 1), Cells(lZeile, 1)).Copy Worksheets("DC " & arrBlatt(y)). _
Cells(1, Zähler)
For Start = 1 To lSpalte
Spalte_Copy = Application.Match(arrBlatt(y), .Range(.Cells(Zeile_Hin, Start), . _
Cells(Zeile_Hin, lSpalte)), 0)
If IsError(Spalte_Copy) Then GoTo weiter
Start = Start + Spalte_Copy - 1
Spalte = Spalte + Spalte_Copy
Zähler = Zähler + 1
.Range(Cells(Zeile_Hin, Spalte), Cells(lZeile - 1, Spalte)).Copy
With Sheets("DC " & arrBlatt(y))
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteColumnWidths
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteFormats
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteValues
End With
Next Start
weiter:
'Rückfahrt
lZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Spalte = 0
Zähler = 1
lZeile_Copy = Worksheets("DC " & arrBlatt(y)).Cells(Rows.Count, 1).End(xlUp).Row
.Range(Cells(Zeile_Rück, 1), Cells(lZeile, 1)).Copy Worksheets("DC " & arrBlatt(y)). _
Cells(lZeile_Copy + 6, Zähler)
For Start = 1 To lSpalte
Spalte_Copy = Application.Match(arrBlatt(y), .Range(.Cells(Zeile_Rück, Start), . _
Cells(Zeile_Rück, lSpalte)), 0)
If IsError(Spalte_Copy) Then GoTo weiter1
Start = Start + Spalte_Copy - 1
Spalte = Spalte + Spalte_Copy
Zähler = Zähler + 1
.Range(Cells(Zeile_Rück, Spalte), Cells(lZeile, Spalte)).Copy
With Sheets("DC " & arrBlatt(y))
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteColumnWidths
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteFormats
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteValues
End With
Next Start
weiter1:
Next y
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Makro mit select

Sub Übertragen()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim arrBlatt(20)
Dim lZeile_Copy
lastRow = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
arrBlatt(i - 1) = Worksheets("Master").Cells(i, "A")
Next i
For z = 1 To lastRow - 1
If WorksheetExists("DC " & arrBlatt(z)) Then
Else
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "DC " & arrBlatt(z)
Worksheets("DC " & arrBlatt(z)).Select
ActiveWindow.Zoom = 80
MsgBox "Blatt DC " & arrBlatt(z) & " am Ende neu angelegt"
End If
Next
Blattname = Worksheets(1).Name
With Worksheets(Blattname)
.Select
lSpalte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Zeile_Hin = Application.Match("DC Hinfahrt", .Columns(1), 0)
Zeile_Rück = Application.Match("DC Rückfahrt", .Columns(1), 0)
For y = 1 To lastRow - 1
lZeile = .Cells(Cells(Zeile_Rück, 1).End(xlUp).Row + 1, 1).Row
Spalte = 0
Zähler = 1
With Worksheets("DC " & arrBlatt(y)).Rows.EntireRow
.ClearContents 'löscht die Inhalte, bzw. Formeln
.ClearFormats  'löscht die Formate
End With
'Hinfahrt
.Select
.Range(Cells(Zeile_Hin, 1), Cells(lZeile, 1)).Copy Worksheets("DC " & arrBlatt(y)).  _
Cells(1, Zähler)
For Start = 1 To lSpalte
Spalte_Copy = Application.Match(arrBlatt(y), .Range(.Cells(Zeile_Hin, Start), . _
Cells(Zeile_Hin, lSpalte)), 0)
If IsError(Spalte_Copy) Then GoTo weiter
Start = Start + Spalte_Copy - 1
Spalte = Spalte + Spalte_Copy
Zähler = Zähler + 1
.Select
.Range(Cells(Zeile_Hin, Spalte), Cells(lZeile - 1, Spalte)).Copy
With Sheets("DC " & arrBlatt(y))
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteColumnWidths
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteFormats
.Cells(1, Zähler).PasteSpecial Paste:=xlPasteValues
End With
Next Start
weiter:
'Rückfahrt
lZeile = .Cells(Rows.Count, 1).End(xlUp).Row
Spalte = 0
Zähler = 1
lZeile_Copy = Worksheets("DC " & arrBlatt(y)).Cells(Rows.Count, 1).End(xlUp).Row
.Select
.Range(Cells(Zeile_Rück, 1), Cells(lZeile, 1)).Copy Worksheets("DC " & arrBlatt(y)). _
Cells(lZeile_Copy + 6, Zähler)
For Start = 1 To lSpalte
Spalte_Copy = Application.Match(arrBlatt(y), .Range(.Cells(Zeile_Rück, Start), . _
Cells(Zeile_Rück, lSpalte)), 0)
If IsError(Spalte_Copy) Then GoTo weiter1
Start = Start + Spalte_Copy - 1
Spalte = Spalte + Spalte_Copy
Zähler = Zähler + 1
.Select
.Range(Cells(Zeile_Rück, Spalte), Cells(lZeile, Spalte)).Copy
With Sheets("DC " & arrBlatt(y))
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteColumnWidths
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteFormats
.Cells(lZeile_Copy + 6, Zähler).PasteSpecial Paste:=xlPasteValues
End With
Next Start
weiter1:
Next y
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Vielen Dank und Gruss
Gregor
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select
09.07.2018 11:54:54
Rob
Ich denke es liegt daran, dass Du in Deiner With Worksheet-Anweisung anschließend noch eine ActiveSheet.UsedRange-Anweisung hast, d.h. er bezieht sich auf das aktive Arbeitsblatt (ActiveSheet) und nicht auf das Sheet der With-Anweisung.
AW: Select
09.07.2018 11:57:11
UweD
Hallo
du musst auch innerhalb von Range(cells... auf das Blatt referenzieren
also z.B. hier
lastRow = Worksheets("Master").Cells(Rows.Count, 1).End(xlUp).Row

wird zu
lastRow = Worksheets("Master").Cells(Worksheets("Master").Rows.Count, 1).End(xlUp).Row
oder wie teilweise schon gemacht.

with Worksheets("Master")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
end with

dto.
lZeile = .Cells(.Cells(Zeile_Rück, 1).End(xlUp).Row + 1, 1).Row
usw.
(Alles ungeprüft)
LG UweD
Anzeige
AW: Select
09.07.2018 13:27:43
Gregor
Hallo zusammen
Vielen Dank an beide. Mit dem konsequenten Referenzieren gemäss Uwe funktioniert das Makro auch auf den MA-PC's.
Gruss Gregor
Prima! Danke für die Rückmeldung. owT
09.07.2018 14:59:08
UweD
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige