Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dynamische range festlegen

Dynamische range festlegen
24.02.2017 17:27:13
Philipp
Hallo zusammen,
ich habe in einer Spalte A mehrere Eintraege. Diese fangen in unterschiedlichen Zellen an und hoeren in unterscheidlichen Zellen auf. Jedoch sollen diese Zellen markiert werden. Ist es moeglich die range ueber eine Fenster eingabe festzulegen und in ein makro zu uebernehmen. Ich hoffe, dass es verstaendlich ist.
Mein Code bisher:

Sub main()
Dim copylost As ListColumn
Range("A1:A29").Select
Selection.Copy
'add new file
Set wkb = Workbooks.Add
Range("A1").PasteSpecial
wkb.Close True
End Sub

VG Philipp
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamische range festlegen
24.02.2017 17:40:33
Daniel
Hi
du willst innerhalb des Makros Zellen auswählen können?
dazu gibt es die Application.Inputbox ... Type:=8

Sub main()
Dim wkb As Workbook
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox("Bitte Zellen auswählen", Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Abbruch"
Exit Sub
End If
rng.Copy
'add new file
Set wkb = Workbooks.Add
Range("A1").PasteSpecial
wkb.Close True
End Sub
Gruß Daniel
Anzeige
AW: Dynamische range festlegen
24.02.2017 17:47:56
Philipp
Hi Daniel,
danke fuer deine schnelle Hilfe! Das Problem ist, dass trotzdem noch die ganze Liste kopiert _ wird. Ich denke, dass liegt an dem Code den ich dir vorenthalten habe. Hast du eine Idee? Der

Sub createSheets() erstellt Tabellenblaetter mit den Listennummern und wird in der main()  _
aufgerufen.

Sub createSheets()
Dim Bereich As Range
Dim Zelle As Range
Dim Tabelle As Worksheet
For Each Zelle In Sheet3.Range("A5").CurrentRegion
With ActiveWorkbook
Set Tabelle = .Sheets.Add(After:=.Sheets(.Sheets.Count))
End With
Tabelle.Name = Zelle.Value
Next Zelle
End Sub
Schonmal Danke!
VG Philipp
Anzeige
AW: Dynamische range festlegen
24.02.2017 17:51:24
Philipp
Hi Daniel,
danke fuer deine schnelle Hilfe! Das Problem ist, dass trotzdem noch die ganze Liste kopiert _ wird. Ich denke, dass liegt an dem Code den ich dir vorenthalten habe. Hast du eine Idee? Der

Sub createSheets() erstellt Tabellenblaetter mit den Listennummern und wird in der main()  _
aufgerufen.

Sub createSheets()
Dim Bereich As Range
Dim Zelle As Range
Dim Tabelle As Worksheet
For Each Zelle In Sheet3.Range("A5").CurrentRegion
With ActiveWorkbook
Set Tabelle = .Sheets.Add(After:=.Sheets(.Sheets.Count))
End With
Tabelle.Name = Zelle.Value
Next Zelle
End Sub
Schonmal Danke!
VG Philipp
Anzeige
AW: Dynamische range festlegen
24.02.2017 17:53:11
Philipp
Ups vergessen das Kontrollkaestchen zu aktivieren :D
AW: Dynamische range festlegen
24.02.2017 18:14:35
Daniel
Hi
naja, du weißt ja jetzt wie das mit der Inputbox funktioniert.
das kannst du ja für dein neues Problem adaptieren.
was du da jetzt willst, verstehe ich auch nicht so ganz.
Gruß Daniel
AW: Dynamische range festlegen
24.02.2017 18:40:54
Philipp
Hi Daniel,
theoretisch hast du recht und ich sollte deine Loesung adaptieren koennen, inde rPraxis klappt das leider nicht.
Also mein Ziel ist es aus einer dynamischen Liste (wie oben erklaert), in einer anderen Datei Tabellenblaetter zu erstellen. Diese sollen mit dem Listeninhalt gefuellt werden. Jedoch soll nicht die ganze Liste in Tabellenblaetter umgewandelt werden, sondern nur festgelegte. Die Methode deletesheets ist nur da um die Standard Tabellenblaeter zu loeschen. Mein aktuelles Problem ist, dass immer die komplette Liste in Tabellenblaetter umgewandelt wird (auch mit deinem Loesungsvorschlag). Denek aber, dass ich Ihn falsch umsetze.
Hier mein ganzer Code ohne deinen Vorschlag. Theoretisch geht es nur darum den Code and der richtigen Stelle einzuseten...
Option Explicit
Global wkb As Workbook
Global ws As Worksheets
Sub main()
Range("A1:A29").Select
Selection.Copy
'add new file
Set wkb = Workbooks.Add
Range("A1").PasteSpecial
'rename file
wkb.SaveAs Environ("UserProfile") & "\Desktop\" & "Commission" & Format(Now, "YYYYMMDD_hhmm" _
) & ".xlsx"
Call createSheets
Call deleteWorksheets
wkb.Close True
End Sub
Sub deleteWorksheets()
'delete Sheet1,2,3
Application.DisplayAlerts = False
Worksheets("Sheet1").Delete
Worksheets("Sheet2").Delete
Worksheets("Sheet3").Delete
Application.DisplayAlerts = True
End Sub

Sub createSheets()
Dim Bereich As Range
Dim Zelle As Range
Dim Tabelle As Worksheet
' fill workbook with named sheets
For Each Zelle In Sheet3.Range("A5").CurrentRegion
With ActiveWorkbook
Set Tabelle = .Sheets.Add(After:=.Sheets(.Sheets.Count))
End With
Tabelle.Name = Zelle.Value
Next Zelle
End Sub

Vielen Dank!!
VG Philipp
Anzeige
AW: Dynamische range festlegen
24.02.2017 18:41:41
Philipp
Mal wieder vergessen....
AW: Dynamische range festlegen
24.02.2017 18:44:41
Daniel
Hi
naja, in Create Sheets:
set rng = application.inputbox("...", type:=8)
For Each Zelle In rng
und so weiter.
die Sicherheitsabfragen für den Fall, dass abbrechen gedrückt wird, kannst du ja noch ergänzen.
Gruß Daniel
Anzeige
AW: Dynamische range festlegen
24.02.2017 20:12:48
Philipp
Danke ist genau, dass was ich wollte! :) Vielen Dank fuer deine Muehe!!
VG Philipp
;
Anzeige
Anzeige

Infobox / Tutorial

Dynamische Bereiche in Excel festlegen


Schritt-für-Schritt-Anleitung

Um eine dynamische Range in Excel über eine Eingabebox festzulegen und diese in ein Makro zu integrieren, kannst Du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projekt-Explorer auf „VBAProject (dein Dokument)“ und wähle „Einfügen“ > „Modul“.

  3. Füge den folgenden Code ein:

    Sub main()
       Dim wkb As Workbook
       Dim rng As Range
       On Error Resume Next
       Set rng = Application.InputBox("Bitte Zellen auswählen", Type:=8)
       On Error GoTo 0
       If rng Is Nothing Then
           MsgBox "Abbruch"
           Exit Sub
       End If
       rng.Copy
       ' Neues Workbook hinzufügen
       Set wkb = Workbooks.Add
       Range("A1").PasteSpecial
       wkb.Close True
    End Sub
  4. Führe das Makro aus: Gehe zurück zu Excel und führe das Makro aus, um die Zellen auszuwählen und zu kopieren.


Häufige Fehler und Lösungen

  • Problem: Es wird die gesamte Liste kopiert, nicht nur die ausgewählten Zellen.

    • Lösung: Stelle sicher, dass Du die Range rng korrekt verwendest und nicht die vordefinierte Range Range("A1:A29").
  • Problem: Das Makro bricht ab, wenn keine Zellen ausgewählt werden.

    • Lösung: Der Code enthält bereits eine Abfrage, die das Abbrechen des Makros behandelt. Achte darauf, dass Du die On Error Resume Next und On Error GoTo 0 Zeilen nicht veränderst.

Alternative Methoden

Eine andere Methode, um dynamische Bereiche in Excel zu definieren, ist die Verwendung von benannten Bereichen:

  1. Gehe zu „Formeln“ > „Namens-Manager“.
  2. Klicke auf „Neu“ und definiere einen Namen für den Bereich.
  3. Gib eine Formel ein, die die dynamische Range beschreibt, z.B. =BEREICH.VERSCHIEBEN(A1, 0, 0, ANZAHL(A:A), 1).
  4. Verwende diesen Namen im Makro.

Praktische Beispiele

Hier ist ein Beispiel, wie Du die dynamische Range in einer Funktion verwenden kannst:

Sub createSheets()
    Dim Bereich As Range
    Dim Zelle As Range
    Dim Tabelle As Worksheet
    Dim rng As Range

    On Error Resume Next
    Set rng = Application.InputBox("Bitte Zellen auswählen", Type:=8)
    On Error GoTo 0

    ' Überprüfe, ob eine Range ausgewählt wurde
    If rng Is Nothing Then Exit Sub

    ' Fülle das Workbook mit benannten Blättern
    For Each Zelle In rng
        Set Tabelle = Sheets.Add(After:=Sheets(Sheets.Count))
        Tabelle.Name = Zelle.Value
    Next Zelle
End Sub

Tipps für Profis

  • Verwende Option Explicit: Damit wird sichergestellt, dass alle Variablen deklariert sind, was Fehler verhindert.
  • Nutze Application.ScreenUpdating = False: Dies verbessert die Performance, wenn Du viele Blätter erstellst.
  • Füge Sicherheitsabfragen hinzu: Stelle sicher, dass Du die Nutzer informierst, falls sie das Makro abbrechen möchten.

FAQ: Häufige Fragen

1. Wie kann ich die InputBox anpassen?
Du kannst den Text in der InputBox ändern, um den Nutzern klarere Anweisungen zu geben.

2. Was mache ich, wenn ich ein Fehlerprotokoll führen möchte?
Du kannst Fehlerbehandlungsroutinen implementieren, um Fehler zu protokollieren oder anzuzeigen, wenn sie auftreten.

3. Funktioniert das auch in Excel 2016?
Ja, der Code ist kompatibel mit Excel 2016 und neueren Versionen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige