Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textfeld ansprechen

Textfeld ansprechen
05.01.2005 15:38:00
Toni
Hallo VBA'ler,
Ich erstelle in einem Programm Textfelder(aus Zeichnen)mit Rahmen per Knopfdruck.
Diese Textfelder stellen Gebäude dar, die eine bestimmte Länge, Breite und Bezeichnung haben. Das ganze ergibt einmal einen Lageplan.
Das klappt soweit ganz gut.
Nun möchte ich noch erreichen, dass der Anwender das Gebäude (Textfeld) um 90 Grad drehen kann. Da dies mit Excel/Zeichnen-Mitteln wohl nicht möglich ist, möchte ich einfach Länge und Breite des Textfeldes (per VBA) vertauschen.
Der Anwender muss zunächst ein Textfeld markieren und soll dann über einen Button das Textfeld kippen.
Hier beginnen meine Schwierigkeiten:
Wie erkennt VBA das aktivierte Textfeld?
Gibt es sowas wie 'ActiveShape'?
Wie lese ich aus dem aktivierten Textfeld Länge und Breite aus und wie vertausche ich diese am besten?
Hier der Code, mit dem ich die Textfelder erstelle:

Private Sub cmdSkizzeStart_Click()
Dim multiL As Single
Dim multiB As Single
Dim anzGebAntrag As Integer
Dim mark1 As Single
Dim mark2 As Single
anzGebAntrag = Worksheets("Kundendaten").Range("B317").Value + _
Worksheets("Kundendaten").Range("B318").Value + _
Worksheets("Kundendaten").Range("B319").Value
ActiveSheet.Unprotect
mark1 = 145
mark2 = 2780
For i = 1 To anzGebAntrag
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, mark1, mark2, _
50, 50).Select
multiL = Worksheets("WEGebaeude").Range("D" & 6 + i).Value / 10
multiB = Worksheets("WEGebaeude").Range("E" & 6 + i).Value / 10
With Selection
.ShapeRange.ScaleHeight multiL, msoFalse, msoScaleFromTopLeft
.ShapeRange.ScaleWidth multiB, msoFalse, msoScaleFromTopLeft
.ShapeRange.Fill.Visible = msoTrue
.Characters.Text = Worksheets("WEGebaeude").Range("B" & 6 + i) & Chr(10) & "BAK " & _
Worksheets("WEGebaeude").Range("I" & 6 + i) & Chr(10) & _
Worksheets("WEGebaeude").Range("C" & 6 + i)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
With Selection.Characters.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 6
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
mark1 = mark1 + 10
mark2 = mark2 + 10
Next i
ActiveSheet.Protect DrawingObjects:=False
End Sub

Hat vielleicht jemand eine Idee ?
Ciao
Toni
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textfeld ansprechen
HerbertH
hallo Toni,
ein Textfeld kannst du so ansprechen,drehen:


Sub Txtf_änd()
Dim txtF As Object
Set txtF = Selection
Dim h, b
h = txtF.Height
b = txtF.Width
txtF.Height = b
txtF.Width = h
End Sub

     gruß Herbert
Anzeige
AW: Textfeld ansprechen
06.01.2005 11:52:49
Toni
Hallo Herbert,
vielen Dank für Deinen Tip, aber so ganz klappt das noch nicht.
Ich habe den Code in das Click-Ereignis eines Buttons eingebunden. Das Objekt txtF ist dann die letzte aktive Zelle im Sheet und nicht das markierte Textfeld.
Mir wäre schon geholfen, wenn in dem Moment, wo das Textfeld markiert wird, irgendwie der Name des Textfeldes ermittelt werden könnte. Dann kann ich danach, wenn der Anwender über den Button das Textfeld drehen möchte diesen Namen konkret verwenden.
Vielleicht sehe ich auch den Wald vor lauter Bäumen nicht...
Hier noch mal mein Problem:
Ich habe auf einem Excel-Sheet diverse Textfelder (aus Zeichnen).
Eines dieser Textfelder markiere ich mit der Maus.
Wenn ich nun einen Button drücke, soll das eben markierte Textfeld Länge und Breite vertauschen (um 90 Grad gekippt werden).
Vielleicht fällt Euch ja noch etwas ein...
Ciao
Toni
Anzeige
AW: Textfeld ansprechen
06.01.2005 14:08:37
Toni
Hallo Herbert,
jetzt funktioniert es bei mir auch!!!
Ich habe eine Schaltfläche aus der Formular Symbolleiste genommen und das Makro zugewiesen.
Im Click-Ereignis einer Schaltfläche aus der Steuerelemente-Toolbox habe ich es nicht hinbekommen.
Vielen Dank für Deine Hilfe...
Toni
Anzeige
AW: Textfeld ansprechen
HerbertH
ja das stimmt, da gehts nicht...
die Autoformen kannst du übrigens auch
zur Makroausführung benützen...
gruß Herbert
;
Anzeige
Anzeige

Infobox / Tutorial

Textfeld in Excel VBA ansprechen und drehen


Schritt-für-Schritt-Anleitung

  1. Textfeld erstellen: Du kannst ein Textfeld in Excel erstellen, indem du die Shapes-Funktion verwendest. Hier ist ein Beispiel, wie du Textfelder erstellst:

    Private Sub cmdSkizzeStart_Click()
        Dim mark1 As Single
        Dim mark2 As Single
        mark1 = 145
        mark2 = 2780
    
        ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, mark1, mark2, 50, 50).Select
        ' Weitere Anpassungen für das Textfeld hier
    End Sub
  2. Textfeld auswählen: Stelle sicher, dass du das Textfeld auswählst, das du drehen möchtest. Du kannst dies manuell tun oder über VBA:

    Dim txtF As Object
    Set txtF = Selection
  3. Größen tauschen: Um das Textfeld um 90 Grad zu kippen, tausche die Höhe und Breite aus:

    Dim h As Single, b As Single
    h = txtF.Height
    b = txtF.Width
    txtF.Height = b
    txtF.Width = h
  4. Schaltfläche zuweisen: Füge eine Schaltfläche hinzu und weise das Makro zu, um die Funktion auszuführen.


Häufige Fehler und Lösungen

  • Problem: Das aktive Textfeld wird nicht erkannt.

    • Lösung: Stelle sicher, dass du die Schaltfläche aus der Formularsymbolleiste verwendest. Mit der Steuerelemente-Toolbox kann das Makro möglicherweise nicht korrekt auf das aktive Textfeld zugreifen.
  • Problem: Der Code verweist auf die letzte aktive Zelle anstelle des markierten Textfeldes.

    • Lösung: Überprüfe, ob das Textfeld tatsächlich ausgewählt ist. Verwende Set txtF = Selection, um sicherzustellen, dass das korrekte Objekt referenziert wird.

Alternative Methoden

  • Word VBA Textfeld ansprechen: Einige Methoden in Word sind ähnlich, jedoch können die Eigenschaften und Methoden sich unterscheiden. Achte darauf, die spezifische VBA-Syntax für Word zu verwenden, wenn du in dieser Umgebung arbeitest.

  • Verwendung von Autoformen: Anstelle von Textfeldern kannst du auch Autoformen verwenden, die ähnliche Funktionalitäten bieten und einfacher zu manipulieren sind.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Funktionalität zu demonstrieren:

Sub Txtf_änd()
    Dim txtF As Object
    Set txtF = Selection
    Dim h As Single, b As Single
    h = txtF.Height
    b = txtF.Width
    txtF.Height = b
    txtF.Width = h
End Sub

Nutze dieses Makro, nachdem du ein Textfeld ausgewählt hast, und es wird die Größe entsprechend vertauschen.


Tipps für Profis

  • Fehlerbehandlung: Implementiere Fehlerbehandlungen in deinem VBA-Code, um unerwartete Probleme zu vermeiden. Verwende On Error Resume Next, um den Code bei Fehlern fortzusetzen.

  • Makros optimieren: Halte deinen Code modular und benutze Funktionen, um wiederholte Aufgaben zu vermeiden. Das verbessert die Lesbarkeit und Wartbarkeit.


FAQ: Häufige Fragen

1. Wie kann ich das aktive Textfeld in VBA ansprechen?
Um das aktive Textfeld anzusprechen, verwende Set txtF = Selection, nachdem du das Textfeld ausgewählt hast.

2. Welche Excel-Version benötige ich für diese Funktionen?
Die beschriebenen VBA-Funktionen sind in Excel 2007 und neueren Versionen verfügbar.

3. Kann ich ähnliche Techniken in Word verwenden?
Ja, du kannst ähnliche Techniken verwenden, aber die spezifischen Methoden und Eigenschaften müssen an die Word VBA-Umgebung angepasst werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige