Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Worksheet_SelectionChange

Betrifft: Worksheet_SelectionChange von: Sonnenpeter
Geschrieben am: 05.11.2007 19:57:42

Hallo,

ich habe folgenden Makrocode mit hinweisen aus den Archiv zusammengebastelt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$5" Then
Worksheets("Tabelle1").Shapes("Listenfeld1").Visible = True
Else
Worksheets("Tabelle1").Shapes("Listenfeld1").Visible = False
End If

Was muss ich tun wenn der Bereich "$B$5:$B$49" das Listenfeld zeigen soll?

Muss ich eigentlich den Tabellennamen angeben? Problem wird er geändert funzt das ganze ja nicht mehr.

Kann ich ohne Arbeitsmappenschutz das abändern des Tabellennamens verhindern?

Gruß Sonnenpeter

  

Betrifft: AW: Worksheet_SelectionChange von: Erich G.
Geschrieben am: 05.11.2007 20:31:26

Hallo Sonnenpeter,
kannst du die Listbox mit "Listenfeld1" ansprechen? Bei mir ging das nicht - auch mit Excel 10 (XP).

Versuch mal

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Intersect(Target, Range("$B$5:$B$49")) Is Nothing Then
      Me.Shapes("List Box 1").Visible = False
   Else
      Me.Shapes("List Box 1").Visible = True
   End If
End Sub

Me kannst du verwenden, weil der Code ja zu diesem Tabellenblatt gehört.
"List Box 1" heißt meine Listbox aus der Formular-Symbolleiste.
Wenn du die Steuerelement-Listbox verwendest, ist der Name wohl "ListBox1".

Ohne Schutz das Umbenennen von Blättern zu verhindern, geht sicher auch, ist aber wohl umständlich.
Aber mit dem "Me" ist es vielleicht auch gar nicht mehr nötig?

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Worksheet_SelectionChange von: Daniel
Geschrieben am: 05.11.2007 20:46:12

Hi
zur ersten Frage:

IF  Intersect(Target, Range("$B$5:$B$49")) is nothing then
      Worksheets("Tabelle1").Shapes("Listenfeld1").Visible = False
else
      Worksheets("Tabelle1").Shapes("Listenfeld1").Visible = True
end if 



oder kürzer:

Worksheets("Tabelle1").Shapes("Listenfeld1").Visible = Not Intersect(Target, Range("$B$5:$B$49")) is nothing



zur 2. Frage
wenn ich dein Makro richttig verstehe, dann wird das Listenfeld in eine anderen Tabellenblatt ein/ausgeblendet ???
Wenn das so ist, und der Benutzer den Namen des Tabellenblatts ändern kann, dann könntest du das Sheet auch über seine Objektbezeichnung ansprechen (das ist was anderes als der Name von der Registerkarte).
die Objektbezeichnung steht in der Baumstruktur des Objekt-Explores VOR der Klammer, der Name von der Registerkarte IN der Klammer.
in der Eigensschaftsliste ist das lustigerweise umgekehrt, da findest du die Objektbezeichnung unter der ersten Eigenschaft "(Name)", den Registerkartennamen dagegen unter der Eigenschaft "Name".

Wichtig ist, die Objektbezeichnung kann nur über den VBA-Edtior geändert werden und nicht vom Anwender in Excel und ist daher für deinen Wunsch die geeignete Lösung.
Das ganze sieht dann so aus:

Tabelle1.Shapes("Listenfeld1").Visible = False



Gruß, Daniel




  

Betrifft: AW: Worksheet_SelectionChange von: Gerd L
Geschrieben am: 05.11.2007 20:47:34

Hallo Sonnenpeter,

probier mal. Eventuell sind deine Fragen damit erledigt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Me.ListBox1.Visible = Not Intersect(Target, Range("$B$5:$B$49")) Is Nothing
  MsgBox Me.Name
End Sub



Gruß Gerd


  

Betrifft: Danke an @all von: Sonnenpeter
Geschrieben am: 05.11.2007 21:26:38

Hallo und recht herzlichen Dank an alle drei Antworter :-)

alle Varianten sind durchgetest und funktionieren, ich bin Happy!

@ Gerd: Deinen Vorschlag musste ich leicht verändern, wie nachstehend aufgeführt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Me.Shapes("Listenfeld1").Visible = Not Intersect(Target, Range("$B$5:$B$49")) Is Nothing
  'MsgBox Me.Name
End Sub



Die Verwendung von ME macht den Tabbelblattnamen nicht erforderlich und ist deshalb mein klarer Favorit.
Und ich dacht, ME funktioniert nur bei einer Userform.

Es ist immer wieder schön wenn geholfen wird.

Gruß Sonnenpeter


  

Betrifft: AW: Forms/Steuerelemente von: Gerd L
Geschrieben am: 05.11.2007 22:09:12

Hallo Sonnenpeter,

mit diesen Dingern ist es so.
Man kann sie ins Tabellenblatt aus "Formular" oder aus der Steuerelemente-Toolbox holen.
Und sie dann "je nach dem" per Code ansprechen.
Hilfreich wäre bei Fragen zu diesen Sub-Objekten, anzugeben, womit/woraus sie eingefügt
worden sind.
Ich hatte daher "gewürfelt" und nebebei mal wieder nicht nochmal vor'm Schreiben "F5" gedrückt :-)

Gruß Gerd


  

Betrifft: AW: Forms/Steuerelemente von: Sonnenpeter
Geschrieben am: 06.11.2007 19:34:47

Hallo Gerd,

Ok, dass nächste mal gebe ich "womit/woraus sie eingefügt" an.

Gruß Sonnenpeter