Exel - Zelleninhalt als Variable im Textfeld nutzen.

OP #6077903
Moin

In einem Textfeld möchte ich gerne Werte aus bestimmten Zellen stehen 
haben.
Wenn sich der Wert dieser Zellen ändert, dann soll natürlich auch das 
Textfeld angepasst werden.

Also so:

E1 = "Peter"
E2 = 55

Textfeld: "Hallo E1, du hast E2 Äpfel"


Eigentlich dachte ich, dass es so funktioniert:

="Hallo " & E1 & ", du hast" & E2 & " Äpfel"

Es erscheint aber die Fehlermeldung: kein gültiger Bezug oder Name.


Bin kein VBA Profi, aber wenns damit geht, wäre ich auch damit 
einverstanden.

Gruß Kolja
Gast #6078273
Hallo Kolja L.
In Open Office Calc funktioniert Folgendes:
="Hallo "&(E1)& ", Du hast "&(E2)&" Äpfel"
Also Deine ursprüngliche Version mit den Zellenbezeichnungen in 
Klammern.
#6078303
Kolja L. schrieb:
> Danke, aber wie kommt die Variable str in das Textfeld?
> Oder verstehe ich den Ansatz falsch?

In Deinem Eingangspost schreibst Du ich bin kein VBA-Spezialist, also 
bin ich davon ausgegangen, dass Du den Text im VBA benötigst.

Wenn Du nur die Zellen E1 und E2 in einer anderen Zelle Nutzen willst, 
ist kein VBA nötig, dann geht das mit verketten. Aber das wurde ja schon 
an anderer Stelle erwähnt.

Grüße
Roland
OP #6078312
Dafür wollte ich eine Lösung:

> In einem Textfeld möchte ich gerne Werte aus bestimmten Zellen stehen
> haben.

Das:

Heinz R. schrieb:
> ="Hallo "&(E1)& ", Du hast "&(E2)&" Äpfel"

und das:

MaWin schrieb:
> =CONCATENATE("Hallo ";E1;", Du hast ";E2; " Äpfel")

Funktioniert nicht in einem Textfeld.


Roland F. schrieb:
> In Deinem Eingangspost schreibst Du ich bin kein VBA-Spezialist, also
> bin ich davon ausgegangen, dass Du den Text im VBA benötigst.

Ja, aber wie bekomme ich den Inhalt der Variable in das Textfeld?
Danke für die Hilfe :-)
#6078316
Kolja L. schrieb:
> Dafür wollte ich eine Lösung:
>
>> In einem Textfeld möchte ich gerne Werte aus bestimmten Zellen stehen
>> haben.
>
> Das:
>
> Heinz R. schrieb:
>> ="Hallo "&(E1)& ", Du hast "&(E2)&" Äpfel"
>
> und das:
>
> MaWin schrieb:
>> =CONCATENATE("Hallo ";E1;", Du hast ";E2; " Äpfel")
>
> Funktioniert nicht in einem Textfeld.
>
> Roland F. schrieb:
>> In Deinem Eingangspost schreibst Du ich bin kein VBA-Spezialist, also
>> bin ich davon ausgegangen, dass Du den Text im VBA benötigst.
>
> Ja, aber wie bekomme ich den Inhalt der Variable in das Textfeld?
> Danke für die Hilfe :-)

Wie gesagt, Du brauchst dann kein VBA:
Schreibe folgendes in die Zelle wo der Text erstellt werden soll:
1
=VERKETTEN("Hallo "; E1; " du hast "; E2; " Äpfel")
Grüße
Roland
#6079212
Das ganze war leider mal wieder ein Missverständnis, das aber nicht von 
Koja ausgelöst wurde.

Jetzt habe ich aber hoffentlich verstanden, was gesucht wird.
Ich beschreibe das mal mit meinen Worten:

Es soll in einem Textfeld (keine Textzelle) ein Text zusammengebaut 
werden, der aus konstanten Textteilen und dem Inhalt zweier Zellen 
besteht.

Leider gibt es dafür keine Lösung ohne Hilfskonstukt.

Lösung 1: (Wurde schon genannt) Eine Hilfzelle nutzen in der der Text 
(mit Verketten) zusammengebaut wird, und im Textfeld auf diese 
Hilfszelle verweisen. Der Grund liegt darin, dass in Textfeldern nur auf 
eine Zelle verwiesen werden darf.

Lösung 2: Ein VBA-Code welcher durch ein Ereigniss ausgelöst wird.

Der VBA-Code muss in das Modul der betroffen Tabelle also z.B. 
"Tabelle1"  eingefügt werden.
Hier der VBA-Code:
1
Private Sub Worksheet_Change(ByVal Target As Range)
2
    If Target.Address = "$E$1" Or Target.Address = "$E$2" Then
3
        ActiveSheet.Shapes("TextBox 1").TextFrame.Characters.Text = "Hallo " + Range("E1").Value + " Du hast " + CStr(Range("E2").Value) + " Äpfel"
4
    End If
5
End Sub
Man könnte den VBA-Code sogar auf eine Zeile verkürzen indem man die 
Bedingung entfernt, das Ergebnis wäre das gleiche, der Code würde aber 
dann bei jeder Änderung einer belibigen Zelle durchlaufen werden.
Funktionier ist aber nicht so elegant.

So ich hoffe nun nicht wieder etwas misverstanden zu haben :-)

Grüße
Roland
Gast #6081386
Roland F. schrieb:

> Es soll in einem Textfeld (keine Textzelle) ein Text zusammengebaut
> werden, der aus konstanten Textteilen und dem Inhalt zweier Zellen
> besteht.

Wenn das so ist, dann bleibt die Frage: Wozu? Oder anders ausgedrückt: 
Warum muss es unbedingt ein Textfeld sein, warum tut es nicht einfach 
eine Zelle?

> Leider gibt es dafür keine Lösung ohne Hilfskonstukt.
[...]

So sieht's aus. Umso mehr stellt sich o.g. Frage...
OP #6081610
Moin

Hätte nicht gedacht, dass es hier noch weitergeht.

Roland F. schrieb:
> Das ganze war leider mal wieder ein Missverständnis, das aber nicht von
> Koja ausgelöst wurde.

Danke, danke, danke.

Habe wirklich an mir, bzw an meinen Formulierungen gezweifelt.

Roland F. schrieb:
> Es soll in einem Textfeld (keine Textzelle) ein Text zusammengebaut
> werden, der aus konstanten Textteilen und dem Inhalt zweier Zellen
> besteht.

Richtig!

Roland F. schrieb:
> Lösung 1:

Hatte ich auch erst so gemacht, ist aber unflexibel, weil nicht 
formatierbar.

Roland F. schrieb:
> Lösung 2: Ein VBA-Code welcher durch ein Ereigniss ausgelöst wird.

Das habe ich jetzt auch gemacht, in etwa so wie du.
1
 
2

3
JAHR = Range("Q12").Value 
4
WG = Range("G30").Value
5
BILANZ = CStr(Round(Abs(Range("K42").Value), 2)) + "€"
6
NEUE_MIETE = CStr(Range("E41").Value) + "€"
7

8
TEXT_VORHER = "Liebe Mitglieder des " + WG + vbCrLf + vbCrLf
9

10
SCHULDEN = "Ihr habt im Jahr " + JAHR + " leider " + BILANZ + " zu wenig Miete gezahlt" + vbCrLf + _
11
"Bitte überweisen " + vbCrLf + vbCrLf
12

13
GUTHABEN = "Ihr habt im Jahr " + JAHR + " " + BILANZ + " zu viel Miete gezahlt" + vbCrLf + _
14
"Bekommt ihr wieder" + vbCrLf + vbCrLf
15

16
TEXT_NACHHER = "Eure neue Miete beträgt: " + NEUE_MIETE + " " + vbCrLf + vbCrLf + _
17
"Liebe Grüße euer Schatzmeister"
18

19
If Range("K42").Value < 0 Then
20
    SOLL_HABEN = SCHULDEN
21
Else
22
    SOLL_HABEN = GUTHABEN
23
End If
24

25
    
26
    With ActiveSheet.Shapes("TextBox 1")
27
             .TextFrame2.TextRange = TEXT_VORHER + SOLL_HABEN + TEXT_NACHHER
28
             
29
             .TextFrame2.TextRange.Find(WG).Font.Bold = msoTrue
30
             .TextFrame2.TextRange.Find(BILANZ).Font.Bold = msoTrue
31
             .TextFrame2.TextRange.Find(NEUE_MIETE).Font.Bold = msoTrue
32
    End With
33
End Sub

Ausgelöst wird die Funktion über ein Button, der auch Jahr und Wohnung 
zuordnet.

Nicht ganz so einfach zu bearbeiten, wie ich anfangs wollte, aber es 
funktioniert.

c-hater schrieb:
> Warum muss es unbedingt ein Textfeld sein, warum tut es nicht einfach
> eine Zelle?

Vielleicht ist die Fage ja schon mit den Textbausteinen im Code 
beantwortet.
Was mich bei der ganzen Suche nach dieser Lösung etwas gewundert hat, 
ist dass es weder so einfach ist, wie ich anfangs dachte und dass es 
nicht ganz viele Beispiele für diese Funktion gibt. Ich bin irgendwie 
davon ausgegangen, dass es öfter vorkommt, dass in einem Fließtext 
Zahlenwerte variabel angegeben werden sollen. Die Lösung mit dem 
Textfeld ist ja quasi die Lightversion eines Serienbriefs mit der 
Kombination von Excel und Word. Hätte ich auch machen können, war mir 
dann aber etwas zu übertrieben.

Gruß Kolja
#6081622
Kolja, dafür gibt es Datenbanken. Mit Access ist das deutlich schöner 
und einfacher zu lösen.
Die meisten nutzen Excel eher als Datenbank.
Gut, auf der Arbeit mache ich das auch, weil der Austausch einfacher 
ist, aber grundsätzlich wäre vielmals eine Datenbank angebrachter.
Und auch die können rechnen.
OP #6081978
F. F. schrieb:
> Kolja, dafür gibt es Datenbanken

Für die eigentliche Aufgabe gibt es Hausverwalter, aber hier soll ja 
alles selbst gemacht werden und dann auch so, dass jeder einzelne Wunsch 
berücksichtigt wird, aber auch jeder ohne Abitur das system bedienen 
kann.

Die BKA der Jahre zuvor wurden mit Papier und Bleistift erstellt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.