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

Namen definiert- in Ereignis verwenden?

Namen definiert- in Ereignis verwenden?
06.07.2008 16:52:00
Webran
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 ("  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

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

Betreff
Datum
Anwender
Anzeige
AW: Namen definiert- in Ereignis verwenden?
06.07.2008 19:43:42
Chris
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

Anzeige
AW: Nun gut...
06.07.2008 21:21:00
Chris
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

Anzeige
AW: Sorry, natürlich Tabelle2...owT
06.07.2008 21:31:00
Chris
.

AW: Sorry, natürlich Tabelle2...owT
07.07.2008 06:09:00
Webran
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

AW: Sorry, natürlich Tabelle2...owT
07.07.2008 07:17:50
Erich
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

Anzeige
AW: Sorry, natürlich Tabelle2...owT
07.07.2008 07:27:41
Webran
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige