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"