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

Code optimieren

Code optimieren
Kai
Hallo zusammen,
ich bastle grade an einem Makro, das aber (so scheint es mir) stark verbesserungswürdig ist.
es gibt für jeden Kollegen eine Arbeitszeitdatei in der Anwesenheit reinschreibt und zu jeder tätigkeit die er macht die tätigkeitsnummer beginn der tätigkeit, ende und eine beschreibung einträgt.
zu jeder tätigkeit gibt es eine Tätigkeitsdatei.
Mein vba das ich aus der Tätigkeitsdatei starte macht folgendes. öffnet alle MA dateien (ca. 20) sucht die tätigkeit und kopiert die Infos heraus. Leider dauert das ewig. wer kann mir nen Tip geben? Hier der Code:
'Option Explicit
Sub tst()
Dim ErsteFreieZelle As Long
Dim aktuellerBereich As Range
Dim tätigkeit As String
Application.DisplayAlerts = False
Application.ScreenUpdating = False
tätigkeit = 0
tätigkeit = ActiveSheet.Range("b1").Value
Range("A3:F12").ClearContents
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma1.xlsx" '" & zelle.Value & ".xlsx"
Set aktuellerBereich = Range("I7:R368")
aktuellerBereich.Select
For Each zelle In aktuellerBereich.Cells
Application.CutCopyMode = False
zelle.Select
If zelle.Value = tätigkeit Then
ActiveCell.Offset.Range("B1,C1,D1,G1,H1").Select
Selection.Copy
Workbooks(tätigkeit & ".xlsm").Activate
ErsteFreieZelle = Range("A1").End(xlDown).Row + 1
Range("A" & ErsteFreieZelle).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Workbooks("ma1.xlsx").Activate
End If
Next zelle
Workbooks("ma1.xlsx").Close
Workbooks(tätigkeit & ".xlsm").Activate
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma2.xlsx '" & zelle.Value & ".xlsx"
Set aktuellerBereich = Range("I7:R368")
'aktuellerBereich.Select
For Each zelle In aktuellerBereich.Cells
Application.CutCopyMode = False
zelle.Select
If zelle.Value = tätigkeit Then
ActiveCell.Offset.Range("B1,C1,D1,G1,H1").Select
Selection.Copy
Selection.Copy
Workbooks(tätigkeit & ".xlsm").Activate
ErsteFreieZelle = Range("A1").End(xlDown).Row + 1
Range("A" & ErsteFreieZelle).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Workbooks("ma2.xlsx").Activate
End If
Next zelle
Workbooks("ma1.xlsx").Close
Workbooks(tätigkeit & ".xlsm").Activate
MsgBox "Daten aktualisiert"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub

Gruß Kai

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Code optimieren
14.01.2011 19:41:42
Reinhard
Hallo Kai,
kommentiere Option Explicit nicht aus sondern benutze es. Rücke den Code gescheit ein, beim Posten hier benutze Zitat "pre".
Gruß
Reinhard
AW: Code optimieren
14.01.2011 20:26:23
Kai
Hallo Reinhard,
alles klar, hier noch mal der Code in lesbar:
Option Explicit
Sub tst()
Dim ErsteFreieZelle As Long
Dim aktuellerBereich As Range
Dim tätigkeit As String
Dim zelle
Application.DisplayAlerts = False
Application.ScreenUpdating = False
tätigkeit = 0
tätigkeit = ActiveSheet.Range("b1").Value
Range("A3:F12").ClearContents
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma1.xlsx" '" & zelle.Value & ".xlsx"
Set aktuellerBereich = Range("I7:R368")
aktuellerBereich.Select
For Each zelle In aktuellerBereich.Cells
Application.CutCopyMode = False
zelle.Select
If zelle.Value = tätigkeit Then
ActiveCell.Offset.Range("B1,C1,D1,G1,H1").Select
Selection.Copy
Workbooks(tätigkeit & ".xlsm").Activate
ErsteFreieZelle = Range("A1").End(xlDown).Row + 1
Range("A" & ErsteFreieZelle).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Workbooks("ma1.xlsx").Activate
End If
Next zelle
Workbooks("ma1.xlsx").Close
Workbooks(tätigkeit & ".xlsm").Activate
'############Mitarbeiter2#######################
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma2.xlsx '" & zelle.Value & ".xlsx"
Set aktuellerBereich = Range("I7:R368")
aktuellerBereich.Select
For Each zelle In aktuellerBereich.Cells
Application.CutCopyMode = False
zelle.Select
If zelle.Value = tätigkeit Then
ActiveCell.Offset.Range("B1,C1,D1,G1,H1").Select
Selection.Copy
Workbooks(tätigkeit & ".xlsm").Activate
ErsteFreieZelle = Range("A1").End(xlDown).Row + 1
Range("A" & ErsteFreieZelle).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Workbooks("ma2.xlsx").Activate
End If
Next zelle
Workbooks("ma1.xlsx").Close
Workbooks(tätigkeit & ".xlsm").Activate
MsgBox "Daten aktualisiert"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub

Anzeige
AW: Code optimieren
15.01.2011 09:42:51
Reinhard
Hallo Kai,
probiers mal wie nachstehend. In den zwei markierten Zeilen solltest du das Blatt noch referenzieren.
Option Explicit
Sub tst()
Dim ErsteFreieZelle As Long
Dim aktuellerBereich As Range
Dim tätigkeit As String
Dim zelle As Range, wksm As Workbook
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error GoTo hell
tätigkeit = ActiveSheet.Range("b1").Value       'welches Blatt?
Set wksm = Workbooks(tätigkeit & ".xlsm")
Range("A3:F12").ClearContents                   'welches Blatt?
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma1.xlsx" '" & zelle.Value & ".xlsx"
With Workbooks("ma1.xlsx")
For Each zelle In .Range("I7:R368")
Application.CutCopyMode = False
If zelle.Value = tätigkeit Then
zelle.Range("B1,C1,D1,G1,H1").Copy
ErsteFreieZelle = wksm.Range("A1").End(xlDown).Row + 1
wksm.Range("A" & ErsteFreieZelle).PasteSpecial Paste:=xlPasteValues
End If
Next zelle
.Close
End With
'############Mitarbeiter2#######################
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma2.xlsx '" & zelle.Value & ".xlsx"
With Workbooks("ma2.xlsx")
For Each zelle In .Range("I7:R368")
Application.CutCopyMode = False
If zelle.Value = tätigkeit Then
zelle.Range("B1,C1,D1,G1,H1").Copy
ErsteFreieZelle = wksm.Range("A1").End(xlDown).Row + 1
Range("A" & ErsteFreieZelle).PasteSpecial Paste:=xlPasteValues
End If
Next zelle
.Close
End With
wksm.Activate
wksm.Save
hell:
If Err.Number = 0 Then
MsgBox "Daten aktualisiert"
Else
MsgBox Err.Number & xlcr & Err.Description
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Gruß
Reinhard
Anzeige
AW: Code optimieren
15.01.2011 10:58:19
Kai
Hallo Reinhard,
danke für deine Hilfe. Leider bleibt das Makro hier hängen:
ErsteFreieZelle = wksm.Range("A1").End(xlDown).Row + 1
Gruß Kei
AW: Code optimieren
15.01.2011 11:14:24
Reinhard
Hallo Kai,
Sub tst()
Dim ErsteFreieZelle As Long
Dim aktuellerBereich As Range
Dim tätigkeit As String
Dim zelle As Range, wksm As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error GoTo hell
tätigkeit = ActiveSheet.Range("b1").Value       'welches Blatt?
Set wksm = Workbooks(tätigkeit & ".xlsm").Worksheets("Tabelle1")
Range("A3:F12").ClearContents                   'welches Blatt?
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma1.xlsx" '" & zelle.Value & ".xlsx"
With Workbooks("ma1.xlsx").Worksheets("Tabelle1")
For Each zelle In .Range("I7:R368")
Application.CutCopyMode = False
If zelle.Value = tätigkeit Then
zelle.Range("B1,C1,D1,G1,H1").Copy
ErsteFreieZelle = wksm.Range("A1").End(xlDown).Row + 1
wksm.Range("A" & ErsteFreieZelle).PasteSpecial Paste:=xlPasteValues
End If
Next zelle
.Close
End With
'############Mitarbeiter2#######################
Workbooks.Open Filename:= _
"C:\Temp\mitarbeiter\ma2.xlsx '" & zelle.Value & ".xlsx"
With Workbooks("ma2.xlsx").Worksheets("Tabelle1")
For Each zelle In .Range("I7:R368")
Application.CutCopyMode = False
If zelle.Value = tätigkeit Then
zelle.Range("B1,C1,D1,G1,H1").Copy
ErsteFreieZelle = wksm.Range("A1").End(xlDown).Row + 1
wksm.Range("A" & ErsteFreieZelle).PasteSpecial Paste:=xlPasteValues
End If
Next zelle
.Close
End With
wksm.Worksheets("Tabelle1").Activate
wksm.Parent.Save
hell:
If Err.Number = 0 Then
MsgBox "Daten aktualisiert"
Else
MsgBox Err.Number & xlcr & Err.Description
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Gruß
Reinhard
Anzeige
AW: Crossposting o.T.
16.01.2011 12:18:02
Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige