Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA steuert nicht richtigen Datensatz an.

VBA steuert nicht richtigen Datensatz an.
Wolfgang
Hallo,
ich hoffe zunächst, dass es richtig war, direkt eine Mustermappe 'dranzuhängen. Ich habe hierin folgendes Problem:
Frau Musterfrau kommt in der Tabelle insgesamt 3 X vor, jedoch jeweils mit einem unterschiedlichen Beginntermin. Ändere ich nun den Status von "vorgemerkt" auf "entschieden", wird derzeit immer nur der erste erscheinende Datensatz in der Tabelle angesteuert und ggfs. überschrieben. Ich vermute, dass das Problem im Code Aendern liegt. Ich habe schon versucht, noch als ergänzendes Merkmal den Beginntermin in Spalte E (der wäre nämlich in jedem Datensatz bei gleichen Personen anders) einzbauen. Bekomme das aber irgendwie nicht hin. Schön wäre also, wenn Excel in Abhängigkeit zum Namen und Vornamens (Spalte A und B) sowie zum Beginntermin Spalte E den zu ändernden Datensatz der über UF Listbox1 ja markiert wird, ansteuert und dann entsprechend ändert. Wäre da für jede Hilfestellung sehr dankbar.
Herzliche Grüße
Wolfgang
https://www.herber.de/bbs/user/68306.xls
Merke vor dem ÄNDERN die Zeilennr.
01.03.2010 18:43:51
NoNet
Hallo Wolfgang,
lies die Zeilennr. des entsprechenden Datensatzes mit aus (evtl. in eine öffentliche ARRAY-Variable oder auch in das Listenfeld) und zeige ihn ggf. sogar im UF an.
Damit kannst Du beim Speichern gezielt auf die richtige Zeilennr. zurückspeichern und musst nicht wieder per Schleife die Zeilennr. "erraten".
Gruß, NoNet
AW: Merke vor dem ÄNDERN die Zeilennr.
01.03.2010 18:49:15
Chris
Servus,
Private Sub Aendern()   '  Ändern  #######liegt hier evtl. das Problem? - Range(A2:B"..., müßte  _
das evtl. auch um E erweitert werden, wenn ja wie?
Dim intZ As Integer
Dim spalte As Long
Dim durchsuchen, finden As Range
Set durchsuchen = Sheets("Daten").Range("A2:B" & _
Sheets("Daten").Range("A65536").End(xlUp).Row)
For Each finden In durchsuchen
If finden.Text = TextBox1.Text Then
If finden.Offset(0, 1).Text = TextBox2.Text And finden.Offset(0, 2).Text = TextBox3  _
Then ' Name, Vorname und Kundennummer abfragen
If CDate(finden.Offset(0, 4)) = CDate(TextBox5) And CDate(finden.Offset(0, 5)) =  _
CDate(TextBox6) Then ' Start- und Enddatum abfragen
intZ = finden.Row
Exit For
End If
End If
End If
Next finden
Cells(intZ, 1) = TextBox1 ' Name
Cells(intZ, 2) = TextBox2 ' Vorname
Cells(intZ, 3) = TextBox3 ' Kundennummer
Cells(intZ, 4) = TextBox4 ' Team
Cells(intZ, 5) = TextBox5 ' von
Cells(intZ, 6) = TextBox6 ' bis
Cells(intZ, 7) = TextBox7 ' Dauer in Monaten
Cells(intZ, 8) = TextBox8 ' Sorte
Cells(intZ, 9) = CLng(TextBox9)  'geplant
Cells(intZ, 10) = CLng(TextBox10) 'entschieden
Cells(intZ, 11) = CLng(TextBox11) 'teilgenommen
If TextBox12.Value = "X" Then 'neu
Cells(intZ, 12) = (TextBox12) 'neu
Else 'neu
Cells(intZ, 12) = CLng(TextBox12)  'storniert
End If 'neu
Cells(intZ, 13) = CLng(TextBox13)  '1 Jahr
Cells(intZ, 14) = CLng(TextBox14)  '2 Jahr
Cells(intZ, 15) = CLng(TextBox15)  '2 Jahr
Cells(intZ, 16) = CLng(TextBox16)  'folg. Jahr
'sorgt dafür, dass in Zelle mit mehr als 0 ein Kommentar eingetragen wird
For spalte = 9 To 12
If Cells(intZ, spalte).Value > 0 Then
On Error Resume Next
Cells(intZ, spalte).AddComment
On Error GoTo 0
Cells(intZ, spalte).Comment.Text Text:=Format(Date, "DD.MM.YYYY") & Chr(10) & Environ("Username" _
)
End If
Next spalte
TextBox17.SetFocus
Call ZaehlenWenn
Unload Me
Application.ScreenUpdating = True
End Sub

Ich denke mal, dass das genug Bedingungen sind, um die richtige Person zu finden. Allerdings hat NoNet recht. Wenn du dir die Zeilennummer merkst, kannst du dir das ersparen.
Gruß
Chris
Anzeige
AW: Nachtrag
01.03.2010 18:52:51
Chris
Servus Wolfgang,
bedenke, dass bei Änderung des Namens bzw. der Kundennummer das Makro natürlich versagt, da diese dann ja nicht mehr übereinstimmen.
Gruß
Chris
Danke Chris
01.03.2010 19:24:45
Wolfgang
Hallo Chris,
war schon angefangen, Deinen Code zu testen, da kamen die Hinweise von Franz. Bedacht hatte ich übrigens dabei gar nicht, dass das Problem beim Löschen ja wahrscheinlich genauso aufgetreten wäre. Hier hatte mir Franz auch direkt schonen einen geänderten Code überlassen. Wenn ich das richtig verstanden habe, legt der dann auch ausschließlich die Zeilennummer zugrunde (?), so dass Dein wichtiger Hinweis bzgl. der Änderung des Namens etc. darin nicht relevant sein dürfte (?). Ich hatte hierzu schon eine weitere Frage an Franz gerichtet. Dir nochmals vielen vielen Dank!!
Gruß - Wolfgang
Anzeige
AW: Merke vor dem ÄNDERN die Zeilennr.
01.03.2010 18:49:53
Wolfgang
Hallo NoNet,
danke für die Rückmeldung. Ich würde Deine Hinweise gerne umsetzen, befürchte aber, dass mir hierfür die tiefgreifenden Kenntnisse fehlen. Könntest Du mir da vielleicht Hinweise, geben, wie ich das umsetzen müßte? - Danke schon jetzt für die erneute Rückmeldung.
Gruß - Wolfgang
Danke NoNet, hat sich glaube ich geklärt.
01.03.2010 19:19:52
Wolfgang
Hallo NoNet,
ich glaube, meine ergänzende Anfrag hat sich durch den Beitrag von Franz geklärt. Er erwähnte auch das Auslesen der Zeilennummer. Ich habe ihn soeben noch gefragt, wo ich die im Code genau entdecken kann. Somit Dir nochmals meinen recht herzlichen Dank für Deine schnelle Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: VBA steuert nicht richtigen Datensatz an.
01.03.2010 18:55:00
fcs
Hallo Wolfgang,
die Zeilennummern werden in der letzten Spalte der Listbox eingetragen, wenn die gefundenen Datensätzte in der Listbox eingetragen werden. Also kannst du sie dort auch wieder auslesen, wenn du Datensätze änderst/löschst. Nachfolgend die beiden Prozeduren, die du anpassen muss.
Gruß
Franz
Private Sub Aendern()
Dim intZ As Long
Dim spalte As Long
'Prüfen, ob Eintrag in Listbox gewählt
If Me.ListBox1.ListIndex  -1 Then
With Me.ListBox1
intZ = CLng(.List(.ListIndex, 4))
End With
Cells(intZ, 1) = TextBox1 ' Name
Cells(intZ, 2) = TextBox2 ' Vorname
Cells(intZ, 3) = TextBox3 ' Kundennummer
Cells(intZ, 4) = TextBox4 ' Team
Cells(intZ, 5) = TextBox5 ' von
Cells(intZ, 6) = TextBox6 ' bis
Cells(intZ, 7) = TextBox7 ' Dauer in Monaten
Cells(intZ, 8) = TextBox8 ' Sorte
Cells(intZ, 9) = CLng(TextBox9)  'geplant
Cells(intZ, 10) = CLng(TextBox10) 'entschieden
Cells(intZ, 11) = CLng(TextBox11) 'teilgenommen
If TextBox12.Value = "X" Then 'neu
Cells(intZ, 12) = (TextBox12) 'neu
Else 'neu
Cells(intZ, 12) = CLng(TextBox12)  'storniert
End If 'neu
Cells(intZ, 13) = CLng(TextBox13)  '1 Jahr
Cells(intZ, 14) = CLng(TextBox14)  '2 Jahr
Cells(intZ, 15) = CLng(TextBox15)  '2 Jahr
Cells(intZ, 16) = CLng(TextBox16)  'folg. Jahr
'sorgt dafür, dass in Zelle mit mehr als 0 ein Kommentar eingetragen wird
For spalte = 9 To 12
If Cells(intZ, spalte).Value > 0 Then
On Error Resume Next
Cells(intZ, spalte).AddComment
On Error GoTo 0
Cells(intZ, spalte).Comment.Text Text:=Format(Date, "DD.MM.YYYY") & Chr(10) _
& Environ("Username")
End If
Next spalte
TextBox17.SetFocus
Call ZaehlenWenn
Unload Me
Application.ScreenUpdating = True
Else
MsgBox "Bitte vor dem Ändern Datensatz suchen und in Listbox auswählen"
End If
End Sub
Private Sub Loeschen()   '  Löschen
'Application.ScreenUpdating = False
Dim intZ As Long
'Prüfen, ob Eintrag in Listbox gewählt
If Me.ListBox1.ListIndex  -1 Then
Call BlattschutzRaus
With Me.ListBox1
intZ = CLng(.List(.ListIndex, 4))
End With
Rows(intZ).Delete
' Call Leerzeilenlöschen
'Call Sortieren
'Call Aktualisieren
'Call Q1aus
Call ZaehlenWenn
Unload Me
'Sheets("Start").Select
'Range("A1").Select
Call BlattschutzRein
Else
MsgBox "Bitte vor dem Löschen Datensatz suchen und in Listbox auswählen"
End If
'Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA steuert nicht richtigen Datensatz an.
01.03.2010 19:16:55
Wolfgang
Hallo Franz,
auch Dir recht herzlichen Dank für Deine schnelle Rückmeldung. Könntest Du mir vielleicht interessenhalber noch einen Hinweis geben, an welcher Stelle in Deinem Code die Zeilennummer geortet wird bzw. wo ich da nachsehen müßte. Chris gab ja schon den Hinweis, dass bei seinem Code eine Änderung des Namens etc. nicht erfolgen darf. Wäre das bei Deinem Code auch so oder würde dieser dann ausschließlich nach der Zeilennummer vorgehen? - Ich habe Deine Codes auch soweit eingebaut, m.E. funktionieren die soweit. Was müßte ich da evtl. noch anpassen, weil Du das in Deinem Hinweis schreibst (nicht, dass ich da etwas übersehe). Schon jetzt recht herzlichen Dank für Deine erneute Rückmeldung.
Gruß - Wolfgang
Anzeige
Franz, ergänzende Frage noch
01.03.2010 20:00:30
Wolfgang
Hallo Franz,
hier noch eine ergänzende Bitte. Beim weiteren Testen des Codes Aendern kam jetzt eine Fehlmeldung zum Anlegen des Kommentars, dass die Objektvariable oder With Blockvariable nicht festgelegt wurde. Gelb markiert ist dann der Bereich Cells(intZ,Spalte).Comment.Text.... etc.) Hättest Du evtl. eine Idee, was da noch geändert werden könnte? - Danke erneut.
Gruß - Wolfgang
'sorgt dafür, dass in Zelle mit mehr als 0 ein Kommentar eingetragen wird
For spalte = 9 To 12
If Cells(intZ, spalte).Value * 0 Then '-Spitzklammer hier entfernt und mit * ersetzt
On Error Resume Next
Cells(intZ, spalte).AddComment
On Error GoTo 0
Cells(intZ, spalte).Comment.Text Text:=Format(Date, "DD.MM.YYYY") & Chr(10) _
& Environ("Username")
End If
Anzeige
AW: Franz, ergänzende Frage noch
01.03.2010 20:53:13
fcs
Hallo Wolfgang,
kann jetzt nicht so genau sagen was für ein Objekt-Fehler da vorliegt.
Ändere die For-next-Schleife mal wie folgt.
Gruß
Franz
    For spalte = 9 To 12
With Cells(intZ, spalte)
If .Value > 0 Then
If .Comment Is Nothing Then .AddComment
.Comment.Text Text:=Format(Date, "DD.MM.YYYY") & Chr(10) _
& Environ("Username")
End If
End With
Next spalte

Danke Franz - klappt jetzt super!
02.03.2010 05:57:29
Wolfgang
Hallo Franz,
erneut recht herzlichen Dank für Deine schnelle Rückmeldung. Im alten Code war intZ noch "AS Integer" deklariert, jetzt AS Long.- Mag daher nun evtl. die Fehlermeldung herkommen? - Ist aber zwischenzeitlich auch egal, weil ich den geänderten Code von Dir eingebaut habe und jetzt wird der Kommentar auch wieder problemlos eingefügt. Insgesamt laufen die Codes und somit die Änderungen hervorragend. Es wird nun wirklich der angesteuerte Datensatz und kein anderer geändert. Hinsichtlich des Codes Löschen hatte ich ja gar nicht bedacht, dass der auch anzupassen ist. Hab hierfür und insgesamt für Deine erneute Geduld mit mir nochmals recht herzlichen Dank!
Gruß - Wolfgang
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige