Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1876to1880
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

Checkbox UserForm auslesen und eintragen

Checkbox UserForm auslesen und eintragen
18.04.2022 11:34:56
Nathalie
Hallo zusammen,
ich habe eine Frage, ich habe eine UserForm erstellt wo ich die Daten zurückschreiben und neu eintragen kann. Siehe Beispieldatei. https://www.herber.de/bbs/user/152508.xlsm
Das Problem ist, wenn ich die Daten von der Frame 100 eintrage und die Daten von der Frame 220 eintragen, möchte schreibt er mir bei Errbaurecht ein Teil von der Bade Ausstattung mit rein.
Könnt ihr mir sagen, wo ich hier den Fehler habe, bzw. wie ich das anpassen kann?
Ebenfalls habe ich das Problem, dass wenn ich kein Button auswähle bzw. diesen wieder löschen möchte, weil ich mich verklickt habe, etc. die Zeile nicht leer wird.
Vielleicht hat jemand eine Idee wie ich hiermit umgehen kann?
Vielen Dank schonmal im Voraus und einen schönen Feiertag.
Viele Grüße

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Checkbox UserForm auslesen und eintragen
18.04.2022 19:10:08
ralf_b
wenn du variablen mehrfach für unterschiedlichen Dinge benutzt, dann sorge dafür das sie vor der nächsten Nutzung leer gemacht werden.
hier strOUT
Dein Code ist recht unaufgeräumt und liest sich zumindest für mich sehr zäh. Es wäre sehr gut wenn du für Leute, die sich, für dich. da durch wühlen sollen, den Code besser bzw. überhaupt kommentieren würdest.
AW: Checkbox UserForm auslesen und eintragen
18.04.2022 19:32:07
Nathalie
Dim vntROW, cbx As Object, strOUT As String, strSHEET As String
Dim x As Integer
strSHEET = Cbo_Blattname.Value
For Each cbx In Frame100.Controls
If LCase(cbx.Name) Like "checkbox*" Then
If cbx = True Then
strOUT = strOUT & "; " & cbx.Caption
End If
End If
Next
If Len(strOUT) Then
strOUT = Mid(strOUT, 3)
If TextBoxNr "" Then
x = TextBoxNr * 1
vntROW = Application.Match(x, Sheets(strSHEET).Columns(2), 0)
If IsError(vntROW) Then
vntROW = Sheets(strSHEET).Cells(Rows.Count, 2).End(xlUp).Row + 1 'neuer Kunde
End If
End If
Sheets(strSHEET).Cells(vntROW, 14) = strOUT
End If
Das Problem ist wenn ich nur Frame100 benutzte funktioniert alles, der Code fügt alles in einer Spalte ein.
Sobald ein weiteres Frame hinzugefügt wird splittet sich der Text in der Datei auf mehrere Spalten auf und verteilt sich. Das ist nicht das Ziel der Aufgabe.
Leider sehe ich nicht wo der Fehler liegt.
Anzeige
AW: Checkbox UserForm auslesen und eintragen
18.04.2022 20:36:06
ralf_b

vor dieser Zeile
For Each cbx In Frame220.Controls
dies hier einfügen   strOUT = ""   könnte helfen. 

AW: Checkbox UserForm auslesen und eintragen
19.04.2022 20:12:36
Nathalie
sorry, dass ich mich so spät melde, habe es eben mal in einer UserForm probiert, müsste hoffentlich klappen. Sieht zumindest bisher gut aus. Vielen lieben Dank.
Im schlimmsten Fall melde ich mich nochmal zu dem Thema.
Ich kann das jetzt Eintragen wenn ich aber beide Checkboxen nicht mehr ansprechen möchte bleiben die Sachen trotzdem stehen.
Hast du hierfür zufällig auch noch eine Lösung ?
Vielen Dank schonmal und einen schönen Abend.
Anzeige
AW: Checkbox UserForm auslesen und eintragen
19.04.2022 21:07:10
ralf_b
ging das schon mal? Eher nicht, oder?
Des Rätzels Lösung liegt in deiner Programmierung. Wer hätte das gedacht?
Mir scheint du hast nur den Fall programmiert wenn du die Checkboxen aktivierst. Wenn die Checkboxen nicht aktiviert sind mußt du das natürlich für dein Anliegen auch beachten. Also in den IF abfragen auch einen Else-Zweig einbauen und im Nachgang sich etwas überlegen. Quasi das Äquivalent zu strOUT.
Dieses Problem löse ich dir aber nicht, da ich der Meinung bin das du deine Programmierung nur noch verschlimmbesserst. Besser du findest einen anderen Ansatz um deine Checkboxcaptions in die Zellen zu bekommen.
Anzeige
AW: Checkbox UserForm auslesen und eintragen
19.04.2022 21:29:46
Nathalie
das ist richtig, deshalb habe ich das auch mit in der ersten Frage eingebaut gehabt. Wie ich damit am besten umgehe.
Wie würdest du es denn komplett anders lösen?
Bisher bin ich mit keiner meiner Lösungen zufrieden. Die Lösung die ich derzeit verwende ist nicht optimal aber immerhin kann ich die Excel jetzt auslesen und wieder eintragen und neu eintragen.
Davor waren meine Programmiervarianten glaube nicht unbedingt besser, daher habe ich euch nach eurer Meinung bzw Hilfe gefragt.
Ich bin leider kein Programmierprofi und habe leider keine besser Lösung parat.
AW: Checkbox UserForm auslesen und eintragen
20.04.2022 00:31:33
ralf_b
Solche Überlegungen stelle ich zwar schon an aber habe keine echte Lösung.
Weil, ich dein Programm nur ansatzweise kenne und nicht einschätzen kann wohin die Reise geht. Ich glaube das da noch mehr dazukommt und deshalb ein anderes Design der Userform evtl. nützlicher ist. Mir scheint das du die Checkboxen einfach in das Frame geworfen hast, um sie irgendwie zusammenzuhalten. Da du die Captions als Textwerte in eine Zelle quetscht hast, haben sie später keine effiziente Wirkung wenn es darum gehen könnte sie irgendwie auszuwerten. Somit scheinen sie nicht wirklich wichtig.
was wird das? & "" & "" & "" & "" & "" & "" & "" & "" & "" & "" & "" & "" im CommandButton2_Click
das ergibt genau "" = nichts
Anzeige
AW: Checkbox UserForm auslesen und eintragen
20.04.2022 06:57:45
Nathalie
Der CommandButton2 war quasi mein Start, jedoch hast du recht, dass hier relativ viel noch dazu kommt.
Das mit dem Frame habe ich dann als Lösung genommen um die Werte wieder irgendwie auszulesen und ggf. weiterzuverarbeiten.
Am liebsten wäre es mir wenn ich der Checkbox sagen kann, such dir die Spalte wo "xxx" steht und trage es dann darunter in einer leeren Zeile ein oder eben ggf. in der Zeile welche grad angepasst wurde. Leider komm ich hier absolut auf keinen grünen Zweig und beschäftige mich jetzt schon Monate damit aber ich komme einfach nicht weiter. :(
Ich wüsste auch keinen neuen Ansatz mehr den ich verfolgen könnte, dass alles mit dem eintragen, anzeigen und löschen klappt. Trotzdem hoffe ich, dass es irgendwie anders geht.
Anzeige
AW: Checkbox UserForm auslesen und eintragen
20.04.2022 18:20:42
Yal
Hallo Nathalie,
have a try on this:

'Kunde finden
vntROW = Sheets(strSHEET).Cells(Rows.Count, 2).End(xlUp).Row + 1 'Default-Value: neu!
If TextBoxNr  "" Then
vntMatch = Application.Match(TextBoxNr * 1, Sheets(strSHEET).Columns(2), 0)
If Not IsError(vntMatch) Then vntROW = vntMatch
End If
'Frame100 in Spalte 14
strOUT = ""
For Each cbx In Frame100.Controls
If LCase(cbx.Name) Like "checkbox*" Then
If cbx Then strOUT = strOUT & "; " & cbx.Caption
End If
Next
Sheets(strSHEET).Cells(vntROW, 14) = Mid(strOUT, 3)
'Frame220 in Spalte 15
strOUT = ""
For Each cbx In Frame220.Controls
If LCase(cbx.Name) Like "checkbox*" Then
If cbx Then strOUT = strOUT & "; " & cbx.Caption
End If
Next
Sheets(strSHEET).Cells(vntROW, 15) = Mid(strOUT, 3)
Salutations,
VG
Yal
Anzeige
AW: Checkbox UserForm auslesen und eintragen
20.04.2022 20:06:44
ralf_b
Es ist sicher ein Problem wenn man auf unterschiedlichen Tabellenblättern auch die Spalten erst noch suchen mußt weil die Tabellen nicht identisch sind. Im Normalfall hat man nur eine Datenbank(Tabelle) und die bearbeitet man zeilenweise. Da weis man in welcher Spalte welche Werte stehen. Dann kann man dann auch die Nr der aktuell geladenen Datensatzzeile in der Userform unterbringen. Das erleichtert dann das zurückschreiben der Werte. Wenn du nach einem Datensatz suchst, um den Datensatz zu ändern, kannst du den Wert in der Suchspalte nicht ändern. Sonst findest du den Datensatz nicht mehr beim zurückschreiben. Hier hat sich ein Trick gewährt. In der combobox suche lädst du alle deine Kunden. Du könntest in eine unsichtbaren Spalte die Zeilennummern mitschreiben und sie immer per comboxsuche.list( comboboxsuche.listindex , 1) die zweite (unsichtbare) Spalte abfragen.
Eine mögliche Lösung um die Spalten nicht jedesmal suchen zu müssen wäre ein Dictionary oder eine Collection in der man bei jedem Blattwechsel die Spalten in Key/Item Kombination hinterlegen könnte. In der Folge könntest du mittels Aufruf des Keys(Spaltenname) auf das Item(Spaltennummer ) zugreifen. Das ginge auch ganz einfach ohne solche Datenobjekte wenn du deine Tabellen in intelligente Tabellen( Listobjects) umwandelst. Dann geht der Zugriff auf die richtige Spalte direkt mit dem Spaltennamen.
Generell solltest du Code der mehrfach vorkommt in Sub-Routinen oder Functions auslagern. Denkbar wäre das für die Spaltensuche oder den aktiven Optionbutton. Aber auch das Einlesen und Zurückschreiben der Datensätze können in eigenen Subs untergebracht werden.
Du siehst das sind ettliche Baustellen. Wenn man jetzt hier irgendwo mittendrin anfängt, macht man das später alles nochmal weil die zündende Idee den alten Code komplett überflüssig macht.
Hier mal ein Versuch ohne den Code getestet zuhaben,

Function getColumnNr(strSuchwort As String)
Dim erg
erg = Application.Match(strSuchwort, Sheets(varTabName).Rows("13:13"), 0)
If IsNumeric(erg) Then
getColumnNr = erg
Else
getColumnNr = -1
End If
End Function
Sub setTableValue(lRow As Long, strColname As String, strVal As Variant)
Dim lngColNr As Long
lngColNr = getColumnNr(strColname)
If lngColNr > -1 Then Sheets(varTabName).Cells(lRow, lngColNr).Value = strVal
End Sub
Private Sub Btn_Aendern_Click()
Dim varSpaltenName As Range, Sz As Long, lngColNr As Long
With Sheets(varTabName)
Sz = Cbo_Suche.ListIndex + 14
' TextBoxNr
setTableValue Sz, "Kundennummer", CDbl(TextBoxNr)
' Interessent
setTableValue Sz, "Interessent", strvalOpt
' TextBox_Name
setTableValue Sz, "Name", TextBox_Name.Text
' TextBox_Adresse
setTableValue Sz, "Adresse", TextBox_Adresse.Text
usw....

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige