Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem mit Programmiercode

Problem mit Programmiercode
20.06.2007 13:12:00
Losos
Hallo,
ich habe ein Problem mit einem Code.
Den Codebeispiel habe ich hier in Forum gefunden und an meine Anwendung anpassen wollen.
Leider sind meine Kenntnisse nicht ausreichend um den Code zu nutzen und brauche Hilfe.
Der angehängte Code-Auszug ist zu beseren Darstellungs meines Problems gedacht.
Auf dem UserForm1 habe ich 2 TextBoxen, wenn ich den Code über ein DoppelClick (TextBox1) aufrufe wird ColorPicker1 gezeigt und ich kann meine Farben ( Hintergrund und Schriftfarbe) auswählen, und die Farben auf dem Tabelleblatt ändern. Ferner werden auch Texte aus dem TextBox übernehmen.
Ich habe aber mehrere TextBoxen die mit unterschiedlichen Farben versehen wollte.
Leider kann ich den Code nur an das eine TextBox zuordnen.
Wenn ich den Code für das zweite TextBox (kopiert und angepasst) auch mit DoppelClick anspreche bricht daß ganze zusammen weil die erste ist noch ofen. Also muss ich jedes mal erst das erste ColorPicker schliesen um das zweite zu öfnen.
Aber wenn ich an die 20 TextBoxen habe und für alle fast das gleiche Code schreiben muss wird das sehr unübersichtlich.
Kann man es vereinfachen?
Hier ist der Code:

Public clrArt As Boolean
Sub ColorPicker1()
Dim dlgFarben As DialogSheet
Dim btnOK As Button, btnCancel As Button
Dim optInterior As OptionButton, optFont As OptionButton
Dim txtClr As TextBox
Dim intRow As Integer, intCol As Integer
Dim l As Integer, t As Integer, intClr As Integer
Application.ScreenUpdating = False
Set dlgFarben = DialogSheets.Add
With dlgFarben
.Name = "dlgFarben"
With .DialogFrame
.Top = 0
.Left = 0
.Height = 200
.Width = 170
.Caption = "Farben Picker"
End With
l = 15
t = 15
Set optInterior = .OptionButtons.Add(l, t, 75, 15)
optInterior.Caption = "Hintergrundfarbe"
optInterior.Value = xlOn
Set optFont = .OptionButtons.Add(l + 75, t, 75, 15)
optFont.Caption = "Schriftfarbe"
t = t + 20
For intRow = 1 To 7
l = 15
For intCol = 1 To 8
intClr = intClr + 1
Set txtClr = .TextBoxes.Add(l, t, 16, 16)
With txtClr
.Interior.ColorIndex = intClr
.OnAction = "FarbAuswahl1"
.Name = "clr" & intClr
End With
l = l + 18
Next intCol
t = t + 18
Next intRow
Set btnOK = .Buttons(1)
Set btnCancel = .Buttons(2)
btnOK.Top = 180
btnOK.Left = 25
btnCancel.Top = 180
btnCancel.Left = 100
Worksheets(1).Select
.Show
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With
End Sub
Sub FarbAuswahl1()
Dim strAc As String
Worksheets("Tabelle1").Select
Range("a1").Select
Application.ScreenUpdating = True
strAc = Application.Caller
If DialogSheets("dlgFarben").OptionButtons(1).Value = xlOn Then
Selection.Interior.ColorIndex = CInt(Right(strAc, Len(strAc) - 3))
UserForm1.TextBox1.BackColor = Selection.Interior.Color
Else
Selection.Font.ColorIndex = CInt(Right(strAc, Len(strAc) - 3))
UserForm1.TextBox1.ForeColor = Selection.Font.Color
End If
End Sub


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Programmiercode
20.06.2007 14:58:00
Dan
Hi,
ich habe ein kleines Beispiel gemacht: https://www.herber.de/bbs/user/43433.xls
Es funktioniert so, dass einpaar Text-Boxen zugegeben werden, und jeder der Text-Boxen wird mit seinem wrapper-object verlinked. Also wenn ein double-click event generiert wird, bekommt es der Wrapper und dort wird Dein code stehen. Der Warapper ist ein Object, wo sich ein privater Member befindet. Der Member ist vom Typ TextBox und ist 'WithEvents' deklariert, also kann events abfangen. So kannst Du alle Diene TextBoxen mit einem Event Handler verlinken.
Es ist nicht noetig, die TextBoxen nur im Run-Time zuzugeben. Man kann sie in Design-Time bilden und z.B. im Form-Initialise Event fuer alle die Text-Boxen einen Wrapper zu bilden und miteinander verlinken. So werden wieder die Events in dem gemeinsamen Handler verarbeitet. Hoffe es hilft.

Private Sub UserForm_Initialize()
Dim ctl
Dim textBoxWrapper As CTextBoxWrapper
Dim textBoxCount As Integer
Set m_colTextBoxesWrappers = New VBA.Collection
For Each ctl In Me.Controls
If (VBA.TypeName(ctl) = "TextBox") Then
' crete a new wrapper object for the textbox
Set textBoxWrapper = New CTextBoxWrapper
' connect the wrapper with the text box
Set textBoxWrapper.Text_Box = ctl
' add the wrapper to the collection
m_colTextBoxesWrappers.Add textBoxWrapper
End If
Next ctl
End Sub


Grus Dan, cz

Anzeige
AW: Problem mit Programmiercode
21.06.2007 18:07:17
Thaddäus
Danke für die Hilfe.
Es war für mich nicht einfach aber mit meinem Freund haben wir hingekriegt.

AW: Problem mit Programmiercode
21.06.2007 21:28:00
Dan
Hi,
OK. Falls du aber dazu noch Fragen hast, frag mich einfach...oder schicke mir einfach eine E-Mail: ddmail@seznam.cz
Gruss Dan, cz.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige