einer spalte einen Namen geben und prüfen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: einer spalte einen Namen geben und prüfen
von: chris b
Geschrieben am: 13.04.2005 14:56:00
Hallo Exceller,
habe eine frage, und zwar ist es möglich das ich einer Spalte einen Namen gebe z.b
der ganzen Spalte "E" den Namen - "Titel"
Und dann wenn ich ein Makro starte das mir dann das Makro prüft ob eine zelle
aktiv ist die in der Spalte steht die den namen "Titel" hat ?

So ist es bisher:
If ActiveCell.Column = 5 Then ' 5 weil Spalte E die 5 Spalte ist
...
..
.
jetzt das Probelm wenn ich eine Spalte einfüge oder entferne kann es sein das die 5 nicht mehr stimmt also der spalte mit den "Titeln" nicht mehr in Spalte E steht. Deshalb möchte ich wenn es möglich ist einer Spalte einen Namen geben und daduch immer zu wissen ob sich die aktive Zelle in diese Spalte befindet.
Vielen Dank beste grüße Christian

Bild

Betrifft: AW: einer spalte einen Namen geben und prüfen
von: Florian
Geschrieben am: 13.04.2005 15:05:03
Hi,
versuchs mal mit Intersect.
mfg Florian
Bild

Betrifft: nicht ganz
von: chris b
Geschrieben am: 13.04.2005 15:20:51
Hallo und danke für den Tipp,
aber wie bekomme ich da statt "Columns(2)) " es so hin das dort steht "Artikel" also das nicht spalte2 immer fest ist Weil die Spalte mit den Artikel kann auch evtl. in Spalte 5 sein usw..?
So habe ich es jetzt:

Sub test()
If Not Intersect(ActiveCell, Columns(2)) Is Nothing Then
MsgBox ("OK")
Else
MsgBox ("nix")
End If
End Sub

und so sollte es sein wenn irgendwie möglich

Sub test()
If Not Intersect(ActiveCell, Spaltenname)Is Nothing Then
MsgBox ("OK")
Else
MsgBox ("nix")
End If
End Sub

Bild

Betrifft: AW: nicht ganz
von: Florian
Geschrieben am: 13.04.2005 15:24:40
If Not Intersect(ActiveCell, [derName]) Is Nothing Then
mfg Florian
Bild

Betrifft: @Florian: Dürfte kaum Problem treffen! owT
von: Luc :-?
Geschrieben am: 13.04.2005 15:23:02

Bild

Betrifft: Warum? oT
von: Boris
Geschrieben am: 13.04.2005 18:53:08

Bild

Betrifft: AW: Warum? oT
von: Florian
Geschrieben am: 13.04.2005 19:25:41
Hi,
ich denke, er hat die Frage nicht gelesen. Er antwortet öfter mal etwas eigenartig.
mfg Florian
Bild

Betrifft: Weil das nicht das Problem zu sein scheint, ...
von: Luc
Geschrieben am: 13.04.2005 20:10:28
...meine Herren.
Nicht nur, wenn die aktive Zelle die Spalte mit Bezeichnung "Titel" trifft, ist interessant, sondern zu berücksichtigen ist auch, dass das nicht immer die gleiche Spalte sein muss. Also muss doch zuerst ermittelt wdn, wo sich "Titel" befindet. Hat der Frager, ChrisB, doch klar zum Ausdruck gebracht!
Deshalb... Grüß dich Chris,
ich schlage eine Ereignisprozedur vor. Wenn das auf die Dauer nervt, dann das Ganze in eine normale Prozedur umsetzen, die per Button bedient wird. In diesem Fall muss die erste Prozedur in die zweite integriert wdn. In der zweiten ersetzt du dann natürlich den Dummy MsgBox durch das, was du da wirklich machen willst.

Rem in das Klassenmodul der Tabelle eintragen:
Option Explicit
Dim TitelSpalte As Integer
Private Sub Worksheet_Activate()
    Dim x As Range
    For Each x In Range("1:1")
        If x.Formula = "Titel" Then
            TitelSpalte = x.Column
            Exit For
        End If
    Next x
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   MsgBox IIf(Target.Column = TitelSpalte, "OK", "nix"), vbOKOnly + vbExclamation, "Titeltreffer"
End Sub 

Habe das getestet und siehe, es fkt bei jedem Markierungswechsel. Wenn das bei Berechnungen nicht fkt, weil die Markierung nicht wechselt bzw die berechnete Zelle nicht als aktive Zelle im engeren Sinne von xl angesehen wird, musst du statt des selectionChange- mal das change-Ereignis (Event) ausprobieren.
Wenn du zwischendurch deine Tabelle so veränderst, das "Titel" in einer anderen Spalte zu stehen kommt, muss die Tabelle neu aktiviert (also 1x raus und wieder rein) wdn, damit die Spaltennr neu ermittelt wird.
Hoffe, Antwort in deinem Sinn
Gruß Luc :-?
Bild

Betrifft: Unterschied "Name" und "Spaltenüberschrift
von: Boris
Geschrieben am: 13.04.2005 20:21:18
Hi Luc,
aus der Frage ging für mich eindeutig hervor, dass die Spalte benannt und nicht bloß mit einer Überschrift versehen wurde:
...ist es möglich das ich einer Spalte einen Namen gebe z.b
der ganzen Spalte "E" den Namen - "Titel"...

Da ist die Nomenklatur für mich eindeutig.
Und demzufolge lässt sich eine Überschneidung sehr gut mit der Intersect-Methode feststellen:
If Not Intersect(ActiveCell, Range("Titel")) Is Nothing Then
    'Mach irgendwas...
End If

Grüße Boris
Bild

Betrifft: AW: Unterschied "Name" und "Spaltenüberschrift
von: chris b
Geschrieben am: 13.04.2005 20:28:07
Boris vielen Dank !!!!!!!!!!
genau das suchte ich.Das ist genau das oder wie ich es auch suchte. Weil die spalte den namen "titel" hat.
Vielen Dank !!!!!!!
Und vielen Dank auch Luc !!!!!!!
p.s eins verstehe ich nur nicht boris.
If Not Intersect(ActiveCell, Range("Titel")) Is Nothing Then
warum das richtig anspringt bei Range("Titel") undglaublich also heißt dann wenn ich der ganzen spalte den Namen "Titel" gebe jeder Zelle auch so?
Naja fast egal ;) Funktioniert ! Dankeee
Bild

Betrifft: Schau dir die Range-Eigenschaft in der Hilfe...
von: Boris
Geschrieben am: 13.04.2005 20:38:17
Hi Chris,
...mal genauer an.
Wenn du der gesamten Spalte E den Namen "Titel" gibst, dann passiert bei folgenden Anweisungen exakt das Selbe:
Range("E:E").Select
Range("Titel").Select
Die Namensvergabe hat aber den von Dir gewünschten Vorteil, dass sich der Bereich nicht statisch auf Spalte E konzentriert, sondern immer auf den Bereich mit dem Namen "Titel", der sich aufgrund von Spalteneinfügungen/-löschungen ja verschiebt.
Grüße Boris
Bild

Betrifft: war der Meinung, meint eher "Bezeichnung" - owT
von: Luc
Geschrieben am: 13.04.2005 20:56:01

Bild

Betrifft: Ist mir schon klar...
von: Boris
Geschrieben am: 13.04.2005 21:02:02
Hi Luc,
...nur dann würd ich mich mit Antwort-Tadelungen dieser Art doch etwas zurückhalten, denn unterschiedliche Interpretationen wird es immer wieder geben.
Grüße Boris
Bild

Betrifft: Danke übrigens...
von: Boris
Geschrieben am: 13.04.2005 21:11:27
Hi Chris,
denn dank dieses Threads hab auch ich mir die Range-Eigenschaft mal etwas genauer in der Hilfe angesehen.
Was glaubst du, welche Zelle bei folgender Anweisung selektiert wird?

Sub test()
Range("C3").Range("B2").Select
End Sub

Erst antworten - dann ausprobieren! ;-)
Ich wusste es zumindest nicht...
Grüße Boris
Bild

Betrifft: AW: Danke übrigens...
von: chris b
Geschrieben am: 13.04.2005 21:22:44
Also ich wusste es auch nicht.
Verstehe auch nicht warum es bei mir die zelle D4 selectiert,
aber das ist mir auch egal :))) Könnt jetzt sagen dummes Excel wird aber sicher seinen Grund haben *g*
Also danke noch mal allen bis zum nächsten mal Chris
Bild

Betrifft: Die Erklärung ist doch recht einfach...
von: Boris
Geschrieben am: 13.04.2005 21:28:55
Hi Chris,
...aus der Hilfe:
Anmerkungen
Wenn diese Eigenschaft mit einem Objektkennzeichner verwendet wird, so ist sie ein Shortcut für ActiveSheet.Range (sie gibt einen Bereich aus dem aktiven Blatt zurück; handelt es sich dabei nicht um ein Tabellenblatt, führt die Eigenschaft zu einem Fehler).
Bei Anwendung auf ein Range-Objekt verhält sich die Eigenschaft relativ zu dem Range-Objekt. Besteht die Auswahl beispielsweise aus der Zelle C3, so gibt Selection.Range("B1") Zelle D3 zurück, da sie sich relativ zu dem Range-Objekt verhält, das von der Selection-Eigenschaft zurückgegeben wird. Dagegen gibt der Code ActiveSheet.Range("B1") immer die Zelle B1 zurück.

Also mit einfach Worten: Range verhält sich immer relativ zum angegebenen Objekt - und ist das Objekt nicht angegeben, dann bezieht es sich immer auf das ActiveSheet - und da ist B2 halt das bekannte B2 ;-)
Wird aber vorher ein Objekt vorgegeben - wie z.B. bei

Sub test()
Range("E1:Z100").Range("A5").Select
End Sub

gibt´s dann E5 - denn der Ausgangspunkt ist E1.
Grüße Boris
Bild

Betrifft: AW: Die Erklärung ist doch recht einfach...
von: K.Rola
Geschrieben am: 13.04.2005 21:50:02
Hi Boris,
was wird hier selektiert?

Sub relativ_oder()
ActiveCell.Offset(2, 1).Range("A1:D1").Select
End Sub

Gruß K.Rola
Bild

Betrifft: Ungetestet...
von: Boris
Geschrieben am: 13.04.2005 21:54:54
Hi K.Rola,
...am Beispiel E15:
F17:I17
Grüße Boris
Bild

Betrifft: brilliant :^) oT
von: K.Rola
Geschrieben am: 13.04.2005 22:05:58
ot
Bild

Betrifft: Gegenfrage:
von: Boris
Geschrieben am: 13.04.2005 22:08:02
Hi Liebste,
was ergibt - in A1 eingetragen - =INDIREKT("Z(-1)S(-1)";0) ?
;-)
Grüße Boris
Bild

Betrifft: AW: Gegenfrage:
von: K.Rola
Geschrieben am: 13.04.2005 22:16:16
Hi Charmantie,
kommt darauf an, was in IV65536 steht.
Gruß K.Rola
Bild

Betrifft: PompösGrandiösElefantös! :-p
von: Boris
Geschrieben am: 13.04.2005 22:21:11
Hi Schatz,
muss aber zugeben, dass mir das bis vor Kurzem noch gar nicht bewusst war - bin nur durch Zufall drauf gestoßen. Geht ja auch mit der direkten Z1S1-Adressierung - nur nutze ich die in Excel eher selten bis gar nicht.
So - bin jetzt erstmal was essen - der Spanier soll mir noch ein schönes Steak zaubern!
Grüße Boris
Bild

Betrifft: HÄ ??
von: ransi
Geschrieben am: 13.04.2005 21:33:03
hallo
Habe mal ein wenig weiter damit experimentiert und kein system erkannt wenn ich das spielchen noch mit 2 oder 3 zusätzlichen ranges ergänzt habe.
Das schmeisst ja alles über den haufen was ich über excel und range() zu wissen glaubte!!
Und das finde ich NICHT in Ordnung.
ransi
Bild

Betrifft: Es ist wirklich simpel...
von: Boris
Geschrieben am: 13.04.2005 21:46:04
Hi Ransi,
es geht halt immer nur um den Ausgangspunkt:

Sub test()
Range("C3").Range("B2").Range("D3").Select
End Sub

Tu einfach so, als sei - der Reihenfolge nach - jeder Range wieder A1. Es geht hier um relative Bezüge:
Also: C3 = A1
Von A1 aus würdest du Dich - um nach B2 zu kommen - eine Zelle nach rechts und eine Zelle nach unten bewegen.
Nur von C3 aus ergibt das dann D4 (1 nach rechts, 1 nach unten).
Jetzt ist D4 wieder A1.
Um von A1 nach D3 zu kommen: 3 Zellen nach rechts und 2 nach unten.
Ausgehend aber von D4 - 3 nach rechts und 2 nach unten = G6.
Ist doch eigentlich ganz logisch.
Grüße Boris
Bild

Betrifft: dringende frage noch an evtl. Boris
von: chris b
Geschrieben am: 14.04.2005 13:27:19
Hallo Boris,
habe mal eine frage ich hoffe du kannst mir das sagen weil du ja das ganze mit dem Range Objekt in der diskusion verstanden hast.
Ich führe folgendes aus
ActiveWorkbook.Names.Add Name:="dasdd", RefersToR1C1:="=Tabelle2!C5"
Excel erstellt mir auch einen Namen den ich unter
Einfügen - Namen anschauen kann.
Dort steht dann aber "=Tabelle2!$E:$E"
Warum ?
wie kann ich das schreiben das ich nicht "=Tabelle2!C5" eintragen muss um den namen der Spalte E geben wmöchte ?
Also statt so
ActiveWorkbook.Names.Add Name:="dasdd", RefersToR1C1:="=Tabelle2!C5"
möchte ich das gleiche erreichen
ActiveWorkbook.Names.Add Name:="dasdd", RefersToR1C1:="=Aktivetabelle !5" ' 5 steht für spalte 5
Danke vielmals !!
gruß Chrisian
Bild

Betrifft: AW: dringende frage noch an evtl. Boris
von: Boris
Geschrieben am: 14.04.2005 15:24:22
Hi Chris,

Sub aaa()
ActiveWorkbook.Names.Add Name:="Titel", RefersToR1C1:=ActiveSheet.Columns(5) ' 5 steht für Spalte 5
End Sub

Grüße Boris
Bild

Betrifft: AW: dringende frage noch an evtl. Boris
von: chris b
Geschrieben am: 14.04.2005 18:55:36
Danke Boris du bist ein schatz :)
Hat geklappt ! Danke
Bild

Betrifft: Is nix anderes als Offset...
von: Boris
Geschrieben am: 13.04.2005 21:51:27
Hi Ransi,
diese beiden Anweisungen sind absolut identisch:

Sub test()
Range("C3").Range("B2").Range("D3").Select
End Sub


Sub test2()
Range("C3").Offset(1, 1).Offset(2, 3).Select
End Sub

Vielleicht wird´s dadurch klarer...
Grüße Boris
 Bild

Beiträge aus den Excel-Beispielen zum Thema "einer spalte einen Namen geben und prüfen"