Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1028to1032
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Textboxen mit Makro erstellen & löschen
10.12.2008 15:13:00
adrian
Hi,
vielleicht weiß hier jemand eine Bessere Lösung bzw. zum wieder Löschen eine funktionierende!
wäre toll =)
hier werden Textboxen für jeden Wert eines Bereichs erstellt:
Modul:

Sub AddTextbox(Stelle As Range)
Dim Objekt As OLEObject
Dim TB As MSForms.TEXTBOX
With ActiveSheet
Set Objekt = .OLEObjects.Add(ClassType:="Forms.TextBox.1", Left:=Stelle.Left, _
Top:=Stelle.Top, Width:=Stelle.Width, Height:=Stelle.Height)
Set TB = Objekt.Object
With TB
.Name = "ODMVolumeBox" & ActiveSheet.OLEObjects.Count
End With
End With
End Sub


Aufruf im Hauptsheet:
For Each cell In Range("ODMListB")
If cell.Value "" Then
AddTextbox cell.Offset(2, 0)
End If
Next
Funktioniert auch soweit, nur werden ja bei ausführen des Makros die generierten Textboxen immer wieder überschrieben!
Diese möchte ich zuvor wieder löschen, da sich später auch die Werte/ Inhalte in den Textboxen fortlaufend ändern.
zum Löschen habe ich mir bis jetzt folgendes überlegt, nur leider bin ich noch VBA-Anfänger und habe irgendwo den Wurm drin und sehe/finde ihn nicht =(
Für andere Vorschläge und Erklärungen wäre ich sehr dankbar =)
lg
adrian
Modul:


Sub DeleteTextBox(Bereich As Range)
Dim TB As MSForms.TEXTBOX
Dim Objekt As OLEObject
Dim Anzahl As Integer, Pos As Integer, Zaehler As Integer
Anzahl = Bereich.Cells.Count
For Zaehler = 0 To Anzahl - 1
With ActiveSheet
Pos = .OLEObjects.Count - Zaehler
For Each Objekt In .OLEObjects
If Objekt.Name = "ODMVolumeBox" & Pos Then
Objekt.Delete
End If
Next
End With
Next
End Sub


Aufruf im HS:
DeleteTextBox Bereich:=Worksheets("overview").Range("ODMListB")

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textboxen mit Makro erstellen & löschen
10.12.2008 15:26:51
Beverly
Hi Adrian,
versuche es mal so:

Sub loeschen()
For Each Objekt In ActiveSheet.OLEObjects
If InStr(Objekt.Name, "ODMVolumeBox") > 0 Then Objekt.Delete
Next Objekt
End Sub


Definiere die Variable Objekt außerhalb der Prozedur, dann kann sie sowohl für das Erstellen als auch für das Löschen verwendet werden.



AW: Textboxen mit Makro erstellen & löschen
10.12.2008 15:47:00
Tino
Hallo,
weiser doch der TextBox immer einen Eindeutigen Name zu, somit kannst Du diese vor dem erstellen auch löschen.
Im Beispiel verwende ich die die Zelladresse um die TextBox eindeutig identifizieren zu können.
Hallo,
weiser doch der TextBox immer einen Eindeutigen Name zu, somit kannst Du diese vor dem erstellen auch löschen.
Im Beispiel verwende ich die die Zelladresse um die TextBox eindeutig identifizieren zu können.
Option Explicit

Sub AddTextbox(Stelle As Range)
  Dim Objekt As OLEObject
  Dim TB As MSForms.TextBox
  
  With ActiveSheet
    On Error Resume Next
     'löschen falls vorhanden 
     .Shapes("ODMVolumeBox" & Stelle.Address(False, False)).Delete
    On Error GoTo 0
    
    Set Objekt = .OLEObjects.Add(ClassType:="Forms.TextBox.1", Left:=Stelle.Left, _
                    Top:=Stelle.Top, Width:=Stelle.Width, Height:=Stelle.Height)
    Set TB = Objekt.Object
    
    With TB
      .Name = "ODMVolumeBox" & Stelle.Address(False, False)
    End With 'TB 
  
  End With 'ActiveSheet 
End Sub

Sub Test()
Dim rngCell As Range
    For Each rngCell In Range("ODMListB")
        If rngCell.Value <> "" Then
         AddTextbox rngCell.Offset(2, 0)
        End If
    Next
End Sub


Gruß Tino
Gruß Tino

Anzeige
AW: Textboxen mit Makro erstellen & löschen
10.12.2008 16:20:57
Beverly
Hi Tino,
falls es dir nicht aufgefallen ist - in Adrians Code wird den TextBoxen ein eindeutiger Name zugewiesen, und zwar in diesen 3 Zeilen:

With TB
.Name = "ODMVolumeBox" & ActiveSheet.OLEObjects.Count
End With


und zwar "ODMVolumeBox" und eine fortlaufende Nummer.



AW: Textboxen mit Makro erstellen & löschen
10.12.2008 16:26:00
Tino
Hallo,
Count ist doch ein Zähler und kein eindeutiger Name?
Woher soll den der Code wissen, dass die Textbox z. Bsp. in Zelle A5 den Zähler-Wert 46 bekommen hat?
Gruß Tino
Anzeige
AW: Textboxen mit Makro erstellen & löschen
10.12.2008 16:48:46
Beverly
Hi Tino,
es war nicht die Rede von Count als eindeutigen Namen, sondern von "ODMVolumeBox" (s. meine letzten Beitrag), welchem nur noch eine Ziffer (OLEObjects.Count) hintenangestellt wird. Für das Löschen spielt es doch keine Rolle, welche TextBox welchen Ziffernzusatz erhält, es sollen ja alle gelöscht werden, die den eindeutigen Namen "ODMVolumeBox" beinhalten.


AW: Textboxen mit Makro erstellen & löschen
10.12.2008 17:05:00
Tino
Hallo Beverly,
dann habe ich die Frage wohl falsch verstanden, Egal irgendeine Version wird schon passen.
Gruß Tino
Anzeige
AW: Textboxen mit Makro erstellen & löschen
11.12.2008 11:43:52
adrian
Hi Karin & Tino,
Danke euch beiden erst mal für eure Vorschläge und Hilfe =)
Werde mit beiden etwas experimentieren und hoffe es klappt!
Zu dem was Karin meinte:
"Für das Löschen spielt es doch keine Rolle, welche TextBox welchen Ziffernzusatz erhält, es sollen ja alle gelöscht werden, die den eindeutigen Namen "ODMVolumeBox" beinhalten."
Ihr habt ja gesehen, dass ich eben die Textboxen über ihren Namen UND ihrer fortlaufenden Nummer, mit einem Zähler löschen wollte.
Es ist also möglich alle Textboxen mit gleichem Namen, unabhängig von Ihrem Zähler bzw. Zahlenanhang zu löschen...
d.h. ich könnte diese gezähle just weglassen?
mit If InStr(Objekt.Name, "ODMVolumeBox") "größer" 0 schaust du Ob in dem Namen des Objekts der Teil ODMVolumeBox vorkommt... Richtig?! =)
so far...
Danke & Lg
adrian
Anzeige
AW: Textboxen mit Makro erstellen & löschen
11.12.2008 13:51:00
Beverly
Hi Adrian,
es gehen natürlich beide Varianten - sowohl mit dem Erkennen der zugeordneten Zelle (Tino's Code), als eben auch die Prüfung, ob der String ODMVolumeBox im Namen der TextBox enthalten ist. Da in deinem Beispiel letzteres der Fall ist, muss man den Umweg über die zugeordnete Zelle nicht gehen - dies und nichts anderes habe ich gemeint. Einen Zusatz (lfd. Nummer, kann aber auch etwas völlig anderes sein) zum Grundstring "ODMVolumeBox" musst du den TextBoxen beim Erstellen schon zuweisen, weil es nicht mehrere TextBoxen mit dem selben Namen im Tabellenblatt geben kann. Nur beim Löschen spielt dieser Zusatz keine Rolle, da man halt prüfen kann, ob im Namen etwas Bestimmtes (String, Zeichen, Ziffer bzw. -folge) enthalten ist.


Anzeige
AW: Textboxen mit Makro erstellen & löschen
11.12.2008 17:21:54
adrian
Hi Karin,
Ja das meinte ich, hab es gerafft =)
Wie kann ich denn eigentlich anstatt alle Objekte im Sheet zu zählen "ActiveSheet.OLEObjects.Count"
nur bestimmte z.B. nur Textboxen oder OptionButton zählen?
würde das vll. mit Set Objekt.progID = "Forms.TextBox.1" und dann ActiveSheet.Objekt.progID.Count gehen? *duck*
lg
adrian
AW: Textboxen mit Makro erstellen & löschen
11.12.2008 18:06:00
Beverly
Hi Adrian,
soweit ich weiß geht es nicht, sie auf einen Ritt zu zählen, aber man kann sich mit einer Schleife behelfen

Sub textboxen_zaehlen()
Dim arrTextBoxen()
Dim inTextBoxen As Integer
Dim oobElement As OLEObject
For Each oobElement In ActiveSheet.OLEObjects
If oobElement.progID = "Forms.TextBox.1" Then
ReDim Preserve arrTextBoxen(0 To inTextBoxen)
arrTextBoxen(inTextBoxen) = oobElement.Name
inTextBoxen = inTextBoxen + 1
End If
Next oobElement
On Error Resume Next
If Not IsError(LBound(arrTextBoxen())) Then MsgBox UBound(arrTextBoxen) + 1
On Error GoTo 0
End Sub


Hier werden auch gleich die Namen ermittelt. Wenn man nur zählen will, reicht ein Scghleifenzähler aus.



Anzeige
AW: Textboxen mit Makro erstellen & löschen
15.12.2008 15:05:17
adrian
Hi Karin,
vielen Dank nochmal & vll. hast du hierfür noch Rat für mich =)
möchte jetzt genauso auch OptionButtons erstellen, nur weiß ich nicht genau wie ich per click 3 zusammen, wenn möglich in einer Gruppe, erstellen kann =/
Also mit click rufe ich folgendes auf:

Sub CommandButton5_Click()
AddTextfeld Range("K20")
AddOptionButton Range("S25")
End Sub


Hätte nur die Idee 2 weitere Funktionen für die die 2 zusätzlichen OB zu machen, aber das ist ja wohl nicht die feine englische!
lg
adrian

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige