Das Archiv des Excel-Forums

Namen definiert- in Ereignis verwenden?

Bild

Betrifft: Namen definiert- in Ereignis verwenden?
von: Webran

Geschrieben am: 06.07.2008 16:52:53

Hallo zusammen,
ich verstehe die ganzen Beiträge zu "Namen definieren" nicht und hoffe, dass mir jemand speziell für mein Problem helfen kann. Ich kann leider keine Arbeitsmappe hochladen, sorry, ist alles zu komplex für mich.
In meinem Tabellenblatt habe ich eine ganze Menge Bereiche (B10:B20,D10:D20,F10:F20.......insgesamt 144 Stück), auf die mehrere Ereignisse reagieren sollen.
Diese Bereiche habe ich unter dem Namen "Eingabebereich" unter "Einfügen", "Namen definieren" festgelegt (in der Benutzeroberfläche).
Beispiel:


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'Muss ich meinen Namen "Eingabebereich" vorher einführen? Wenn ja, wie?
Application.CommandBars("cell").Enabled = False
If Selection.Count < 1 Then Exit Sub
If Not Application.Intersect(Target, Range("  Eingabebereich   ") Is Nothing  _
Then
Call Mach_Mittagessen
End If
End Sub


Außerdem noch ein anderes Ereignis (Change), das ähnlich aussieht. Dafür muss ich diese Bereiche auch verwenden.
Soweit ich weiß, kann man nicht unbegrenzt Bereiche angeben, zumindest bei mir bekomme ich bei knapp 100 Bereichen ein Fehlermeldung.
Würde mich über eine Antwort freuen.
Viele Grüße
Webran

Bild

Betrifft: AW: Namen definiert- in Ereignis verwenden?
von: Chris
Geschrieben am: 06.07.2008 19:43:42
Servus Webran,
das Problem ist, dass VBA deine Bereiche nicht kennt:
Bsp.: Du hast in Tabelle1 den Bereich Test = Tabelle1!$A:$A, dann weiß eben VBA nicht, dass wenn du jetzt Test im Makro (Test ist eben eine Variable) schreibst, dass dieser Bereich gemeint ist.
Du kannst natürlich für deine 144 Namen alle Bereiche abfragen und diese dann in eine Union schreiben, das ist aber ziemlich umständlich, da auch die Bereichsschreibweise nicht direkt kompatibel ist.
Mach dir lieber die Arbeit und schreibs so:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect (Target, Union(Range("B10:B20"),Range("D10:D20"),...)) is Nothing Then
... us.w.
Gruß
Chris

Bild

Betrifft: AW: Nun gut...
von: Chris

Geschrieben am: 06.07.2008 21:21:06
Servus Webran,
...hier mal eine Möglichkeit alle Bereiche auszulesen und dann entsprechend als Range in einem Ws_Change-Ereignis zu übergeben (Bsp. Tabelle1):


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Wkb As Workbook
Set Wkb = ThisWorkbook
Dim RangeBereich As Range
Dim Bereich As Name, zähler As Long
Dim Wks As Worksheet
Dim strName As String, strRange As String, strRange0 As String, strRange1 As String
Set Wks = Worksheets("Tabelle2")
zähler = 0
For Each Bereich In Wkb.Names
strName = Bereich.Name
strRange0 = Mid(Bereich, 2, Len(Bereich))
strRange1 = Left(strRange0, InStr(strRange0, "!") - 1)
strRange = Right(strRange0, Len(strRange0) - InStr(strRange0, "!"))
If strRange1 = Wks.Name Then
zähler = zähler + 1
If zähler = 1 Then
Set RangeBereich = Range(strRange)
Else
Set RangeBereich = Union(RangeBereich, Range(strRange))
End If
End If
Next Bereich
If Not Intersect(Target, RangeBereich) Is Nothing Then
MsgBox "Hallo WS"
End If
End Sub


Gruß
Chris

Bild

Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Chris
Geschrieben am: 06.07.2008 21:31:13
.

Bild

Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Webran

Geschrieben am: 07.07.2008 06:09:42
Hallo Chris,
vielen Dank für Deinen Code, den werde ich gleich mal testen.
Ich dachte nicht, dass das so schwierig wäre, na ja, wieder was dazu gelernt.
Danke, noch mal!
Viele Grüße
Webran

Bild

Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Erich G.
Geschrieben am: 07.07.2008 07:17:50
Hallo Vorname(?),
das sollte es auch schon tun:


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objNam As Name
For Each objNam In ThisWorkbook.Names
If Left(objNam.RefersTo, Len(Me.Name) + 2) = "=" & Me.Name & "!" Then
If Not Intersect(Target, Range(objNam.Name)) Is Nothing Then
MsgBox "Hallo WS"
End If
End If
Next objNam
End Sub

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

Bild

Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Webran

Geschrieben am: 07.07.2008 07:27:41
Hallo Erich,
danke, für Deine Idee, das werde ich auch mal testen.
Der Code von Chris funktioniert auch, ich muss nur noch an der Schnelligkeit arbeiten.
Toll, das es dieses Forum (und seine Mitglieder) gibt!
Viele Grüße
Webran

 Bild

Excel-Beispiele zum Thema "Namen definiert- in Ereignis verwenden?"

Die Ereignisse Zellauswahl, Eingabe und Doppelklick download SVERWEIS als Ereignisprozedur download
Im Change-Ereignis Eingabe in oder Leeren von Zellen erkennen download Makroverzweigung im Change-Ereignis download
ComboBox mit Ereigniscode in Tabellenblatt erstellen download DoubleClick-Ereignis für alle Arbeitsmappen initialisieren download
Begrenzung der Textlänge über Ereignis-Programmierung download Beispiele zum Einsatz des SelectionChange-Ereignisses download