[VBA] Wie selektiert man den umliegenden Bereich eines bereits selektierten Bereichs?
Hi
Erstmal einen Gruß an alle. Bin neu hier und habe mich eben angemeldet.
Ich habe folgendes Problem.
Im Excel habe ich mit ActiveSheet.UsedRange.Select den verwendeten Bereich in einem Sheet ermittelt. Wie kann ich jetzt zur weiteren Verarbeitung die zellen UM diesem UsedRange selektieren?
Ich möchte nämlich die Höhe und Breite der Zellen UM einer bestimmten Range mit 8px festlegen (zwecks automatisierter Formatierung).
Wäre nett, wenn mir jemand helfen bzw. Anhaltspunkte geben könnte.
Vielen Dank
Antwort schreiben
Antwort 1 von Kauz vom 21.11.2020, 21:15 Options
Hallo macmac...
Mit <ActiveSheet.UsedRange.Select> hast Du einen Bereich markiert, aber nicht ermittelt... würde ich sagen.
Ermittelt heißt für mich, Anfang und Ende liegen mir in Form von Werten vor, mit denen man dann im VBA weiter arbeiten kann.
Um die linke Obere Ecke zu bestimmen könnte das so aussehen:
' Anfang links oben
ZeileOben = ActiveSheet.UsedRange.Row ' oberste belegte Zelle
SpalteLinks = ActiveSheet.UsedRange.Column ' Erste belegte Zelle von links
Zum Ermitteln der rechten unteren Zelle müßte ich eine Schleife verwenden... einen Code, der das direkt ausgibt kenne ich nicht.
Vielleicht weiß aber ein anderer da was Geeignetes.
Noch ein Hinweis:
Der Select- und Activate-Befehl sollte vermieden werden.
Eine Alternative sehe z.B. Für eine einzelne Zelle so aus:
Application.GoTo reference:=ActiveSheet.Cells(1, 1), Scroll:=True
Für einen Bereich:
Application.GoTo reference:=ActiveSheet.Range("A1:D10"), Scroll:=False
Hoffe, es hilft schon mal ein wenig...
Gruß
Andreas
Antwort 2 von nighty vom 21.11.2020, 22:11 Options
hi all :-)
damit duerfte einiges machbar sein,dann tueftel mal schoen :-))
was waere denn der grund solch einer negativselection,das gar nicht gut fuer den speicher :-(
gruss nighty
Sub SelectionenPos()
Dim bereich As Range
Dim ZeilenAnzahl As Long
Dim SpaltenAnzahl As Long
Dim StartR As Long
Dim StartC As Long
Set bereich = Selection
StartR = ActiveCell.Row
StartC = ActiveCell.Column
ZeilenAnzahl = bereich.Rows.Count
SpaltenAnzahl = bereich.Count / ZeilenAnzahl
End Sub
Sub makro01()
Rem letzte zeile eines sheets
a = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Rem letze spalte eines sheets
b = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Rem letzte zeile einer spalte
c = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row
Rem letzte spalte einer zeile
d = ActiveSheet.Range("3:3").End(xlToRight).Column
End Sub
Antwort 3 von nighty vom 21.11.2020, 22:18 Options
hi all :-)
bei excel 2000 hatte ich es nicht geschafft in einem rutsch negativ zu selectieren,daher wuerde ich vorschlagen die x wie y achsen zu trennen und zu selectieren
*arghhh wo ich doch selectionen nicht mag grummel*
alle welt baut selectionen ab und du wahrscheinlich wieder auf ^^
gruss nighty
Antwort 4 von macmac vom 24.11.2020, 08:59 Options
Hi *.*
Danke für die Antworten.
Irgendwie werde ich dadurch nicht schlau (werde es aber gleich mal versuchen).
Was ich machen möchte:
Ich möchte über eine Toolbar (Button) dem Nutzer ermöglichen, eine Tabelle zu markieren, und um diese Tabelle dann einen Rahmen zu basteln. Dieser Rahmen beträgt eine Dicke von 8px (vorgeschrieben). Also erreiche ich das mit der Formatierung der Zellen drumrum.
Das soll irgendwie automatisiert werden, d.h.
1. Markiere die Werte, z.B. die Tabelle
2. Klicke Knopf
3. Schon habe ich zellen um meine Tabelle, die 8px hoch sind (waagrecht) und 8px breit sind (senkrecht).
Hoffe, es wird dadurch plausibler. Bin für weitere Vorschläge sehr dankbar.
Antwort 5 von macmac vom 24.11.2020, 09:08 Options
Ach noch was:
Die Werte müssen m.E. nicht ermittelt werden, da ich davon ausgehen muss, dass der benutzer die Werte/Tabelle händisch markiert.
Antwort 6 von nighty vom 24.11.2020, 09:12 Options
hi macmac :-)
vielleicht ist es ja noch zu frueh fuer mich *gaehn streck*
daher schick mir eine mustertabelle mit beispiel zum besseren verstaendnis :-)
gruss nighty
oberley@t-online.de mit aussagefaehigen betreff bitte
Antwort 7 von Kauz vom 24.11.2020, 15:20 Options
Hallo macmac...
wenn man nur einen Rahmen als Linie haben möchte, so ist eine weitere Ermittlung nicht notwendig.
Wenn aber die benachbarten Zellen in Ihrer Größe verändert werden sollen, so sieht das schon anders aus:
Dann müssen per code die Zellen 'markiert' werden , um sie zu verändern.
Aus diesem Grund braucht man im Code die 'Eckdaten' des markierten Bereichs.
Kann vielleicht heute Abend mal was probieren...
Gruß
Andreas
Antwort 8 von Kauz vom 24.11.2020, 16:58 Options
Hallo...
@MacMac:
Hier ein Codebeispiel für eine Schaltfläche:
Der Bereich wird durch Zellen mit Inhalt automatisch bestimmt.
Private Sub CommandButton1_Click()
Dim bereich As Range
Dim ZeilenAnzahl As Long
Dim SpaltenAnzahl As Long
Dim StartR As Long
Dim StartC As Long
ActiveSheet.UsedRange.Select
StartR = ActiveCell.Row
StartC = ActiveCell.Column
ZeilenAnzahl = ActiveSheet.UsedRange.Rows.Count
SpaltenAnzahl = ActiveSheet.UsedRange.Count / ZeilenAnzahl
' Zeile oberhalb der Markierung
ActiveSheet.Rows(StartR - 1).RowHeight = 8
' Zeile unterhalb der Markierung
ActiveSheet.Rows(StartR + ZeilenAnzahl).RowHeight = 8
' Spalte links der Markierung
ActiveSheet.Columns(StartC - 1).ColumnWidth = 1
' Spalte rechts der Markierung
ActiveSheet.Columns(StartC + SpaltenAnzahl).ColumnWidth = 1
End Sub
Um eine Zeile gleich hoch zu bekommen wie eine Spalte breit, bedarf es unterschiedlicher Werte....
deshalb einmal die 8 für Zeilenhöhe und die 1 für Spaltenbreite.
@nighty:
Ich hab mich dabei Deines Code's bedient....
hoffe es ist Dir nicht Unrecht....
Auf das Schlüsselwort <Count> bin ich bei meiner ersten Antwort nicht gekommen.
Gruß
Andreas
Antwort 9 von nighty vom 24.11.2020, 17:13 Options
hi andreas :-)
dafuer ist doch ein forum gedacht ,zwecks verbreitung von infos,ich liebe es wenn daraus neue ideen entstehen :-))
wenn ich auch nur selten dazu beitragen kann :-)
gruss nighty
Antwort 10 von Kauz vom 24.11.2020, 18:01 Options
Hi nighty...
nu schmeiss Dich mal nicht zu weit weg :-)..
so wenig ist es nu auch wieder nich, was Du hier beiträgst!
Gruß
Andreas