ich habe mir über viele Jahre hinweg eine Excelliste gebastelt und über verschiedenen Quellen ein Makro gebastelt.
Dieses Makro füllt Eingabewerte aus einer User Form in eine Zeile, dort werden dann über verschiedene Formeln weitere Werte ergänzt und dann kopiert das Makro diese Zeile an das Ende einer Tabelle. Soweit so gut und hat auch immer fumktioniert.
Jetzt möchte ich aber diese Arbeitsmappe auch anderne Personen zugänglich machen und habe das Makro um einen Blattschutz erweitert in dem der Autofilter aber immer noch funktionieren soll.
Das Ergebnis ist: Das Makro macht was es soll allerdings ist die Laufzeit >5sec.
Daher meine Frage: "Wo kann hier noch etwas Geschwindigkeit gutmacht werden, ohne das Makro grundlegend zu ändern?"
Private Sub CommandButton2_Click() 'Lieferschein erfassen'
Dim Blatt As Worksheet
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Unprotect ("123")
Next
Dim lngIndex As Long
For lngIndex = 1 To 6
If Controls("TextBox" & CStr(lngIndex)).TextLength = 0 Then
MsgBox "Es sind ein oder mehrere Felder nicht ausgefüllt!", vbOKOnly Or vbCritical, "Eingabefehler"
Exit Sub
End If
Next
Dim inta As Integer
Set frm = UserForm1
Sheets("Admin").Activate
With frm
Cells(3, 10).Value = .TextBox1.Value
Cells(3, 1).Value = DateValue(TextBox2)
Cells(3, 2).Value = CDbl(TextBox3.Value)
Cells(3, 4).Value = CDbl(TextBox4.Value)
Cells(3, 12).Value = .TextBox5.Value
Cells(3, 13).Value = .TextBox6.Value
End With
Worksheets("Admin").Range("A3:W3").Copy
Zeile = Worksheets("Erfassung").Range("A65535").End(xlUp).Row
If Application.IsText(Worksheets("Erfassung").Cells(Zeile, 1)) Then Zeile = Zeile + 1 Else _
Zeile = Zeile + 1
Worksheets("Erfassung").Cells(Zeile, 1).PasteSpecial Paste:=xlPasteValues
Dim tb As Object
For Each tb In UserForm1.Controls
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox3.SetFocus
Next tb
inta = MsgBox("Der Lieferschein wurde übernommen!", vbOKOnly + vbInformation, "Erfolgreiche Eingabe")
ActiveSheet.Unprotect
Range("O3:W3").Select
Selection.ClearContents
Sheets("Admin").Visible = xlVeryHidden
For Each Blatt In ActiveWorkbook.Sheets
Blatt.Protect Password:="123", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
Next
UserForm1.Hide
Sheets("Erfassung").Activate
UserForm1.Show
End Sub
Vielen Dank schon mal und wie gesagt das Makro macht was es soll ich weiß hatl nur nicht so recht wieso :-)
Gruss Thomas