Anzeige
Archiv - Navigation
376to380
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
376to380
376to380
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Auswahl in Userform

Auswahl in Userform
07.02.2004 00:07:44
Michael Rapp
Hallo Excelfreunde,
habe gestern mit eurer Hilfe eine Userform zusammengebastelt. Folgender Code beschreibt die Funktionalität:

Private Sub UserForm_Initialize()
Call WriteNewList
End Sub



Private Sub WriteNewList()
Dim i As Integer
ShapeList.Clear
For i = 1 To ActiveSheet.Shapes.Count
ShapeList.AddItem ActiveSheet.Shapes(i).name
Next i
End Sub


Private Sub ShapeList_Click()
ActiveSheet.Shapes.Item(ShapeList.Text).Select
End Sub



Private Sub DeleteButton_Click()
Selection.Delete
Call WriteNewList
End Sub



Private Sub BackButton_Click()
Selection.ShapeRange.ZOrder msoSendToBack
End Sub


Das Makro WriteNewList schreibt alle Shapes in das Listenfeld "ShapeList". Beim Entfernen eines Shapes mit dem Makro DeleteButton_Click wird eine neue Liste geschrieben. Das funktioniert alles Klasse.
Das Problem besteht darin, dass ich nicht erkennen kann, ob tatsächlich eine Shape ausgewählt ist. Wenn nicht, läuft die ganze Userform in einen Fehler, aus dem der normale Benutzer nicht mehr rauskommt, da die Form Showmodal=false ist.
Das Problem erscheint auch dann, wenn man auf ein anderes Blatt wechselt; dann solte die Liste automatisch erneuert werden. Einzige Lösung bisher ist für mich, überall mit "On error resume next" zu arbeiten - das ist wohl nicht sehr elegant.
Danke für Eure Hilfe
Michael

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

Betreff
Datum
Anwender
Anzeige
AW: Auswahl in Userform
07.02.2004 01:01:01
K.Rola
Hallo,
du kannst das noch verfeinern, dazu hatte ich keine Lust:
''In das Modul von "DieseArbeitsmappe"
''----------------------------------------------------
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call WriteNewList
End Sub

''-----------------------------------------------------

''In ein Standardmodul
''---------------------------------------------------------------
Option Explicit
Sub WriteNewList()
Dim i As Integer
UserForm1.ShapeList.Clear
For i = 1 To ActiveSheet.Shapes.Count
UserForm1.ShapeList.AddItem ActiveSheet.Shapes(i).Name
Next i
End Sub

''-----------------------------------------------------------------
''In das Modul deines userforms
''------------------------------------------------------------------
Option Explicit
Dim selShape As Object

Private Sub Backbutton_Click()
If Not selShape Is Nothing Then
selShape.ZOrder msoSendToBack
End If
End Sub


Private Sub DeleteButton_Click()
If Not selShape Is Nothing Then
selShape.Delete
End If
Set selShape = Nothing
Call WriteNewList
End Sub


Private Sub ShapeList_Click()
Set selShape = ActiveSheet.Shapes.Item(ShapeList.Text)
End Sub


Private Sub UserForm_Initialize()
Call WriteNewList
End Sub

''----------------------------------------------------------

Gruß K.Rola
Anzeige
AW: Auswahl in Userform
07.02.2004 01:02:06
K.Rola
Hallo,
du kannst das noch verfeinern, dazu hatte ich keine Lust:
''In das Modul von "DieseArbeitsmappe"
''----------------------------------------------------
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call WriteNewList
End Sub

''-----------------------------------------------------

''In ein Standardmodul
''---------------------------------------------------------------
Option Explicit
Sub WriteNewList()
Dim i As Integer
UserForm1.ShapeList.Clear
For i = 1 To ActiveSheet.Shapes.Count
UserForm1.ShapeList.AddItem ActiveSheet.Shapes(i).Name
Next i
End Sub

''-----------------------------------------------------------------
''In das Modul deines userforms
''------------------------------------------------------------------
Option Explicit
Dim selShape As Object

Private Sub Backbutton_Click()
If Not selShape Is Nothing Then
selShape.ZOrder msoSendToBack
End If
End Sub


Private Sub DeleteButton_Click()
If Not selShape Is Nothing Then
selShape.Delete
End If
Set selShape = Nothing
Call WriteNewList
End Sub


Private Sub ShapeList_Click()
Set selShape = ActiveSheet.Shapes.Item(ShapeList.Text)
End Sub


Private Sub UserForm_Initialize()
Call WriteNewList
End Sub

''----------------------------------------------------------

Gruß K.Rola
Anzeige
Oops...
07.02.2004 01:02:49
K.Rola
...
AW: Oops...Klappt prima
07.02.2004 04:03:39
Michael Rapp
Hi K.Rola,
Oops..ist richtig. Das automatische Wechseln beim Blattwechseln funktioniert prächig. Was ich noch nicht verstanden habe, warum der Aufruf des Makros WriteNewList beim Blattwechsel nicht ungewöllt die Userform aufruft? Auch die anderen Eigenschaften genau wie bestellt!! Super.
Bitte noch einige Fragen:
Wo wird das (ByVal Sh As Object)aus dem Workbook_SheetActivate verwendet. Sollte das das gleiche sein wie "selShape".
Gilt eine Deklaration im Kopfbereich der Userform wie "Dim selShape As Object" für die gesamte Laufzeit und alle Makros?
Wenn ich das richtig verstehe, werden die Objekte nicht selektiert. Gibt es einen Weg wie man zeigt, welches Objekt verändert werden wird - z.B bewegen ?
Herzlichen Dank für die riesige Hilfe
Michael
Anzeige
AW: Oops...Klappt prima
07.02.2004 13:15:53
K.Rola
Hallo,
das Ooops bezog sich auf die doppelte Antwort.
Das userform wird durch die Anweisung Userform1.Show angezeigt und die
steht ja da nicht.
"Dim selShape As Object" gilt für die gesamte Zeit bis das userform
entladen wird und für alle Prozeduren die im Modul des userforms
stehen, nicht für Prozeduren in anderen Modulen.
Hier mal der Code für das userform mit Visualisierung der Auswahl:
''-------------------------------------------------------------------
Option Explicit
Private Declare Sub Sleep Lib "Kernel32" (ByVal Zeit As Long)
Dim selShape As Object, bolStopp As Boolean
''-------------------------------------------------------------------

Private Sub Backbutton_Click()
If Not selShape Is Nothing Then
selShape.ZOrder msoSendToBack
End If
End Sub

''-------------------------------------------------------------------

Private Sub DeleteButton_Click()
If Not selShape Is Nothing Then
selShape.Delete
End If
Set selShape = Nothing
Call WriteNewList
End Sub

''-------------------------------------------------------------------

Private Sub ShapeList_Click()
Dim x As Byte
If bolStopp Then Exit Sub
bolStopp = True
Set selShape = ActiveSheet.Shapes.Item(Shapelist.Text)
With selShape
For x = 1 To 11
If x Mod 2 = 0 Then
.Visible = False
Else
.Visible = True
End If
Sleep 100
DoEvents
Next
.Visible = True
End With
bolStopp = False
End Sub

''-------------------------------------------------------------------

Private Sub UserForm_Initialize()
Call WriteNewList
End Sub

Gruß K.Rola
Anzeige
Lösung ist perfekt
07.02.2004 14:48:49
Michael Rapp
Hallo K.Rola,
vielen Dank für deine Unterstützung. Alles läuft perfekt.
Herzliche Grüße
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige