Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fehler in Code?
#1
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
Antworten Top
#2
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.
Schöne Grüße
Berni
Antworten Top
#3
Hallo,

Zitat:Übertragung sehr lange dauert.

was verstehst du denn unter "sehr lange"?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#4
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
Antworten Top
#5
Ich wiederhole meinen Hinweis von oben!
Schöne Grüße
Berni
Antworten Top
#6
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
Antworten Top
#7
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.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
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


Angehängte Dateien
.xlsb   Warenwirtschaft Forum.xlsb (Größe: 858,12 KB / Downloads: 9)
Antworten Top
#9
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
Antworten Top
#10
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste