Hallo liebe VBAler,
ich habe mich heute zum ersten mal daran versucht was mit vba zu machen da ich mit Excel Formeln nicht mehr weiter komme.
Ich wollte ein Spreadsheet erstellen mit dem man einen Kostenvoranschlag machen kann, wenn jemand unsere Produkte (Silos) kaufen will.
Das Problem mit Excel selbst ist das es einfach zu viele Options gibt als das ich sie mit, „wenn“ und „und“ und soweiter nicht mehr loesen kann (max 1024 Zeichen fuer die Formeln, etc.).
Ich dachte das ich nun VBA versuchen sollte. Hab mir jetzt ein Userform erstellt,aber wenn es nun um die Codes geht verlassen sie mich (die guten Geister).Wie muesste zum Beispiel der Code aussehen, damit ich, wenn ich in eine Textbox klicke, ein Drowdown (aehnlich wie „Validation“) aufgeht, indem ich zum Beispiel die Silos auswaehlen kann? Und wie sollte im naechsten Textbox der Code sein, damit dann der aktuelle Preis erscheint?
Ich habe ja schon die ganzen Spreadsheets erstellt, indem die einzelnen Option aufgelistet sind.
Fragen, ueber Fragen, aber ich waere ueber jegliche Denkanstoesse sehr gluecklich.
Ja, gegoogelt hab ich schon,aber hab nichts „massgeschneidertes“ gefunden.
Vielen Dank, jedem der sich meiner annimmt.
Liebe Gruesse aus dem immer noch warmen Australiens
Ingo
P.S: dem Gewinner schicke ich in den naechsten Wochen und Monaten unseren Sommer nach Deutschland 
Hi Ingo,
ich habe mich heute zum ersten mal daran versucht was mit vba
zu machen da ich mit Excel Formeln nicht mehr weiter komme.
Ich wollte ein Spreadsheet erstellen mit dem man einen
Kostenvoranschlag machen kann, wenn jemand unsere Produkte
(Silos) kaufen will.
sag bitte Tabelle bzw Tabellenblatt, obwohls übersetzt das Gleiche ist, so bedeutet Spreadsheet hier was anderes. (MS Spreadsheet ist ein Steuerelement dass man in eine Userform oder Tabelle einbinden kann, quasi Tabelle in Tabelle)
Das Problem mit Excel selbst ist das es einfach zu viele
Options gibt als das ich sie mit, „wenn“ und „und“ und
soweiter nicht mehr loesen kann (max 1024 Zeichen fuer die
Formeln, etc.).
Schon mal Namen vergeben für Formeln?
Ich dachte das ich nun VBA versuchen sollte. Hab mir jetzt ein
Userform erstellt,aber wenn es nun um die Codes geht verlassen
sie mich (die guten Geister).Wie muesste zum Beispiel der Code
aussehen, damit ich, wenn ich in eine Textbox klicke, ein
Drowdown (aehnlich wie „Validation“) aufgeht, indem ich zum
Beispiel die Silos auswaehlen kann? Und wie sollte im
naechsten Textbox der Code sein, damit dann der aktuelle Preis
erscheint?
Ich sehe jetzt keinen direkten Zusamenhang zwischen Userformerstellungsproblemen und deine Ausgangsfrage, ich dachte du wolltest die Wenns und Unds mittels vba lösen!?
Aber bitte:
http://www.badongo.com/file/281642
P.S: dem Gewinner schicke ich in den naechsten Wochen und
Monaten unseren Sommer nach Deutschland
Nö, behalt mal dein Ozonloch und Sonnenmilchfaktor 50
aber danke fürs Angebot.
Gruß
Reinhard
Hallo Ingo,
das sollte egentlich noch ohne VBA und Userform lösbar sein.
Ich nehme an, du hast jetzt mehrere Tabellen erstellt. Tabelle 1 enthält die Basispreise für die Silos für verschiedene Silogrößen.
Weitere Tabellen enthalten dann die Mehrpreise für die verschiedenen Optionen.
Wenn du jetzt in dem Kalkulationsblatt für jede Option ein Kombinationslistenfeld (Combobox) erstellst, dann kannst Du auf Basis der ausgewählten Option per Formel SVERWEIS den zugehörigen Preis aus der Optionstabelle übernehmen. Dabei erleichtert die Verwendung von Bereichsnamen das Erstellen der Comboboxen und der SVERWEIS-Formeln.
Für die ComboBoxen muß Du dabei die Elemente aus der Symbolleiste „Steuerelment-Toolbox“ verwenden. Heißt auf Englisch wahrscheinlich „Controls-Toolbox“.
Ich werde Dir per e-mail eine kleine Beispiel-Datei schicken, wie man das Ganze aufbauen könnte.
Gruß
Franz
Ich werde Dir eine
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Ingo.
Interessant wäre es doch dann in diesem Fall, die Combobox mit den Silos direkt als Symbolleiste zu realisieren. Das hätte den Vorteil, dass Du dann eigentlich keine Userform programmieren musst und Du hast Dein Tabellenblatt als Kostenvoranschlag-Formular sozusagen immer im Vordergrund.
Viele Grüße aus dem kalten Kiel
Carsten
Hi Ingo,
ich habe mich heute zum ersten mal daran versucht was mit vba
zu machen da ich mit Excel Formeln nicht mehr weiter komme.
Ich wollte ein Spreadsheet erstellen mit dem man einen
Kostenvoranschlag machen kann, wenn jemand unsere Produkte
(Silos) kaufen will.sag bitte Tabelle bzw Tabellenblatt, obwohls übersetzt das
Gleiche ist, so bedeutet Spreadsheet hier was anderes. (MS
Spreadsheet ist ein Steuerelement dass man in eine Userform
oder Tabelle einbinden kann, quasi Tabelle in Tabelle)
Sorry
Das Problem mit Excel selbst ist das es einfach zu viele
Options gibt als das ich sie mit, „wenn“ und „und“ und
soweiter nicht mehr loesen kann (max 1024 Zeichen fuer die
Formeln, etc.).Schon mal Namen vergeben für Formeln?
Nein, aber du sagst mir sicher wie man das macht…
Ich dachte das ich nun VBA versuchen sollte. Hab mir jetzt ein
Userform erstellt,aber wenn es nun um die Codes geht verlassen
sie mich (die guten Geister).Wie muesste zum Beispiel der Code
aussehen, damit ich, wenn ich in eine Textbox klicke, ein
Drowdown (aehnlich wie „Validation“) aufgeht, indem ich zum
Beispiel die Silos auswaehlen kann? Und wie sollte im
naechsten Textbox der Code sein, damit dann der aktuelle Preis
erscheint?Ich sehe jetzt keinen direkten Zusamenhang zwischen
Userformerstellungsproblemen und deine Ausgangsfrage, ich
dachte du wolltest die Wenns und Unds mittels vba lösen!?
Aber bitte:
Naja, ich dachte das man das eben nicht mehr normal loesen kann und so hab ich das dann eben anders versucht, aber ich bin gerne auf deine Hilfe angewiesen
http://www.badongo.com/file/281642
P.S: dem Gewinner schicke ich in den naechsten Wochen und
Monaten unseren Sommer nach DeutschlandNö, behalt mal dein Ozonloch und Sonnenmilchfaktor 50
aber
danke fürs Angebot.
Gruß
Reinhard
Keine Ursache,
Gruss Ingo
P.S: hier mal eine Formel die ich benutzte:
=IF(B25=„YES“,VLOOKUP(B4,‚Aeration Options‘!A2:AM31,IF(Entry!B26=‚Aeration Options‘!B1,2,IF(B26=‚Aeration Options‘!F1,6,IF(B26=‚Aeration Options‘!J1,10,IF(B26=‚Aeration Options‘!N1,14,IF(B26=‚Aeration Options‘!R1,18,IF(B26=‚Aeration Options‘!U1,22,""))))))),"")
soll heissen, das wenn „Ja“ gewaehlt wurde dann soll man eben die eine Option nehmen, wenn nicht dann eben die andere und so weiter,…allerdings habe ich in einem aehnlichem Problem das ich bis zu 160 verschiedene Options habe (circa 20 Silo Modelle, mit jeweils bis zu 8 Options).
Hallo Ingo.
Hallo Carsten,
Interessant wäre es doch dann in diesem Fall, die Combobox mit
den Silos direkt als Symbolleiste zu realisieren. Das hätte
den Vorteil, dass Du dann eigentlich keine Userform
programmieren musst und Du hast Dein Tabellenblatt als
Kostenvoranschlag-Formular sozusagen immer im Vordergrund.
Da stimm’ ich Dir voll und ganz zu, allerdings hat es den Haken, das es mit den Codes in VBA hakt. Und deswegen hab ich mich an euch gewandt!
Viele Grüße aus dem kalten Kiel
Carsten
Gruss Ingo
=IF(B25=„YES“,VLOOKUP(B4,‚Aeration
Options‘!A2:AM31,IF(Entry!B26=‚Aeration
Options‘!B1,2,IF(B26=‚Aeration Options‘!F1,6,IF(B26=‚Aeration
Options‘!J1,10,IF(B26=‚Aeration
Options‘!N1,14,IF(B26=‚Aeration
Options‘!R1,18,IF(B26=‚Aeration
Options‘!U1,22,""))))))),"")
soll heissen, das wenn „Ja“ gewaehlt wurde dann soll man eben
die eine Option nehmen, wenn nicht dann eben die andere und so
weiter,…allerdings habe ich in einem aehnlichem Problem
das ich bis zu 160 verschiedene Options habe (circa 20 Silo
Modelle, mit jeweils bis zu 8 Options).
=IF(B25=„YES“,VLOOKUP(B4,‚Aeration
Options‘!A2:AM31,IF(Entry!B26=‚Aeration
Options‘!B1,2,IF(B26=‚Aeration Options‘!F1,6,IF(B26=‚Aeration
Options‘!J1,10,IF(B26=‚Aeration
Options‘!N1,14,IF(B26=‚Aeration
Options‘!R1,18,IF(B26=‚Aeration
Options‘!U1,22,""))))))),"")
weiter,…allerdings habe ich in einem aehnlichem Problem
das ich bis zu 160 verschiedene Options habe (circa 20 Silo
Modelle, mit jeweils bis zu 8 Options).
Hi Ingo,
ich kapier nicht ganz, mal prüfst du Entry!B26 mal nur B26.
Das Folgende ist mal ein Ansatz
Einfügen–>Namen–>Definieren
Name: testen
Formel: =WENN(Entry!B26=‚Aeration Options‘!B1;2;WENN(B26=‚Aeration Options‘!F1;6;WENN(B26=‚Aeration Options‘!J1;10;WENN(B26=‚Aeration Options‘!N1;14;WENN(B26=‚Aeration Options‘!R1;18;WENN(B26=‚Aeration Options‘!U1;22;0))))))
Dann in der Tabelle:
=WENN(B25=„YES“;SVERWEIS(B4;‚Aeration Options‘!A2:AM31;testen;0);"")
Da auch die Formellängen in den Namen begrenzt sind , könnte man für weitere Überprüfungen noch testen2, testen3 usw anlegen und dann
=WENN(B25=„YES“;SVERWEIS(B4;‚Aeration Options‘!A2:AM31;testen+testen2+testen3;0);"")
aber das ist irgendwie noch keine Lsung, denn sicher soll die Formel auch kopierbar sein in andere Zellen, d.h „testen“ müßte mit relativen Bezügen arbeiten usw.
Dann doch lieber eine Makrofunktion.
Kannst du eine Beispieldatei hochladen, z.B. bei dem gennannte www.badongo.com oder sonstwo, wichtige Daten kannste ja anonymisieren?
Gruß
Reinhard
Keine Haken
Hallo Ingo.
Falls Intersse besteht, hier habe ich mal ein kleines Beispiel zurechtgebastelt:
-Gehe in den Visual Basic Editor
-Klicke im Menü „Einfügen“ auf „Modul“
-Kopiere den folgenden Code in das Code-Fenster von „Modul1“
**Public tbrSilos As CommandBar
Public cbxSilos As CommandBarControl
Public mnuSilos As CommandBarControl
Public mnuSilosNew As CommandBarButton
Public mnuSilosDel As CommandBarButton
Public Const Nichts As String = „(Kein Eintrag)“
Sub DisableBar() 'Funktion: Blendet die Symbolleiste aus, wenn eine andere Excel-Datei zur aktiven Datei wird
On Error Resume Next
CommandBars(„Silos“).Enabled = False
'CommandBars(„Formatting“).Visible = True
End Sub
Sub EnableBar() 'Funktion: Blendet die Symbolleiste ein, wenn diese Datei zur aktiven Datei wird
On Error Resume Next
'CommandBars(„Formatting“).Visible = False
CommandBars(„Silos“).Enabled = True
End Sub
Sub SilosDel() 'Funktion: Löscht den ausgewählten Eintrag aus der Liste der Silos
Dim tmpSilo As Integer
For tmpSilo = cbxSilos.ListIndex To Tabelle1.Cells(1, 2)
Tabelle1.Cells(tmpSilo, 1) = Tabelle1.Cells(tmpSilo + 1, 1)
Next
If Tabelle1.Cells(1, 2) - 1 > 0 Then
Tabelle1.Cells(1, 2) = Tabelle1.Cells(1, 2) - 1
Else
Tabelle1.Cells(1, 2).Clear
Tabelle1.Cells(1, 3).Clear
End If
SilosInput
End Sub
Sub SilosInput(Optional Eintrag As Long = 1) 'Funktion: Liest die Liste der Silos in den Dropdown der Symbolleiste
On Error GoTo Fehler
cbxSilos.Clear
For a = 1 To Tabelle1.Cells(1, 2)
cbxSilos.AddItem Tabelle1.Cells(a, 1)
Next
cbxSilos.ListIndex = Eintrag
SilosSelect
Weiter:
VerwalteToolbar
Exit Sub
Fehler:
cbxSilos.AddItem Nichts
cbxSilos.ListIndex = Eintrag
Resume Weiter
End Sub
Sub SilosNew() 'Funktion: Zeigt ein Eingabedialog an, um ein neues Silo zur Liste der Silos hinzuzufügen
On Error GoTo Fehler
Dim SiloNew As String
Dim UBoundSilos As Long
SiloNew = InputBox(„Bitte geben Si den Namen des neuen Silos ein“, „Neues Silo hinzufügen“)
If SiloNew = „“ Then Exit Sub
UBoundSilos = Tabelle1.Cells(1, 2)
Weiter:
Tabelle1.Cells(UBoundSilos + 1, 1) = SiloNew
UBoundSilos = UBoundSilos + 1
Tabelle1.Cells(1, 2) = UBoundSilos
SilosInput UBoundSilos
Exit Sub
Fehler:
UBoundSilos = 0
Resume Weiter
End Sub
Sub SilosSelect() 'Funktion Schreibt den ausgewählten Eintrag in Zelle C1
Tabelle1.Cells(1, 3) = cbxSilos.Text & " wurde gewählt"
End Sub
Sub Toolbar() 'Funktion: Erstellt eine Symbolleiste mit einem DropDown und einem Menü mit zwei Einträgen
On Error GoTo Fehler
Set tbrSilos = CommandBars.Add(Name:=„Silos“, Position:=msoBarTop, Temporary:=True)
With tbrSilos
Set cbxSilos = .Controls.Add(Type:=msoControlDropdown, Before:=.Controls.Count + 1)
cbxSilos.Width = 150 'Angabe in Pixel
cbxSilos.OnAction = „SilosSelect“
Set mnuSilos = .Controls.Add(Type:=msoControlPopup, Before:=.Controls.Count + 1)
mnuSilos.Caption = „&Silos“
.Visible = True
End With
With mnuSilos
Set mnuSilosNew = .Controls.Add(Type:=msoControlButton, ID:=1851)
mnuSilosNew.Style = msoButtonCaption
mnuSilosNew.Caption = „&Neu…“
mnuSilosNew.OnAction = „SilosNew“
Set mnuSilosDel = .Controls.Add(Type:=msoControlButton, ID:=1851)
mnuSilosDel.Style = msoButtonCaption
mnuSilosDel.BeginGroup = True
mnuSilosDel.Caption = „&Löschen“
mnuSilosDel.OnAction = „SilosDel“
End With
Exit Sub
Fehler:
CommandBars(„Silos“).Visible = True
End Sub
Sub VerwalteToolbar() 'Funktion: Verwaltet die Verfügbarkeit des Menüs „Löschen“
mnuSilosDel.Enabled = CBool(Tabelle1.Cells(1, 2))
End Sub**
-Doppelklicke im Projekt-Explorer auf „DieseArbeitsmappe“
-Füge den folgenden Code in des Code-Fenster von „DieseArbeitsmappe“
**Private Sub Workbook_Activate()
EnableBar
End Sub
Private Sub Workbook_Deactivate()
DisableBar
End Sub
Private Sub Workbook_Open()
Toolbar
SilosInput
End Sub**
-Klicke im Menü „Debuggen“ auf „Kompilieren von VBAProjekt“
-Gehe zurück zu Excel
-Speichere Die Datei (einfach unter „Mappe1“)
-Stelle eventuell die Makrosicherheit auf „Mittel“ oder „Niedrig“ (Menü „Extras“>„Optionen“>„Sicherheit“>„Makrosicherheit“)
-Beende Excel
-Öffne die Datei
-Nun gibts da 'ne neue Symbolleiste namens „Silos“
-Klicke im Menü „Silos“ auf „Neu…“
-Gebe irgendeinen Namen ein und bestätige mit „Ok“
Wenn alles funktioniert wie bei mir, dann kannst Du jetzt neue Silos hinzufügen oder vorhandene löschen.
Wenn Du den DropDown betätigst, erscheint in Zelle C1 der Name des gewählten Silos kombiniert mit dem Text „wurde gewählt“.
Ich denke das könnte Dir gefallen.
Falls ja, viel Spaß damit.
Bei eventuellem Interesse stehe ich für weitere Tips gerne zur Verfügung.
Viele Grüße
Carsten.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]