Clever-Excel-Forum

Normale Version: Fehler in Code?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo zusammen,

leider muss ich schon wieder was nachfragen:

Ich habe eine Userform die mir Daten in 2 verschiedene Tabellenblätter überträgt.
Irgendwo im Code habe ich aber wohl einen Fehler, da die Übertragung sehr lange dauert.
Kann mir jemand sagen was ich hier falsch gemacht habe?

Code:
Private Sub Speichern_Click()

If TextBox1.Text <> "" Then
' Eintrag in Rechnungsbuch
   With Sheets("Rechnungsbuch")
       ' letzte freie Zeile in Spalte B finden
       Dim efz As Long
       efz = Application.CountA(.Columns(2)) + 4
       ' Werte eintragen
           Sheets("Rechnungsbuch").Cells(efz, 3) = CDate(Me.TextBox1.Value)      'R-Datum
           Sheets("Rechnungsbuch").Cells(efz, 5) = ComboBox21.Value              'Kunde / Lieferant
           Sheets("Rechnungsbuch").Cells(efz, 4) = TextBox3.Value                'Rechnungsnummer
           Sheets("Rechnungsbuch").Cells(efz, 6) = CCur(Me.TextBox4.Value)       'Rechnungsbetrag
           Sheets("Rechnungsbuch").Cells(efz, 2) = TextBox85.Value               'Forderung/Lieferrechnung
   End With
End If

' Eintrag in Umsatzliste
   With Sheets("Umsatzliste")
       ' letzte freie Zeile in Spalte B finden
       Dim efz2 As Long
       efz2 = Application.CountA(.Columns(2)) + 3
       ' jeweils prüfen ob Artikel ausgefüllt dann Übertrag
       For lngC = 5 To 24
       If Controls("TextBox" & lngC).Value <> "" Then
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 2) = CDate(Me.TextBox1.Value)                      'R-Datum
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 3) = CDate(Controls("TextBox" & lngC).Value)        'L-Datum
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 4) = ComboBox21.Value                               'Kunde / Lieferant
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 5) = TextBox3.Value                                 'Rechnungsnummer
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 6) = Controls("ComboBox" & lngC - 4).Value          'Artikel
           Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 7) = CDbl(Controls("Textbox" & lngC + 20).Value)    'Umsatz
               If Controls("TextBox" & lngC + 60).Value <> "" Then
                   Sheets("Umsatzliste").Cells(efz2 + lngC - 4, 9) = CCur(Controls("TextBox" & lngC + 60))  'Preis / Einheit
               End If
       End If
       Next lngC
   
   End With
         
   Unload Me 'Userform leeren
   Erfassung.Show 'Userform neu starten

End Sub

Vielen Dank mal wieder !

Schöne Grüße

Thomas
Es macht keinen Spaß, deinen Code Schritt für Schritt durchzuinterpretieren um auf einen Vielleicht-Fehler draufzukommen.
Geh doch mal mit F8 im Einzelschritt durch, dann siehst du ja an welcher Stelle der Code lange braucht.
Hallo,

Zitat:Übertragung sehr lange dauert.

was verstehst du denn unter "sehr lange"?
Hallo Klaus-Dieter,

ich habe in einem anderen Tabellenblatt eine ähnliche Userform, wenn ich da auf Speichern klicke dauert es max. 1 Sekunde bis die Daten eingetragen sind.
Bei dieser Userform dauert es ca. 10 Sekunden, egal wieviele Daten ich eingebe.

Daher dachte ich das ich evtl. in der Schleife einen Fehler habe.

Thomas
Ich wiederhole meinen Hinweis von oben!
Hallo Berni,

sorry dein Beitrag hatte sich wohl mit meiner Antwort überschnitten.

Ich teste das gleich mal.

Hab gerade selber gesehen, dass wenn ich nur den oberen Teil eintrage es sehr schnell geht, erst bei der Schleife dauert es.
Ich melde mich gleich nochmal

Thomas
Hallo Thomas,

bei 10 Sekunden mache ich mir keine Gedanken. Ich kenne noch Zeiten, wo das Sortieren von 200 Datensätzen über 3 Minuten gedauert hat.
Also mit F8 habe ich jetzt nichts feststellen können, bin aber auch ziemlicher Anfänger was das angeht.

10 Sekunden finde ich ziemlich lange, da ich die Userform für die Eintragung von eingehenden und ausgehenden Rechnungen nutze.

Ich habe meine anonymisierte Datei mal angehängt, falls jemand Lust hat mal drüberzuschauen?


Vielen Dank und schöne Grüße

Thomas

P.S. Die Userform startet mit dem Pluszeichen oben links im Reiter Rechnungsbuch
Hallo Thomas

ich bekomme die Datei nicht geöffnet, mein Rechner stürzt sofort ab. Schliesst die Anwendung.

Frage:  hast du viele Formeln in der Datei, dann müsste beim Eintragen von Werten in Zellen jedesmal neu berechnet werden. Das kann man vermeiden indem man am Anfang vom Code die Berechnung auf xlManuell stellt, und beim Verlassen wieder auf xlAutomatic.  Leider konnte ich das nicht testen.

mfg  Gast 123
Code:
Private Sub UserForm_Initialize()
   with Sheets("Rechnungsbuch")
       .ListObjects(1).DataBodyRange.Columns(4).AdvancedFilter 2, , .Cells(1, 20), -1
       ComboBox21.List = .Cells(1, 20).CurrentRegion.Offset(1).SpecialCells(2).Value
       .Cells(1, 20).CurrentRegion.ClearContents
   
      .ListObjects(1).DataBodyRange.Columns(1).AdvancedFilter 2, , .Cells(1, 20), -1
       ComboBox22.List = .Cells(1, 20).CurrentRegion.Offset(1).SpecialCells(2).Value
  End With
End Sub
Seiten: 1 2 3