Clever-Excel-Forum

Normale Version: Überschreiben von Daten in einer Datenbankliste
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe eine Datenbankliste, die Angebots- und Rechnungsdaten enthält.

Mit dem folgenden Code schreibe ich die Daten aus der Eingabe-Userform in das Rechnungsformular und in die Datenbankliste. Nun will ich aber die Inhalte in der Datenbank überschreiben, wenn es eine Zeile gibt, die dieselbe Rechnungsnummer enthält. Das Format von Angebots - und Rechnungsnummer ist folgendermaßen:
Angebot: A035/2016
Rechnung: R035/2016
Wenn es also ein Angebot gibt, das dieselbe Nummer (in Worten: if rechts(frm_Eingabe.Rechnungsnummer;8) = rechts(Datenbankliste.Angebotsnummer;8)) wie die abzulegende Rechnung hat, dann soll die entsprechende Angebots-Zeile in der Datenbankliste überschrieben werden, ansonsten in der ersten neuen Zeile als Rechnung/Angebot abgelegt werden.

Geht das so? Wie finde ich die Zeilenzahl der Nummer aus Textbox100 in Spalte I der Datenbankliste?
Private Sub CommandButton3_Click()                       'Formular Rechnung füllen und Rechnungsdaten in Datenbank ablegen 
   Dim LoZielZeile As Long
   
   Call BerechneSumme
   
   With Sheets("Rechnung")
      .Cells(17, 8) = TextBox1                           'KFZ-Kennzeichen 
      .Cells(3, 2) = TextBox2                            'Anrede 
      .Cells(4, 2) = TextBox3 & "  " & TextBox4          'Vorname & Name 
      .Cells(5, 2) = TextBox5 & "  " & TextBox6          'Strasse & Nr. 
      .Cells(6, 2) = TextBox7 & "  " & TextBox8          'Plz/Ort 
      .Cells(13, 1) = ComboBox2                          'Angebot / Rechnung 
      .Cells(13, 5) = TextBox100                         'Re.Nr. 
      .Cells(17, 3) = TextBox9                           'Modell/Typ 
      .Cells(19, 3) = TextBox10                          'Erstzulassung 
      .Cells(19, 7) = TextBox11                          'FIN 
      For j = 23 To 33                                   'Arbeitsgang 1 - 11 
         .Cells(j, 1) = Me.Controls("Textbox" & j - 8)
      Next j
      For j = 23 To 33                                   'Arbeits-Wert zu Arbeitsgang 1 - 11 
         .Cells(j, 6) = Me.Controls("Textbox" & j + 78)
      Next j
      For j = 23 To 33                                   'Einzelpreis zu Arbeitsgang 1 - 11 
         .Cells(j, 7) = Me.Controls("Textbox" & j + 178)
      Next j
      For j = 23 To 33                                   'Euro-Betrag zu Arbeitsgang 1 - 11 
         .Cells(j, 8) = Me.Controls("Textbox" & j + 278)
      Next j
      .Cells(34, 7) = TextBox200                         'Gesamtsumme 
   End With
   
   With Sheets("Datenbankliste")
      If Right(TextBox100, 8) = Right(.Cells(LoZielZeile, 9), 8) Then
         LoZielZeile '= "?"   'Wie finde ich die Zeilenzahl der Nummer aus Textbox100 in Spalte I der Datenbankliste? 
      Else
         LoZielZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'erste leere Zelle in Spalte A (1) 
      End If
      
      For j = 1 To 11                                    'Kundendaten + Kfz-Daten 
         .Cells(LoZielZeile, j) = Me.Controls("Textbox" & j)
      Next j
      .Cells(LoZielZeile, 9) = TextBox100                'Re.Nr. 
      .Cells(LoZielZeile, 10) = Date                     'Re.Datum 
      .Cells(LoZielZeile, 11) = ComboBox2                'Angebot / Rechnung 
      For j = 15 To 25                                   'Arbeitsgang 1 - 11 
         .Cells(LoZielZeile, j) = Me.Controls("Textbox" & j)
      Next j
      For j = 26 To 36                                   'Arbeits-Wert zu Arbeitsgang 1 - 11 
         .Cells(LoZielZeile, j) = Me.Controls("Textbox" & j + 75)
      Next j
      For j = 37 To 47                                   'Einzelpreis zu Arbeitsgang 1 - 11 
         .Cells(LoZielZeile, j) = Me.Controls("Textbox" & j + 164)
      Next j
      For j = 48 To 58                                   'Euro-Betrag zu Arbeitsgang 1 - 11 
         .Cells(LoZielZeile, j) = Me.Controls("Textbox" & j + 253)
      Next j
      .Cells(LoZielZeile, 59) = TextBox200               'Gesamtsumme 
   End With
   
   Bol = False
   Unload Me                  '.Hide 
   Sheets("Rechnung").Select
   Cells(21, 1).Select
End Sub
Hallo Ralf

ich würde mit .Find die Nummer suchen
set c =
if not c is nothing then
lngZiel = c.row
else
lngZiel = loErsteLeereZeile
end if

und dann entsprechend in deinem Code loErsteLeereZeile durch lngZiel ersetzen

MfG Tom
Hi Ralf,

vielleicht bin ich auf dem Holzweg, aber


Code:
If Right(TextBox100, 8) = Right(.Cells(LoZielZeile, 9), 8) Then
        LoZielZeile = .Cells(LoZielZeile, 9).row

Gruß
Ich
Hi Tom,

(05.08.2016, 10:15)Crazy Tom schrieb: [ -> ]ich würde mit .Find die Nummer suchen

ich habe es so versucht:
      Set c = WorksheetFunction.Find(Right(TextBox100, 8), .Range("I2:I" & loErsteLeereZeile - 1))
      If Not c Is Nothing Then
         loZielZeile = c.Row
      Else
         loZielZeile = loErsteLeereZeile
      End If

da kommt der Fehler "Objekt erforderlich" und "c =" ist markiert.
Wenn ich nur das "Set" weglasse, kommt Typen unverträglich bei der "If Not c"... Zeile und "c" ist markiert.
Hi,

(05.08.2016, 10:39)IchBinIch schrieb: [ -> ]vielleicht bin ich auf dem Holzweg, aber

das wäre vermutlich die Lösung, aber ich habe gemerkt, daß ich für die If-Funktion ja gar kein LoZielZeile habe, darum geht auch meine If-Funktion nicht.
Hallo Ralf

hast du auch vorher

dim c as range

MfG Tom
Ungetestet
Code:
Dim loZielZeile as Range

With Sheets("Datenbankliste")
Set loZielZeile = .Range("I2:I").Find(what:=Right(Textbox100, 8), lookat:=xlWhole)
   loZielZeile = loZielZeile.Row
   
End With

In Ergänzung:
"Find" erwartet einen Sting. Eine Textbox gibt einen String zurück.

Den Ergänzungs-Code habe ich wieder rausgenommen wegen groben Unfugs Blush
Hallo Ralf

so habe ich es jetzt getestet

Code:
Private Sub CommandButton1_Click()
   Dim c As Range
   Dim strSuche As String
   Dim loZielZeile As Long
   Dim loErsteFreie As Long
   strSuche = Right(TextBox100, 8)
   With Sheets("Datenbankliste")
       loErsteFreie = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
       Set c = .Columns(9).Find(strSuche, LookIn:=xlValues, lookat:=xlPart)
           If Not c Is Nothing Then
           loZielZeile = c.Row
       Else
           loZielZeile = loErsteFreie
       End If
   End With
   MsgBox loZielZeile
End Sub
MfG Tom
Hallo,

danke für eure Hilfe!

Ich habe jetzt auch eine Lösung gefunden:
Private Sub CommandButton3_Click()                       'Formular Rechnung füllen und Rechnungsdaten in Datenbank ablegen 
   Dim loErsteLeereZeile As Long
   Dim loZielZeile As Long
   Dim loZeile As Long
   Dim strX As String
   
   Call BerechneSumme
   
   With Sheets("Rechnung")
   .Cells(17, 8) = TextBox1                           'KFZ-Kennzeichen 
   .Cells(3, 2) = TextBox2                            'Anrede 
   .Cells(4, 2) = TextBox3 & "  " & TextBox4          'Vorname & Name 
   .Cells(5, 2) = TextBox5 & "  " & TextBox6          'Strasse & Nr. 
   .Cells(6, 2) = TextBox7 & "  " & TextBox8          'Plz/Ort 
   .Cells(13, 1) = ComboBox2                          'Angebot / Rechnung 
   .Cells(13, 5) = TextBox100                         'Re.Nr. 
   .Cells(17, 3) = TextBox9                           'Modell/Typ 
   .Cells(19, 3) = TextBox10                          'Erstzulassung 
   .Cells(19, 7) = TextBox11                          'FIN 
   For j = 23 To 33                                   'Arbeitsgang 1 - 11 
      .Cells(j, 1) = Me.Controls("Textbox" & j - 8)
   Next j
   For j = 23 To 33                                   'Arbeits-Wert zu Arbeitsgang 1 - 11 
      .Cells(j, 6) = Me.Controls("Textbox" & j + 78)
   Next j
   For j = 23 To 33                                   'Einzelpreis zu Arbeitsgang 1 - 11 
      .Cells(j, 7) = Me.Controls("Textbox" & j + 178)
   Next j
   For j = 23 To 33                                   'Euro-Betrag zu Arbeitsgang 1 - 11 
      .Cells(j, 8) = Me.Controls("Textbox" & j + 278)
   Next j
   .Cells(34, 7) = TextBox200                         'Gesamtsumme 
   End With
   
   With Sheets("Datenbankliste")
      loErsteLeereZeile = .Cells(Rows.Count, 9).End(xlUp).Row + 1 'erste leere Zelle in Spalte I (9) 
      strX = "A" & Right(TextBox100, 8)
      For i = 2 To loErsteLeereZeile - 1
         If Cells(i, 9) = strX Then
            loZielZeile = i
            Exit For
         Else
            loZielZeile = loErsteLeereZeile
         End If
      Next i
      
      For j = 1 To 11                                    'Kundendaten + Kfz-Daten 
         .Cells(loZielZeile, j) = Me.Controls("Textbox" & j)
      Next j
      .Cells(loZielZeile, 9) = TextBox100                'Re.Nr. 
      .Cells(loZielZeile, 10) = Date                     'Re.Datum 
      .Cells(loZielZeile, 11) = ComboBox2                'Angebot / Rechnung 
      For j = 15 To 25                                   'Arbeitsgang 1 - 11 
         .Cells(loZielZeile, j) = Me.Controls("Textbox" & j)
      Next j
      For j = 26 To 36                                   'Arbeits-Wert zu Arbeitsgang 1 - 11 
         .Cells(loZielZeile, j) = Me.Controls("Textbox" & j + 75)
      Next j
      For j = 37 To 47                                   'Einzelpreis zu Arbeitsgang 1 - 11 
         .Cells(loZielZeile, j) = Me.Controls("Textbox" & j + 164)
      Next j
      For j = 48 To 58                                   'Euro-Betrag zu Arbeitsgang 1 - 11 
         .Cells(loZielZeile, j) = Me.Controls("Textbox" & j + 253)
      Next j
      .Cells(loZielZeile, 59) = TextBox200               'Gesamtsumme 
   End With
   
   Bol = False
   Unload Me                  '.Hide 
   Sheets("Rechnung").Select
   Cells(21, 1).Select
End Sub
Hallo Tom,

(05.08.2016, 11:27)Crazy Tom schrieb: [ -> ]hast du auch vorher

dim c as range

ne, ich hatte es als Double.