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.

Überschreiben von Daten in einer Datenbankliste
#1
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
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
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.
Antworten Top
#5
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.
Antworten Top
#6
Hallo Ralf

hast du auch vorher

dim c as range

MfG Tom
Antworten Top
#7
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
[-] Folgende(r) 1 Nutzer sagt Danke an IchBinIch für diesen Beitrag:
  • Rabe
Antworten Top
#8
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
[-] Folgende(r) 1 Nutzer sagt Danke an Crazy Tom für diesen Beitrag:
  • Rabe
Antworten Top
#9
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
Antworten Top
#10
Hallo Tom,

(05.08.2016, 11:27)Crazy Tom schrieb: hast du auch vorher

dim c as range

ne, ich hatte es als Double.
Antworten Top


Gehe zu:


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