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
E2 muss als Text formatiert werden: ="Hallo " & E1 & ", du hast " & text(E2;"0") & " Äpfel"
:
Bearbeitet durch User
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
Schaue mal nach den Funktionen VERKETTEN oder TEXTVERKETTEN. Da solltest Du das Gewünschte finden.
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 :-)
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
Tom schrieb: > Schaue mal nach den Funktionen VERKETTEN oder TEXTVERKETTEN. > > Da solltest Du das Gewünschte finden. =Verketten() ist die korrekte Funktion dafür
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
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?
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.
Hä? was wird denn hier wieder für eine Scheisse gelabert. =CONCATENATE("Hallo ";E1;", Du hast ";E2; " Äpfel")
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
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
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 :-)
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
Ja, in Zellen funktioniert das, aber nicht in Textfeldern.
Kolja L. schrieb: > Ja, in Zellen funktioniert das, aber nicht in Textfeldern. Wie öffnest du ohne VBA ein Textfeld?
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
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...
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.