PDA

Vollständige Version anzeigen : Wert in combifeld zum Weiterrechnen


ctulhu
21.04.2009, 13:34
MSOffice 2000

Hallo,

ich arbeite fast auschließlich mitt Access.

In Excel möchte ich nun einen ausgewälten Wert einer Kombobox zum rechnen verwenden.

z.b. =Tabelle1!<Wert aus combobox1> * 5

Wie lautet die Syntax?

Gruß
ctulhu

losgehts
21.04.2009, 13:57
Hi ctulhu,

was wählst du genau in der combobox aus:
- Den Wert:
Dim dblErgebnis As Double
dblErgebnis = Tabelle1.Range("A1").Value * combobox1.Value
- Die Zelladresse aus dem Tabellenblatt?
dblErgebnis = Tabelle1.Range("A1").Value * Tabelle1.Range(CStr(combobox1.Value))
Zur Combobox:
- liegt sie auf einem Tabellenblatt oder auf eine Userform?
- stammt sie aus der Symbolleiste "Steuerelemente-Toolbox", oder aus "Formular"?

Grüße, Ulrich

ctulhu
21.04.2009, 14:07
Hi Ulrich,

bin wie gesagt nicht fit in Excel. Ich muss mich wohl in die allgemeine Syntax und speziell in die VBA-Syntax einarbeiten.

was wählst du genau in der combobox aus:
- Den Wert: richtig

Zur Combobox:
- sie liegt auf einem Tabellenblatt
- sie stammt aus der Symbolleiste "Steuerelemente-Toolbox

Ich möchte statt mit einem Zellenwert mit dem ausgewählten Wert aus der Combobox weitrerrechnen.

Gruß
ctulhu

losgehts
21.04.2009, 14:28
Hi,

ich gehe davon aus, dass du in Excel arbeitest und nicht von Access aus.
Dann Nimm das: Dim dblVariable As Double
dblVariable = CDbl(Tabelle1.ComboBox1.Value)

'jetzt kannst du rechnen:
MsgBox dblVariable ^ 2

"Tabelle1" ist nicht der Tabellenblattname, den du auf dem Tabellenblattreiter unten in Excel siehst, sondern der Codename.
Den Codename findest du im VBE links im Projektexplorer.

klappt's?
Grüße, Ulrich

ctulhu
21.04.2009, 14:41
Hallo Ulrich,

wie gesagt. Ich habe bis jetzt in Excel nur Sachen ohne VBA gemacht. In Access hab ich einen soliden Grundstock incl. VBA. In Excel fängt es schon damit an, dass ich nicht weis wo ich den Code hinschreiben soll. Muss wohl noch Grundlagenarbeit leisten:) .
folgende Rechnung habe ich bis jetzt in eine Zelle geschrieben

=('Lagerhalle I'!B4*'Lagerhalle I'!B8+'Lagerhalle II und III'!B4*'Lagerhalle II und III'!B8+'Lagerhalle neu'!B4*'Lagerhalle neu'!B8+Produktion!B4*Produktion!B8+Werkstattlager!B4*Werkstattlager!B8+Wismutha lle!B4*Wismuthalle!B8)/('Lagerhalle I'!B4+'Lagerhalle II und III'!B4+'Lagerhalle neu'!B4+Produktion!B4+Werkstattlager!B4+Wismuthalle!B4)

Statt B4 möchte ich die entsprechenden Comboboxen in die o.g. Formeln einsetzten.

Gruß
ctulhu

losgehts
21.04.2009, 16:03
Hallo!

Ah, ich glaube, ich hab's kapiert.

Hier würde ich folgendermaßen vorgehen (ohne VBA):
In der Symbolleiste "Steuerelemente-Toolbox" findest du auch einen Button "Eigenschaften" (zweiter von links)
Durch Klick auf diesn lässt du dir das Eigenschaftenfenster anzeigen.
Nun klickst du in deine Combobox, die auf dem Tabellenbatt liegt.
Jetzt werden die Eigenschaften der Combobox im Eigenschaftenfenster angezeigt.
die Eigenschaft "linked Cell" ist ein Verweis auf eine Zelle. Gibst du einen Zellverweis an (z.B. "C3"), dann nimmt die Zelle immer den Wert an, den die Combobx gerade hat.
(Es bietet sich an, einfach die Zelle zu nehmen, über der die Combobox liegt.)
Jetzt schließt du das Eigenschaftenfenster
evtl. musst du den "Entwursmodus beenden" -> erstes Icon auf Symbolleiste "Steuerelemente-Toolbox"
Jetzt kannst du die Zelle (im Beispiel C3) in deine Formel einbinden und damit rechnen
Somit kannst du mit der Combobox den Zellinhalt verändern und die Formel rechnet immer mit dem Zellwert, der identisch mit dem Wert der Combobox ist.

Hier noch ein Link, der gut beschreibt wo man generell VBA-Code in Excel einfügt:
Online-excel.de (http://www.online-excel.de/excel/singsel_vba.php?f=44)
Die meisten Codes werden in ein Allgemeines Modul geschrieben, im Link findest du das unter "Wie fügt man ein Makro oder eine benutzerdefinierte Funktion in ein Modul ein?"

klappt's?
Grüße, Ulrich

ctulhu
22.04.2009, 05:54
Hallo Ulrich,

vielen Dank für Deine ausführliche Anleitung. Ich habe es so angepasst und es funktoniert soweit. Deine Literaturangabe zu Excel werde ich mir demnächst genauer ansehen.

Allerdings benötige ich noch eine Art Aktualisierungsfunktion.

Die Werte für die Combobox liegen auf einem eigenen Tabellenblatt. Wie kann ich es erreichen, dass bei einer Änderung der Werte alle Comboboxen automatisch aktualisiert werden und ich nicht jede wieder manuell anpassen muss. Das ganze dient zur Simulation verschiedener Faktoren.

Viele Grüße
ctulhu

losgehts
22.04.2009, 09:00
Hi,

man kann die Comboboxes auf zwei grundsätzlich verschiedene Arten füllen:
- mit VBA
- über ihre Eigenschaft "ListFillRange" (mit und ohne VBA)

Bei deiner Konstruktion bietet sich bei dem was ich davon weiß die Eigenschaft "ListFillRange" an.
Eben wieder das Eigenschaftenfenster anzeigen lassen...
Und dann bei der Eigenschaft ListFillRange einen Bereich (z.B. Tabelle2!A1:A30) angeben. Dabei darf der Bereich auch auf einem anderen Tabellenblatt liegen.

Wenn es eine einspaltige Combobox ist, geht (sofern ich es richtig in Erinnerung habe) als Bereich nur ein Teil einer Spalte (Werte müssen also untereinander stehen).

klappt's?
Grüße, Ulrich

ctulhu
22.04.2009, 13:20
Hallo Ulrich,

wie Du beschrieben hast, habe ich es bisher realisiert. Mein derzeitiges Problem ist aber - wie in meinem letzten Beitrag beschrieben - eine Aktualisierung.

Da heißt wenn ich die aus dem Bereich (z.B. Tabelle2!A1:A30) Werte ändere soll automatisch in den entsprechenden Komboboxen und ihren korrespondierenden Zellen die geändereten Werte eingestellt werden. Also eine Art "requery" auf die gesamte Arbeitsmappe oder die Komboboxen.

Bsp.: Ändere ie den Wert Tabelle2!A1 von 2 auf 10 solle in den Komboboxen der Wert 2 durch 10 ersetzt werden.

Vieleicht hast Du dazu eine Lösung. Ansonsten muss ioch jede Komboboxe manuell aktualisieren oder doch eine Access-Lösung basteln.

Gruß
ctulhu

losgehts
22.04.2009, 15:06
Hi,

ich glaube, ich hab's verstanden. Hier kommen wir an VBA nicht vorbei (meines Wissens):
In den Links ist beschrieben, wo der jeweilige Code hingehört.
Ich deklariere in einem allgemeinen Modul (http://www.online-excel.de/excel/singsel_vba.php?f=44#s2) eine öffentliche Variable (Lebensdauer: bis die Datei geschlossen wird, oder man im VBA-Code rumfummelt):
'******************* allgemeines Modul **********************

Option Explicit
Public intIndex1 'Index der Combobox


Dann kümmere ich mich im Modul "DieseArbeitmappe" (http://www.online-excel.de/excel/singsel_vba.php?f=44#s3) darum, dass die Variable beim Öffnen gefüllt wird:'******************* Modul DieseArbeitsmappe **********************

Option Explicit

Private Sub Workbook_Open()
'füllt die Variable intIndex1 beim Öffnen der Datei
intIndex1 = Tabelle1.ComboBox1.ListIndex
End Sub


Wenn man etwas in der Combobox auswählt wird der Variablen der Index hinterlegt. Das steht im Modul des Tabellenblattes (http://www.online-excel.de/excel/singsel_vba.php?f=44#s4), auf dem die Combobox liegt:'******************* Modul Tabelle1 **********************
Option Explicit

Private Sub ComboBox1_Change()
'Speichert den neu gewählten Index in der Variable
intIndex1 = ComboBox1.ListIndex
End Sub




Und wenn eine Änderung in den Quelldaten der Combobox passiert, wird die Combobox wieder auf ihren vorherigen Index "zurückgestellt", wobei sie natürlich den neuen Wert annimmt (sofern der alte ausgewählt war). Das kommt in das Modul des Tabellenblattes (http://www.online-excel.de/excel/singsel_vba.php?f=44#s4) auf dem die Daten der Combobox liegen:'******************* Modul Tabelle2 **********************
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Die Combobox nimmt wieder den alten Index auf:
Tabelle1.ComboBox1.ListIndex = intIndex1
End Sub


Anpassungen an den Codes: "Tabelle1" muss durch den Codenamen des Tabellenblattes ersetzt werden, auf dem die Combobox liegt.
Den Codenamen findest du:
im Visualbasicedior (VBE); erreichbar aus Excel mit ALT+F11.
Auf der linken Seite müsstest du den Projektexplorer sehen (wenn nicht, dann Strg+R - schadet auch nicht, falls er schon angezeigt wird)
Dort siehst du die einzelnen Module
Du erkennst die Module der Tabellenblätter:
Die Bezeichnung in Klammern ist der Name, so wie er in Excel angezeigt wird (und auch geändert werden kann - also von jedem User ganz einfach).
Die Bezeichnung vor den Klammern ist der Codename des Moduls, der nur vom VBE aus geändert werden kann
"Tabelle2" muss ebenfalls angepasst werden.
"ComboBox1" ist der Name der Combobox
"Option Explicit" erkläre ich jetzt nicht, evtl. kennst du es von Access-Programmierung (davon habe ich keine Ahnung). Es sollte in jedem Modul in der ersten Zeile stehen, darf danach nicht noch einmal im Modul auftauchen.

Ich hoffe, ich habe alles beschrieben.


klappt's?
Grüße, Ulrich

ctulhu
23.04.2009, 06:20
Hallo Ulrich,

vielen Dank für Deine Mühe,

aber ich glaube dieser Weg in Excel ist zu mühsam. :rolleyes:

Je nach Anforderung habe ich mehrere Tabellen und in den Tabellen mehrere Comboboxen. Soweit ich durchblicke, gilt Dein Beispiel nur für eine Combobox. Es müsste dann für mein Vorhaben für mehrer comboboxen pro Tabelle in VBA durch zwei Schleifen ergänzt werden. In der ersten Schleife werden alle Tabellen durchlaufen und dann in jeder Tabelle in einer inneren Schleife alle Comboboxen nach Deinem Muster aktualisiert werden.

In Access ist die Aktualisation der Comboboxen überhaupt kein Aufwand, da diese direkt mit der zugrunde liegenden Datentabelle verknüpft werden können. Trotzdem werden ich mich nun intensiver mit Excel beschäftigen. Viieleicht krieg ich es doch noch damit hin. :)

Viele Grüße
ctulhu

losgehts
24.04.2009, 08:59
Hi,

ja, das Beispiel ist für nur eine Combobox.

Falls die Comboboxes die einzigen "Verknüpfungen" sind, die auf andere Tabellenblätter zugreifen, könntest du auch einfach die Comboboxes aktualisieren, wenn das Tabellenblatt auf dem sie liegen angezeigt wird. Und das geht ja doch recht zackig (macht aber auch nicht viel weniger Mühe).

Tja ich bin also mit meinem Latein am Ende. Aber vielleicht startest du noch einmal einen neuen Thread indem du dich nur nach der Aktualisierung fragst. Da fühlen sich sicherlich einige herausgefordert und ich kenne ja auch nicht alle Funktionen/Möglichkeiten in Excel. Wer weiß, vielleicht gibt es etwas ganz simples?

Falls du das machst wäre ein kleiner Hinweis hier im Thread nett, dann würde ich das mitbekommen und auch was dazu lernen ;-) .

Grüße, Ulrich