Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
TextBox mittels Modul einfügen!
03.12.2008 11:21:27
adrian
Hi,
habe ma folgendes probiert, nur klappt es leider noch nicht so ganz!
Will 2 Zellen unterhalb eines jeden Wertes in einem Bereich eine Textbox einfügen.
habe das mir folgend gedacht:
Da ich noch VBA-Anfänger bin und in diversen Büchern nichts dazu finde, wäre es toll wenn mir hier jemand helfen könnte =)
lg
adrian
Aufruf im Hauptsheet:
For Each Cell In Range("ODMListB")
i = 0
If Cell.Value "" Then
Call AddTextbox(Stelle:=Worksheets("Overview").Range("E35").Offset(2, i))
i = i + 6
End If
Next
Module:

Sub AddTextbox(Stelle As Range)
Const TEXTBOX As String = "Forms.TextBox.1"
Dim Objekt As OLEObject
Dim ObForm As MSForms.TEXTBOX
With ActiveSheet
Set Objekt = .OLEObjects.Add(ClassType:=TEXTBOX, _
Left:=Range(Stelle).Left = 180, Top:=Range(Stelle).Top = 90, Width:=Range(Stelle).Width =  _
480, _
Height:=Range(Stelle).Height = 50).Select
Set ObForm = Objekt.Object
With ObForm
.Name = "ODMVolumeBox" & ActiveSheet.OLEObject.Count
.Caption = "ODMVolumeBox" & ActiveSheet.OLEObject.Count
.Enabled = True
End With
ActiveWorkbook.Save
End With
End Sub


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TextBox mittels VBA einfügen!
06.12.2008 04:53:00
Luc:-?
Hi, Adrian!
1. Was läuft denn nicht?
2. Wie sieht die Proz im "HptSheet" aus, denn das da ist ja nur ein Teil?
3. Soll das automatisiert laufen (&rarr s.2.)?
Gruß Luc :-?
AW: TextBox mittels VBA einfügen!
08.12.2008 13:22:17
adrian
Hi Luc,
im Hauptsheet habe ich einen Bereich "ODMListB", der Spaltenweise (immer 6 Spalten weiter) einen Wert aus anderen Sheets enthält bzw. anzeigt.
Die Range oder Größe bzw. der Inhalt von "ODMListB" variiert!
Die Funktion zum zum Auslesen der Werte "ALLODM_auslesen und übrigen Code habe ich mal weggelassen, weil es wahrsch. unwichtig ist.
Jetzt möchte ich 2 Zellen unterhalb jeder Zelle der Range "ODMListB" eine Textbox mit bestimmter Größe etc. einfügen.
optional:
Schrumpft die Range, sollen überflüssige Textboxen, d.h. welche über denen 2 Zellen oberhalb kein Wert mehr aus dem Bereich "ODMListB" steht, wieder entfernt werden.
lg
adrian
Folgender Codeausschnitt im Hauptsheet:

Sub CodeAusschnitt()
'#### Nochmals Aufnahme aller ODMs für Horizontale Darstellung! ####
Dim areaB As String, ODMBZeile As Long, ODMBSpalte As Long, Found As String, Kontrollzelle As  _
Range
areaB = "ODMListB"
Set rangeListeB = Nothing
Application.Range(areaB).ClearContents
Set rangeZielB = Application.Range(areaB).Range("A1")
Call AllODM_Auslesen(rangeSector:=Worksheets("Overview").Range("ODMListA"))
With rangeListeB
Application.Names(areaB).RefersTo = "='" & .Parent.Name & "'!" & .Address
End With
ODMBZeile = 33
With Datenblatt
ODMBSpalte = .Cells(ODMBZeile, .Columns.Count).End(xlToLeft).Column
Set Kontrollzelle = .Cells(ODMBZeile, ODMBSpalte)
End With
While Found  "Yes"
For Each Cell In Range("ODMListA")
If Cell.Value = Kontrollzelle.Value Then
Found = "Yes"
End If
Next
If Found  "Yes" Then
Kontrollzelle.Value = ""
Set Kontrollzelle = Kontrollzelle.Offset(0, -6)
End If
Wend
For Each Cell In Range("ODMListB")
If Cell.Value  "" Then
AddTextbox Cell.Offset(2, 0)
End If
Next
End Sub


Folgender Code im Modul1: habe fehlermeldung fett unterstrichen


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


Anzeige
AW: TextBox mittels VBA einfügen!
08.12.2008 13:47:44
adrian
Hi Luc,
lag daran, das ich die doppelt gemoppelt mit Range(Stelle).left die Location deklariert habe > muss lauten Stelle.left etc.
ABER
jetzt funktioniert es nur fast =/
er bringt die erste textbox richtig an, nur dann gibt er "Runtime Error 424", Object required aus und bricht ab =(
lg
adrian
AW: TextBox mittels VBA einfügen!
08.12.2008 16:44:04
adrian
Hi Luc,
es Funktioniert nun, doch hiermit bastel ich jetzt daran, dass er mir nicht immer wieder neue Textboxen in die Zellen einfügt, bzw die alten vorher löscht =/
mit:
MainSheet:
For Each Cell In Range("ODMListB")
If Cell.Value "" Then
Cell.Offset(2, 0).Clear
AddTextbox Cell.Offset(2, 0)
End If
Next
funktioniert es nicht wirklich =(
vll. hast du ja noch ne idee hierfür und ggf. noch Tipps bzgl. Aussehen etc.
Code im Modul sieht jetzt wie folgt aus:

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


lg
adrian

Anzeige
Modulcode sieht jetzt besser aus! Mich...
10.12.2008 04:41:50
Luc:-?
...hatte auch das Select im Set-Befehl gestört, Adrian!
Ansonsten bin ich mir nicht sicher, ob Clear die richtige Methode ist, auch Objekte auf einer Zelle zu löschen... ;-)
AddTextbox Cell.Offset(2, 0) ist schlicht Quatsch! Das hast du doch unten schon besser gemacht! Hier musst du wohl entweder erst die Zelle auswählen und dann mit Selection arbeiten, was nicht so toll ist, oder das gleich auf die Zelle beziehen. Sieh dir mal die Bspp in der VBE-Hilfe an!
Falls dann immer noch Probleme, hier wieder melden - finde ich schon, wenn ich auch dran denke... ;-)
Gruß Luc :-?
Anzeige
AW: Modulcode sieht jetzt besser aus! Mich...
10.12.2008 11:11:00
adrian
Hi Luc,
ja mir ist es auch bald gekommen, dass es mit clear und sonst allem was sich auf Zellen bezieht nicht funktioniert =)
Ist auch logisch, weil das Element bzw. die TextBox nicht in die Zelle eingefügt, sondern nur dort plaziert ist ;-)
denke zum löschen jetzt an folgendes: die erstellten Textboxen über den Namen alle raushauen und mit einem Zähler nacheinander ansprechen:
Funktioniert nicht so ganz, da bei ausführen des Events nur den letzte count gelöscht wird und dann kommt die Errormeldung: Method 'Name' of Object 'IMdcText' failed =(
bastel noch daran....hast du ein link zu den Bspp in der VB.-Hilfe?
lg
adrian
Modul:

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


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

Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige