![]() |
Betrifft: Namen definiert- in Ereignis verwenden?
von: 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 < 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
![]() |
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
![]() |
Betrifft: AW: Nun gut...
von: Chris
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
![]() |
Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Chris
Geschrieben am: 06.07.2008 21:31:13
.
![]() |
Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Webran
![]() |
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
![]() |
Betrifft: AW: Sorry, natürlich Tabelle2...owT
von: Webran
![]() |