Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
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 Formular mit Split

VBA Formular mit Split
06.02.2022 18:19:57
Freddy
Hallo VBA-Profis,
ich hatte diese Wioche schonmal eine Frage zu diesem Thema. Jetzt komme ich wieder nicht weiter.
Ich habe eine Testarbeitsmappe erstellt. Auf dem Blatt "Beispiel", sieht man wie es z.B. aussehen könnte, wenn man das Formular verwendet hat.
https://www.herber.de/bbs/user/150936.xlsm
Hier mal der Code, der Ausgeführt wird wenn ein Butten im Formular geklickt wird. Ich habe jeweils dazu geschrieben, was ich gerne hätte was passiert. Weiter komme ich mit meinem Wissen noch nicht.

Private Sub CommandButton_addalternitenow_Click()
Dim last As Long, ARowsV As String, ARows As String, NARow As String, i As Integer, Rows() As String 'Variabeln
Dim rngF As Range
'Zeile des Produkts finden
Set rngF = ActiveSheet.Columns(1).Find( _
what:=NewProduct.TextBox_caption.Value, LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlNext)
If Not rngF Is Nothing Then
last = rngF.Row
Else
Exit Sub
End If
'Variabeln Wert
NARow = NewProduct.ComboBox_AddalterniTe.Value 'Neue Alternative in ComboBox
ARowsV = NewProduct.TextBox_alternites.Value     'Zeilen in der Alternativen-Textbox mit Value
ARows = NewProduct.TextBox_alternites     'Zeilen in der Alternativen-Textbox ohne Value
With NewProduct.TextBox_alternites
If NewProduct.ComboBox_AddalterniTe.Value = True And NewProduct.TextBox_alternites.Value = True Then
Rows = Split(ARows, ",")
'Hier soll überprüft werden, ob der Wert von NARow schon in der Zeile ist, wenn dieser nicht vorhanden ist und nicht last ist, soll dieser mit "," ergänzt werden
'If Not IsError(Application.Match(ARows, Rows, 0)) Then
'    MsgBox "Das Produkt in Zeile " & NARow & " ist bereits als Alternativprodukt für Zeile " & last & " vorhanden", vbOKOnly
'Else
'    For i = 0 To UBound(Rows)
'        If i  NARow Then
'            Next i
'        Else
'        End If
'        .Value = .Value & "," & NARow
'End If
Else
If NARow = last Then
MsgBox "Es kann nicht das gleiche Produkt als Alternative ausgewählt werden.", vbOKOnly
Else
.Value = NARow
End If
End If
End With
Weiter:
'hinzufügen der Werte in die Tabelle:
ActiveSheet.Cells(last, 2).Value = NewProduct.TextBox_alternites.Value
If NewProduct.CheckBox_topalternite.Value = True Then
ActiveSheet.Cells(last, 3).Value = 1
'Hier soll der Wert in Spalte 3 für alle anderen Alternativen des Produkts auf 0 gesetzt werden. Wenn keine der Alternativen eine Hauptalternative ist, dann soll eine MSG-Box angezeigt werden (vbOkCancel), ob das ausgewählte Produkt die Hauptalternative sein soll
Else
ActiveSheet.Cells(last, 3).Value = 0
End If
'Für jede Zeile, die in ARows drin steht, soll der Wert aus ARows übernommen werden, nur die selbe Zeile nicht und dafür die Zeile "last"
End Sub
Ich freue mich über Bearbeitungen und Vorschläge, um meine Wünsche zu lösen.
Vielen Dank!
Grüße Freddy

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formular mit Split
06.02.2022 19:20:52
onur
Wenn du schon in einer deutschsprachigen Excel-Datei unbedingt Anglizismen verwenden musst: Es heisst übrigens "Alternate" und nicht Alternite.
AW: VBA Formular mit Split
06.02.2022 19:46:16
Freddy
upsi 🙈
AW: VBA Formular mit Split
06.02.2022 19:48:27
Freddy
Das ändert allerdings nichts an meinem Problem und der Sache. LG
AW: VBA Formular mit Split
07.02.2022 14:54:48
Rudi
was willst du damit erreichen?

If NewProduct.ComboBox_AddalterniTe.Value = True And NewProduct.TextBox_alternites.Value = True Then
Gruß
Rudi
AW: VBA Formular mit Split
07.02.2022 16:09:05
Freddy
Hallo Rudi,
mein Plan war, das es nur ausgeführt wird, wenn in der Textbox und in der Combobox etwas drin steht
LG
Freddy
AW: VBA Formular mit Split
07.02.2022 20:05:51
Yal
Hallo Freddy,
Ganz schön viel Überlänge...
Ich habe die Behandlung in dem Modul abgelagert. Es macht den Code von Formular leichter. Innerhalb des Codepanels des Formulars brauchst Du nicht "NewProduct" voranzustellen, da alles hier sich per Default auf "NewProduct" bezieht. Notfalls kannst Du "Me" voranstellen.
"ComboBox_AddalterniTe" habe ich in "cbbAlter" umbenannt. Name, die nichts bedeuten müssen nicht unnötig lang sein.
https://www.herber.de/bbs/user/150975.xlsm
Viel Spass
VG
Yal
Anzeige
AW: VBA Formular mit Split
07.02.2022 22:12:05
Rudi
dann solltest du besser
If NewProduct.ComboBox_AddalterniTe.ListIndex &gt -1 And NewProduct.TextBox_alternites.Value "" Then
einsetzen
Gruß
Rudi
AW: VBA Formular mit Split
09.02.2022 17:50:25
Freddy
Hallo Rudi und Yal,
danke für Eure Mühe!
Vielen Dank Yal, für die Idee mit dem Modul, anstatt alls in die Userform zu machen.
Danke, Rudi "If NewProduct.ComboBox_AddalterniTe.ListIndex > -1 And NewProduct.TextBox_alternites.Value "" Then", das ist wohl dann die bessere Variante. Ich habe es mal so gemacht und mal so, dachte es macht kein Unterschied 😬.
Ihr müsst wissen, meine ganze Userform ist viel länger und größer, das ist nur ein kleiner Teil.
Jetzt feheln mir zu dem Formular noch folgende Punkte:

'Hier soll überprüft werden, ob der Wert von ****NARow schon in der Zeile ist***, wenn dieser **nicht** vorhanden ist und nicht last ist, soll dieser mit "," ergänzt werden
Wie kann ich herausfinden, ob etwas schon in der Zeile ist oder nicht (1. ob der hinzuzufügende Wert vorhanden ist und 2. ob der hinzuzufügende Wert die Zeile ist oder nicht?

'Hier soll der Wert in Spalte 3 für alle anderen Alternativen des Produkts auf 0 gesetzt werden. Wenn keine der Alternativen eine Hauptalternative ist, dann soll eine MSG-Box angezeigt werden (vbOkCancel), ob das ausgewählte Produkt die Hauptalternative sein soll

'Für jede Zeile, die in ARows drin steht, soll der Wert aus ARows übernommen werden, nur die selbe Zeile nicht und dafür die Zeile "last"
@Yal deins hat leider noch einige Fehler, z.B. kommt manchmal der Produktname in die 2. Spalte. Da ich zukünftig 2 Buttons haben möchte (einmal nur Alternative auf der Userform einfügen und einmal direkt auf der Tabelle und in der Userform einfügen) haben möchte, wäre es nett wenn du mir erklären könntest, wie ich das einfach splitten kann. Vielen Dank!
Ich freue mich über Vorschläge, ihr seid mir eine sehr große Hilfe!
Vielen vielen Dank und Grüße
Freddy
Anzeige
AW: VBA Formular mit Split
09.02.2022 20:43:27
Yal
Hallo Freddy,
ich kann nicht ganz nachvollziehen, was Du meinst.
"kommt manchmal der Produktname in die 2. Spalte"
in meiner Lösung oder in der Datenbasis, die Du verarbeiten muss?
Die Ausgabe sind Offset-Form

rngF.Offset(0, 1) = PrüfenUndEinfügen(rngF.Offset(0, 1), Me.cbbAlter.Value)
rngF ist dabei die Zelle vom Produkt und sollte in Spalte A sein, da nur dort gesucht wird.
Möchtest Du die Ausgabe-Spalte nicht relativ sondern absolut haben, dann so

rngF.EntireRow.Range("B1") = PrüfenUndEinfügen(rngF.Offset(0, 1), Me.cbbAlter.Value)
der B1 ist immer dann die Spalte B der Zeile in dem rngF ist. Es ist equivalent zu

Cells(rngF.Row, "B")
"Wie kann ich herausfinden, ob etwas schon in der Zeile ist oder nicht"
Musst du nicht. Meine Lösung geht über Dictionary. Versuchst Du eine 3 hinzufügen, wo es bereits eins gibt, wird am Ende nur einen 3 geben. Und zwar sortiert.
Wenn noch nichts, dann auf alle Fälle einfügen.
"einmal nur Alternative auf der Userform einfügen und einmal direkt auf der Tabelle"
Wo ist der Mehrwert? Gern als Spiel-Aufgabe, wenn alles anderes bereits funktioniert.
Du kannst versuchen alles im Userform zu verarbeiten und nur bei End-Validierung auf dem Blatt zu übertragen. Aber dann ersetzst Du im Blatt einfach die urprüngliche Wert.
VG
Yal
Anzeige
AW: VBA Formular mit Split
10.02.2022 14:26:43
Freddy
Hi Yal,
danke für deine Antwort.
Userbild
Das passier bei mir immer bei dem hinzufügen eines zweiten Wertes.
Dann steht in der Userform immer der Produktname. In der Tabelle. Sonst funktionierts aber.
LG Freddy
AW: VBA Formular mit Split
10.02.2022 14:32:55
Freddy
Hallo Yal,
langsam versthe ich. Mit Dictionary hab ich mich noch nicht befasst. Gut daran ist, dass es sortiert ist.
"Du kannst versuchen alles im Userform zu verarbeiten und nur bei End-Validierung auf dem Blatt zu übertragen. Aber dann ersetzst Du im Blatt einfach die urprüngliche Wert. "
So war eigentlich auch mein Plan.
Ich probiers jetzt mal auf mein eigentliches Projekt zu migrieren. Dann melde ich mich nochmal.
LG
Freddy
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige