Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1032to1036
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
Inhaltsverzeichnis

Selection-Eigenschaft

Selection-Eigenschaft
29.12.2008 13:06:00
Vollmer
Hallo ans Forum, bin neu hier!
Eine Frage zu Excel VBA:
Wie kann ich herausfinden, welche Zelle (oder Bereich) eines bestimmten Arbeitsblattes gerade selektiert ist? Ich möchte nämlich das vorherige auswählen des Arbeitsblatts im Code verzichten, da ich es verstecken möchte (NB: Meine Arbeitsmappe besteht aus mehreren Arbeitsblättern)
Bisheriger Codeausschnitt:
Sheets("Movements").Select
Movements_RowOffset = Selection.Row - Range("Movements_EntryNr").Row
(Damit soll die Zeilennr. der Auswahl bestimmt werden)
Wenn ich nur mit Selection arbeite, wird die Selection eines anderen (des vorher ausgewählten)Arbeitsblatts verwendet. Leider gibt es die Selection-Eigenschaft nicht als Element für das Objekt Sheets.
Vielen Dank für Eure Hilfe. Ich habe nach antworten im Forum gesucht, aber keine gefunden.
Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selection-Eigenschaft
29.12.2008 15:36:00
Jens
Hi,
Selection bezieht sich immer auf das aktive Blatt.
mfg Jens
AW: Selection-Eigenschaft
29.12.2008 21:00:00
Vollmer
Hi Jens
Danke für Deine Antwort, aber wie kann ich auf Sheets("Movements").Select verzichten, e.g. um nicht vorher das Sheet auswählen zu müssen (dann kann ich es nicht verstecken ohne Fehlermeldung).
Gruss
Andreas
AW: Selection-Eigenschaft
29.12.2008 22:06:00
Jens
Hi,
was ist dein eigentliches Anliegen?
mfg jens
AW: eigentliches Anliegen?
30.12.2008 00:06:06
Gerd
Hallo,
vermutlich sowas?
ThisWorkbook.Worksheets("Geheim").Visible= xlVeryHidden
Gruß Gerd
AW: Selection-Eigenschaft
01.01.2009 11:14:13
Vollmer
Hallo Jens und Gerd
Danke für Eure Hilfe erstmal. Mein eigentliches Anliegen ist es, die select-Anweisungen vollständig aus meinem Code zu verbannen (soweit möglich). Wenn das der Fall ist, kann ich Arbeitsblätter beliebig verstecken (ich weiss ja jetzt wie, nun auch per Code), ohne eine Fehlermeldung zu bekommen (wenn ein verstecktes Arbeitsblatt selektiert wird, bekommt man eine Fehlermeldung).
Ich poste mal den ganzen Code (bitte siehe unten, will Euch nicht mit den Details belasten; die Prozedur soll eine bestimmte Buchung, min 2 Zeilen, aus dem Arbeitsblatt "Entries" in das Sheet "EntryForm" kopieren, um es von da zu editieren):

Sub Movements_editentry()
geschw_anfang
Dim EntryNr As Integer
Dim Movements_RowOffset As Integer
Dim Entries_lastrow As Integer
Dim upper As Integer
Dim bottom As Integer
Dim Entries_ColumnOffset As Integer
'Filter must be gone
Sheets("Entries").AutoFilterMode = False
'Entries must be sorted
Range("Entries_EntryNr").Offset(1, 0).Sort Key1:=Range("Entries_EntryNr"), Order1:=xlAscending,  _
Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Initialize variables
Sheets("Movements").Select
Movements_RowOffset = Selection.Row - Range("Movements_EntryNr").Row
EntryNr = Range("Movements_EntryNr").Offset(Movements_RowOffset, 0)
Entries_lastrow = Range("Entries_EntryNr").Offset _
(Rows.Count - Range("Entries_EntryNr").Row, 0).End(xlUp).Row
Entries_ColumnOffset = Range(Range("Entries_EntryNr"), Range("Entries_Text")).Columns.Count
'Find out top end of the entry
For upper = 1 To Entries_lastrow
If Range("Entries_EntryNr").Offset(upper, 0) = EntryNr Then
Exit For
End If
Next
If upper = 0 Then
upper = 1
End If
'Find out bottom end of the entry
For bottom = Entries_lastrow To upper Step -1
If Range("Entries_EntryNr").Offset(bottom, 0) = EntryNr Then
Exit For
End If
Next
'Copy the entry to EntryForm
'EntryNr
Range(Range("Entries_EntryNr").Offset(upper, 0), _
Range("Entries_EntryNr").Offset(bottom, 0)).Copy
Range("EntryForm_EntryNr").Offset(1, 0).PasteSpecial xlPasteValues
'Date
Range(Range("Entries_Date").Offset(upper, 0), _
Range("Entries_Date").Offset(bottom, 0)).Copy
Range("EntryForm_Date").Offset(1, 0).PasteSpecial xlPasteValues
'Account
Range(Range("Entries_Account").Offset(upper, 0), _
Range("Entries_Account").Offset(bottom, 0)).Copy
Range("EntryForm_Account").Offset(1, 0).PasteSpecial xlPasteValues
'Accname
Range(Range("Entries_Accname").Offset(upper, 0), _
Range("Entries_Accname").Offset(bottom, 0)).Copy
Range("EntryForm_Accname").Offset(1, 0).PasteSpecial xlPasteValues
'Base
Range(Range("Entries_Base").Offset(upper, 0), _
Range("Entries_Base").Offset(bottom, 0)).Copy
Range("EntryForm_Base").Offset(1, 0).PasteSpecial xlPasteValues
'Text
Range(Range("Entries_Text").Offset(upper, 0), _
Range("Entries_Text").Offset(bottom, 0)).Copy
Range("EntryForm_Text").Offset(1, 0).PasteSpecial xlPasteValues
Sheets("EntryForm").Select
geschw_ende
End Sub


Es geht wirklich NUR darum, die Zeile "Sheets("Movements").Select" zu vermeiden. Ich habe es schon mit With...End with probiert, das funkt aber nicht.
Die o.g. Prozedur soll ausgeführt werden, nachdem der Benutzer eine bestimmte Zelle im Sheet "Movements" markiert hat. Wenn ich nur mit Selection arbeiten würde, e.g.
Movements_RowOffset = Selection.Row - Range("Movements_EntryNr").Row
Ohne VORHER Sheets("Movements").Select auszuführen, nimmt die Prozedur die Selection eines anderen Sheets (hier vom Sheet "Entries").
Wie kann man generell per Code feststellen, welche Zelle(n) eines BESTIMMTEN Arbeitsblattes markiert sind? Gibt es nicht immer grundsätzlich EINE ActiveCell pro Arbeitsmappe (vielleicht würde das mein Problem lösen).
Lieber Gruss
Andreas

Anzeige
AW: Selection-Eigenschaft
01.01.2009 18:13:23
Gerd
Hallo Andreas,
ein gutes Neues!
Wie und wo wird diese Prozedur "Movements_editentry" gestartet?
Was soll passieren, falls der User im Sheet("Movements") nichts oder etwas falsches
markiert hat?
Gruß Gerd
AW: Selection-Eigenschaft
01.01.2009 19:33:00
Vollmer
Hallo Gerd
Danke! Auch Dir ein frohes Neues.
Ich würde gerne die ganze Datei hochladen, aber sie enthält vertrauliche Daten.
Prozedur "Movements_editentry" wird per Button in Sheet "Movements" gestartet.
Was soll passieren, falls der User im Sheet("Movements") nichts oder etwas falsches
markiert hat? - nichts soll passieren, aber das ist im Code nicht wirklich bedacht worden (bis jetzt).
Gruß Andreas
Anzeige
AW: Selection-Eigenschaft
01.01.2009 21:55:50
Gerd
Hallo Andreas,
ich vermute, Du vermengst ein paar Dinge.
Wenn der Code per Commandbutton im Sheet "Movement" gestartet wird, ist dieses immer das
ActiveSheet. Folglich müsste "Selection" stets den markierten Bereich dieses Tabellenblattes
zurückgeben. Lasse einfach mal Sheets("Movement").select weg.
Selection.Row ist stets die oberste Zeile der Markierung.
Falls nur eine Zeile markiert ist, wäre Rows(ActiveCell.Row) ein adäquater Ersatz.
In ausgblendete Tabellen u. von ausgeblendeten Tabellen kannst die Copy-Methode nicht anwenden,
weil diese nur bei sichtbaren Bereichen funktioniert.
D.h. ausgeblendete Tabellen müssten vorübergehend zuerst eingeblendet u. zum Schluss wieder
ausgeblendet werden oder Du greifst auf die Value-Eigenschaft der Bereiche zu, kannst so
allerdings nur jeweils eine einzelne Eigenschaft übertragen.
With Sheets("A").Range("B1:B5")
.Cells.Value= Sheets("C").Range("D1":D5").Cells.Value
End with
Gruß Gerd
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige