Range "manipulieren"

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Range "manipulieren"

#1

Beitrag von thowe »

Hallo an Alle!

Mit folgendem Code kann ich einen bestimmten Namensbereich verkleinern.

Code: Alles auswählen


Sub ResizeRangeByRows(NumberRows)

    Dim rngRange As Range
    Dim strNameOfRange As String
    
    strNameOfRange = "LstVermittlerArt"
    
    If NamedRangeExists(strNameOfRange) Then
        Set rngRange = GetRanges.rngVermittlerArt 'Funktion die eine Range bestimmt
        Debug.Print rngRange.Address 'entfernen...
        Set rngRange = rngRange.Resize(rngRange.Rows.Count - NumberRows).Offset(NumberRows)
    End If
    
        Debug.Print rngRange.Address 'entfernen
    
    'unset, reset, delete
    Set rngRange = Nothing


End Sub



Der Bereich von "LstVermittlerArt" ist aktuell $A$2:§A$6

Wenn ich die obere Prozedur verwende wird wenn ich als NumberRows:= 1 übergebe auf $A$3:$A$6 verkleinert
Zielergebnis soll sein: $A$2:$A$5

Ich denke mir, man könnte einen 2. Parameter übergeben, bspw. l für lower (A2) und u für upper (A5)

Wie gehe ich das am besten an?

edit: wenn das gelöst ist, werde ich ein paar Helper für Ranges hochladen

lg
Zuletzt geändert von thowe am 19. Sep 2023, 16:20, insgesamt 2-mal geändert.
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Range "manipulieren"

#2

Beitrag von d'r Bastler »

Moin thowe,

für Deine Aktion scheint mir die Adressierung der Range-Daten mit der Cells-Methode sinnvoller. Wenn Du Deine Eckdaten mal in die Zeilen 1 und 2, der Spalten J und K eingibst und einen Doppelklick in der Tabelle machst, siehst Du den benannten Bereich markiert.

Code: Alles auswählen

Option Explicit

Sub ResizeRange()
Dim r As Integer, c As Integer, z As Integer, s As Integer
Dim rng As Range

r = Cells(1, 10)    'vulgo r = row -> 1
c = Cells(1, 11)    'vulgo c = columns -> 6
z = Cells(2, 10)    'vulgo z = zeile -> 1
s = Cells(2, 11)    'vulgo s = spalte -> 6

Set rng = Range(Cells(r, c), Cells(z, s))
rng.Select
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Cancel = True
    ResizeRange

End Sub
Dieses Konstrukt in Deine Umgebung einzubauen, dürfte wohl kein Problem sein. Die vier Variablen lassen sich ja beliebig und dynamisch füllen. Dem Range dann noch einen Namen zu verpassen ...? Schreib doch die Werte in ein Array.

Grüße
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 196
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 78 Mal
Danksagung erhalten: 67 Mal
Kontaktdaten:

Re: Range "manipulieren"

#3

Beitrag von thowe »

Hallöchen,

danke für die rasche Antwort.

Der dynamische Bereich "LstVermittlerArt" wird mit folgender Formel generiert

Code: Alles auswählen

=data!$E$2:INDEX(data!$E$2:$E$10;ANZAHL2(data!$E$2:$E$10);1)
In diesem speziellen Fall benötige ich die geänderte Bereichskoordinaten nur temporär...!

Prinzipiell wird bei mir alles was während einer Nutzung der Datei passiert, in einer modSession, VBA-technisch geregelt. Auch die temporäre Änderung des Ranges. Das heißt die weiter oben ersichtliche Formel bleibt - static - bestehen...

Von diesem Zugang möchte ich nicht abgehen, es sei denn, es spricht prinzipiell etwas dagegen. Vielleicht auch noch interessant. Alle temporären Änderungen werden in einem Arbeitsblatt "wksSession" dokumentiert, gespeichert, eingetragen, (wie auch immer)

Damit könnte ich deinen Weg beschreiten. Trigger wäre bei mir ein Change-Event eines Controls, aber dies ist nur ein Nebenschauplatz.

Werde dies mal "coden" oder dann hier posten, dauert jedoch ein wenig...
Danke nochmal
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Range "manipulieren"

#4

Beitrag von d'r Bastler »

Nur so als Spielerei zwischendrin:

Code: Alles auswählen

Option Explicit

Sub PlayRanges()
Dim i As Integer, a As Integer
Dim rng As Range, sName As String
Dim aNames


aNames = Array("Nr.", "fünf", "lebt")
Cells.Clear
MsgBox "!"

a = 0
For i = 1 To 15 Step 5
    Set rng = Range(Cells(i, i), Cells(i + 4, i + 4))
    rng.Interior.ColorIndex = i + 10
    rng.Font.Color = vbWhite
    Cells(i, i) = aNames(a)
    a = a + 1
Next i
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    PlayRanges
End Sub
Grüße und viel Spaß
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste