Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Einer Zelle aus dem Namens-Manager per VBA einen Wert zuweisen (Excel 2012)

1,070 views
Skip to first unread message

Marcello

unread,
Aug 27, 2012, 8:40:49 AM8/27/12
to marcel...@bluewin.ch
Werte Kollegen

In einer Berechnung auf den Excelsheet gibt es eine Zelle für den Dateninput (Name: KM6x6AWK_Navigator_I) und für den Datenoutput (KM6x6AWK_Navigator_O).

In einer Function Test1() kann ich den Wert des Outputs wie folgt auslesen:
Test1 = wsKonfigMatrix.Range("KM6x6AWK_Navigator_O").Value. Dies klappt.

Gerne möchte ich aus der Funktion der Inputzelle einen Wert zuweisen.
wsKonfigMatrix.Cells.Range("KM6x6AWK_Navigator_I").Value = 0.123
oder wsKonfigMatrix.Range("KM6x6AWK_Navigator_I").Value = 0.123
oder wsKonfigMatrix.Cells("KM6x6AWK_Navigator_I").Value = 0.123
oder wsKonfigMatrix.Cells("$D$11").Value = 0.123

Leider klappt einfach nichts davon.
Weiss jemand einen guten Rat?

NB:
Dim wbBook As Workbook
Dim wsKonfigMatrix As Worksheet
Set wsKonfigMatrix = wbBook.Worksheets("KonfigMatrix")

1000x Dank.
Marcello

Claus Busch

unread,
Aug 27, 2012, 8:54:42 AM8/27/12
to
Hallo Marcello,

Am Mon, 27 Aug 2012 05:40:49 -0700 (PDT) schrieb Marcello:

> In einer Berechnung auf den Excelsheet gibt es eine Zelle für den Dateninput (Name: KM6x6AWK_Navigator_I) und für den Datenoutput (KM6x6AWK_Navigator_O).
>
> In einer Function Test1() kann ich den Wert des Outputs wie folgt auslesen:
> Test1 = wsKonfigMatrix.Range("KM6x6AWK_Navigator_O").Value. Dies klappt.
>
> Gerne möchte ich aus der Funktion der Inputzelle einen Wert zuweisen.
> wsKonfigMatrix.Cells.Range("KM6x6AWK_Navigator_I").Value = 0.123
> oder wsKonfigMatrix.Range("KM6x6AWK_Navigator_I").Value = 0.123
> oder wsKonfigMatrix.Cells("KM6x6AWK_Navigator_I").Value = 0.123
> oder wsKonfigMatrix.Cells("$D$11").Value = 0.123

> NB:
> Dim wbBook As Workbook
> Dim wsKonfigMatrix As Worksheet
> Set wsKonfigMatrix = wbBook.Worksheets("KonfigMatrix")

bekommst du keine Fehlermeldung weil wbBook nicht initialisiert
wird?Stimmt dein Name für die Input-Zelle?
Bei mir funktioniert es so:

Sub Test()
Dim wbBook As Workbook
Dim wsKonfigMatrix As Worksheet

Set wsKonfigMatrix = Worksheets("KonfigMatrix")
wsKonfigMatrix.Range("KM6x6AWK_Navigator_I") = 0.123
End Sub


Mit freundlichen Grüßen
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3

Marcello

unread,
Aug 27, 2012, 10:45:31 AM8/27/12
to marcel...@bluewin.ch
Hoi Claus
Vielen herzlichen Dank für die tolle Antwort. Als Sub funzelt deine Lösung genau, wie sie sollte. Aber als Funktion geht sie nicht.
Wie müsste ich denn das wbBook initialisieren?

NB: div. Aufrufe im Excel, z.B.:
=Test1(C38)

Function Test1(EW_AW As Double)

Dim wbBook As Workbook
Dim wsKonfigMatrix As Worksheet

Set wbBook = ActiveWorkbook 'Setzt actives Workbook
Set wsKonfigMatrix = Worksheets("KonfigMatrix") ' Setzt Worksheet "KonfigMatrix"

wsKonfigMatrix.Range("KM6x6AWK_Navigator_I") = 0.123 'funzelt nicht
'Idee: wsKonfigMatrix.Range("KM6x6AWK_Navigator_I") = EW_AW 'funzelt nicht
Test1 = wsKonfigMatrix.Range("KM6x6AWK_Navigator_O").Value 'funzelt
End Function

Claus Busch

unread,
Aug 27, 2012, 12:26:48 PM8/27/12
to
Hallo Marcello,

Am Mon, 27 Aug 2012 07:45:31 -0700 (PDT) schrieb Marcello:

> Hoi Claus
> Vielen herzlichen Dank für die tolle Antwort. Als Sub funzelt deine Lösung genau, wie sie sollte. Aber als Funktion geht sie nicht.
> Wie müsste ich denn das wbBook initialisieren?

eine Function gibt dir ein Wert aus, indem du sie in einer Zelle
aufrufst. Du lässt dir den Wert von KM6x6AWK_Navigator_O anzeigen, indem
du =Test1() in eine Zelle schreibst.
D.h., wenn du einer Zelle einen Wert zuweisen willst aus einer Function,
musst du diese in der gewüsnchten Zelle aufrufen. Du müsstest also z.B.
in der Zelle mit dem Namen KM6x6AWK_Navigator_I die Function =Test1()
aufrufen.
Mach das Ganze mit einer Prozedur.

Marcello

unread,
Aug 28, 2012, 12:12:56 PM8/28/12
to marcel...@sbb.ch
Hallo Claus
Besten Dank für die umfangreiche Antwort. Ich habe noch versucht, aus der Function die funktionierende Sub mit dem entsprechenden Code aufzurufen. Das will auch nicht funktionieren.
Eigentlich will ich nur in einem parametrisierbaren Berechungsteil auf einem Tabellenblatt ein Wert eingeben, das Resultat rechnen lassen und dieses in diejenige Zelle übergeben, welche die Funktion aufruft.
So bleibt mir nun nichts anderes übrig, wie bisher die berechneten Werte zu historisieren.
Nochmals besten Dank und schöner Abend.
Grüsse aus dem schönen Luzern.
Marcel

Claus Busch

unread,
Aug 28, 2012, 12:30:47 PM8/28/12
to
Hallo Marcello,

Am Tue, 28 Aug 2012 09:12:56 -0700 (PDT) schrieb Marcello:

> Besten Dank für die umfangreiche Antwort. Ich habe noch versucht, aus der Function die funktionierende Sub mit dem entsprechenden Code aufzurufen. Das will auch nicht funktionieren.
> Eigentlich will ich nur in einem parametrisierbaren Berechungsteil auf einem Tabellenblatt ein Wert eingeben, das Resultat rechnen lassen und dieses in diejenige Zelle übergeben, welche die Funktion aufruft.
> So bleibt mir nun nichts anderes übrig, wie bisher die berechneten Werte zu historisieren.

du kannst nicht aus einer Funktion eine Prozedur aufrufen, aber du
kannst aus einer Prozedur eine Funktion aufrufen. Beschreib doch mal,
was du genau im Tabellenblatt machen willst, vielleicht ist doch noch
etwas machbar.

Marcello

unread,
Aug 28, 2012, 1:50:38 PM8/28/12
to
Hallo Claus
es ist eigentlich ganz einfach: für diverse X-Y- Grafiken rechne ich jeweils bis 150 X- und Y-Punkte um. Jeden Monat kommen ein paar dazu. Die Umrechung geschieht in einem Tabellenblatt. Der nicht VBA-gewohnte User kann die Umrechnung in diesem Blatt jederzeit umgestalten und neu parametrisieren. Das Einzige, was er nicht verändern darf, ist die Input- und die Outputzelle.
Jeder geänderte oder neue Punkt ruft die Funktion neu auf (=fktTest(B9)). Diese sollte den Inputparameter in die Tabelle schreiben (eben dies geht nicht), F9=berechnen durchführen und dann den Outputparameter wieder zurückgeben (dies geht bekanntlich).
Bis jetzt habe ich das so gelöst, dass ich die Werte gerechnet und mittels einer Routine in eine Historisierungstabelle geschrieben habe. Das geht gut für neue Punkte, ist aber aufwändig für Korrekturen in der Vergangenheit.
Falls du eine bessere Idee hast, bin ich dir sehr dankbar.

Beste Grüsse, Marcello
0 new messages