Forum: PC-Programmierung Exel - Zelleninhalt als Variable im Textfeld nutzen.


von Kolja L. (kolja82)


Lesenswert?

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

von Richard H. (richard_h27)


Lesenswert?

E2 muss als Text formatiert werden:
="Hallo " & E1 & ", du hast " & text(E2;"0") & " Äpfel"

: Bearbeitet durch User
von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

Leider nicht :-(

von Olaf B. (omb)


Lesenswert?

Laut dieser Seite funktioniert es nur wenn du eine Zelle der Tabelle als 
"Zwischenspeicher" nutzt. Und dann auf diese Zelle verweist:
https://supportnet.de/fresh/2008/7/id2133989.asp

von Tom (Gast)


Lesenswert?

Schaue mal nach den Funktionen VERKETTEN oder TEXTVERKETTEN.

Da solltest Du das Gewünschte finden.

von Kolja L. (kolja82)


Lesenswert?

Danke, das mit der Hilfszelle ist nervig, aber funktioniert erstmal.

Da ich aber nicht nur einen Satz im Textfeld haben werde, ist das schon 
recht aufwändig.
Eine einfachere Lösung ist immer noch gerne gesehen :-)

von Roland F. (roland_f451)


Lesenswert?

Dann probiere es einmal so:
1
Dim str As String
2
str = "Hallo " + Range("E1").Value + " Du hast " + CStr(Range("E2").Value) + " Äpfel"
Grüße
Roland

von HildeK (Gast)


Angehängte Dateien:

Lesenswert?

Kolja L. schrieb:
> Leider nicht :-(

Doch, schon. Du solltest
   text(E2;"0")
ändern in
   text(E2;0)

von Mike B. (mike_b97) Benutzerseite


Lesenswert?

Tom schrieb:
> Schaue mal nach den Funktionen VERKETTEN oder TEXTVERKETTEN.
>
> Da solltest Du das Gewünschte finden.

=Verketten() ist die korrekte Funktion dafür

von Roland F. (roland_f451)


Lesenswert?

HildeK schrieb:
> Doch, schon. Du solltest
>    text(E2;"0")
> ändern in
>    text(E2;0)

Das geht aber wieder nur über die Hilfszelle, das wollte er ja gerade 
vermeiden.
Daher die Variante mit dem Range("<Zelle>).Value und im Falle von Zahlen
Cstr(Range("<Zelle>").Value)

Grüße
Roland

von Kolja L. (kolja82)


Lesenswert?

Mike B. schrieb:
> =Verketten() ist die korrekte Funktion dafür

Nur in der Zelle, nicht im Textfeld möglich.

Roland F. schrieb:
>  Dim str As String
> str = "Hallo " + Range("E1").Value + " Du hast " +
> CStr(Range("E2").Value) + " Äpfel"


Danke, aber wie kommt die Variable str in das Textfeld?
Oder verstehe ich den Ansatz falsch?

von Heinz R. (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

Hä? was wird denn hier wieder für eine Scheisse gelabert.

=CONCATENATE("Hallo ";E1;", Du hast ";E2; " Äpfel")

von Hugo H. (hugohurtig1)


Lesenswert?

MaWin schrieb:
> CONCATENATE

In unserem Sprachraum durch "VERKETTEN" (ohne ") zu ersetzen :-)

von Hugo H. (hugohurtig1)


Lesenswert?

Kolja L. schrieb:
> Mike B. schrieb:
>> =Verketten() ist die korrekte Funktion dafür
>
> Nur in der Zelle, nicht im Textfeld möglich.

Was meinst Du damit?

Du wolltest eine Excel-Lösung (die funktioniert nunmal mit Zellen) - da 
ist sie:  =VERKETTEN() .

: Bearbeitet durch User
von Roland F. (roland_f451)


Lesenswert?

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

von Kolja L. (kolja82)


Lesenswert?

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 :-)

von Roland F. (roland_f451)


Lesenswert?

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

von Kolja L. (kolja82)


Lesenswert?

Ja, in Zellen funktioniert das, aber nicht in Textfeldern.

von pnp (Gast)


Lesenswert?

Kolja L. schrieb:
> Ja, in Zellen funktioniert das, aber nicht in Textfeldern.

Wie öffnest du ohne VBA ein Textfeld?

von Kolja L. (kolja82)


Lesenswert?

pnp schrieb:
> Wie öffnest du ohne VBA ein Textfeld?

Einfügen -> Textfeld ?

von Roland F. (roland_f451)


Lesenswert?

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

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

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...

von Kolja L. (kolja82)


Lesenswert?

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

von F. F. (foldi)


Lesenswert?

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.

von Kolja L. (kolja82)


Lesenswert?

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.

von F. F. (foldi)


Lesenswert?

Kolja L. schrieb:
> Die BKA der Jahre zuvor wurden mit Papier und Bleistift erstellt.

Ist vielleicht auch heute (wieder) nicht die schlechteste Idee.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.