Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Variablen Bereich markieren

Variablen Bereich markieren
Beffen
Halli Hallo,
ich habe mal wieder ein Problem bei dem ich wegen ner Kleinigkeit nicht weiterkomme.
Ich würde gerne in einer entfernten Datei einen bestimmten Bereich markieren. Leider funktioniert die Methode
Range(lngfirstRow, lngLastRow).Select
nicht ganz so, wie ich mir das vorgestellt hab - oder besser: gar nicht.
Ausserdem benötige ich den VBA-Sverweis. Ich habe hier zwei Tabellenblätter, die in einem Dritten zusammengefasst werden sollen....
Hat jemand nen Ansatz, der verwendbar ist?
Sub holedatencoglopad()
Dim lngfirstRow As Long
Dim lngLastRow As Long
Dim Pfad As String
Dim Blatt As String
ScreenUpdating = False
Pfad = Worksheets("system").Range("a2")
Workbooks.Open Pfad
With ActiveSheet
lngfirstRow = .Cells.Find(What:="3000000", After:=Range("h1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox lngfirstRow
End With
With ActiveSheet
lngLastRow = .Cells.Find(What:="*", After:=Range("h1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox lngLastRow
End With
Range(lngfirstRow, lngLastRow).Select
Selection.Copy
ThisWorkbook.Activate
Sheets("tempcoglopad").Select
Cells.Select
ActiveSheet.Paste
MsgBox "Daten importiert"
ScreenUpdating = True
End Sub

Gruß Beffen
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Variablen Bereich markieren
31.05.2011 16:51:40
Rudi
Hallo,
Select brauchst du nicht.
Range(Rows(lngfirstRow), Rows(lngLastRow)).Copy ThisWorkbook.Sheets("tempcoglopad").Cells(1, 1)
Gruß
Rudi
Sauber!!!! Sverweis für Zellen?
31.05.2011 17:01:49
Beffen
Hallo Rudi,
Saubere Sache. Das nenn ich mal elegant!
Ich werd mal anfangen mir sowas zu speichern. Jedesmal fang ich fast bei Null an.
Meine Variante hätte demzufolge mit: Range(rows(lngfirstRow), rows(lngLastRow)).Select... auch funktioniert...
Aber das ist echt cool. Danke Dir.
Wie kann ich denn ne Wertzuordnung einrichten? Also den Sverweis - nur über VBA?
Gruß Beffen
Anzeige
Konkreteres Problem - Sverweis für Zellen
31.05.2011 19:20:00
Beffen
Hallo nochmal an alle,
hier mal konkret mein Problem:
https://www.herber.de/bbs/user/75105.zip
Vielen Dank für eure Mühe!
Gruß Beffen
AW: Konkreteres Problem - Sverweis für Zellen
31.05.2011 21:20:22
fcs
Hallo Beffen,
hier ein Beispiel-Makro für die Übernahme von Werten aus anderen Arbeitsmappen/Tabellenblättern.
Voraussetzung für die Ausführung des Makros ist, dass beide Arbeitsmappen geöffnet sind.
Um unter VBA-Sverweis-Funktionalität zu erreichen muss man entweder die entsprechenden Formeln in die Zellen einfügen oder man muss die gewünschten Inhalte in einer Spalte der Quelle suchen und dann die Zeile der Fundstelle auswerten.
VLookup funktioniert unter VBA nur korrekt, wenn der Verweis eine Fundstelle liefert.
Gruß
Franz
Sub GetMasterDaten()
Dim wbQuelle As Workbook, wksQuelle As Worksheet, Zeile_Q
Dim wbZiel As Workbook, wksZiel As Worksheet, Zeile, Zelle As Range
Set wbQuelle = Workbooks("Masterarbeitsliste.xlsx") 'Name ggf. anpassen
Set wksQuelle = wbQuelle.Worksheets("Tabelle1") 'Name ggf. anpassen
Set wbZiel = Workbooks("Hauptmappe.xlsx") 'Name ggf. anpassen
Set wksZiel = wbZiel.Worksheets("LCL neu") 'Name ggf. anpassen
Application.ScreenUpdating = False
With wksQuelle
'Letzte Zeile in PAD-Number-Spalte
Zeile_Q = .Cells(.Rows.Count, 4).End(xlUp).Row
'Datenzeilen kopieren
.Range(.Cells(4, 1), .Cells(Zeile_Q, 5)).Copy
End With
With wksZiel
'Werte in Zieltabelle einfügen
.Cells(4, 1).PasteSpecial Paste:=xlPasteValues
Set wksQuelle = wbZiel.Worksheets("LCL alt") 'Name ggf. anpassen
'Zeilen in Zieltabelle nachbereiten
For Zeile = 4 To .Cells(.Rows.Count, 4).End(xlUp).Row
'Shop 7  Zeilen - Informationen löschen
If .Cells(Zeile, 1) = 7 Then
'Spalten B-C
.Range(.Cells(Zeile, 2), .Cells(Zeile, 3)).ClearContents
'Spalten E
.Cells(Zeile, 5).ClearContents
End If
'Pad-Number in "LCL alt" suchen
Set Zelle = wksQuelle.Columns(4).Find(what:=.Cells(Zeile, 4).Value, _
lookat:=xlWhole, LookIn:=xlValues)
If Zelle Is Nothing Then
'Zeile in Spalten F bis I färben und Inhalte löschen
With .Range(.Cells(Zeile, 6), .Cells(Zeile, 9))
.Interior.ColorIndex = 6 'gelb
.ClearContents
End With
Else
Zeile_Q = Zelle.Row
'Werte aus Spalten F bis I von "LCL alt" nach "LCL neu" kopieren
With wksQuelle
.Range(.Cells(Zeile_Q, 6), .Cells(Zeile_Q, 9)).Copy
End With
With .Range(.Cells(Zeile, 6), .Cells(Zeile, 9))
.PasteSpecial Paste:=xlPasteValues
.Interior.ColorIndex = xlColorIndexNone
End With
End If
Set Zelle = Nothing
Next
Application.CutCopyMode = False
End With
Application.ScreenUpdating = True
End Sub

Anzeige
Sehr gut! Fantastisch! Danke!!! o.w.T.
01.06.2011 12:30:44
Beffen
eh, wow! Das ist schonmal ein Riesenschritt!!!!!
Tausend Dank!
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Variablen Bereich in Excel markieren


Schritt-für-Schritt-Anleitung

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

  2. Neues Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)", wähle "Einfügen" und dann "Modul".

  3. Makro erstellen: Kopiere und füge das folgende Makro ein, um einen zellbereich zu markieren und zu kopieren:

    Sub holedatencoglopad()
        Dim lngfirstRow As Long
        Dim lngLastRow As Long
        Dim Pfad As String
        Dim Blatt As String
        Application.ScreenUpdating = False
        Pfad = Worksheets("system").Range("A2")
        Workbooks.Open Pfad
        With ActiveSheet
            lngfirstRow = .Cells.Find(What:="3000000", After:=Range("H1"), _
            SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
            lngLastRow = .Cells.Find(What:="*", After:=Range("H1"), _
            SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        End With
        ' Zellenbereich markieren und kopieren
        Range(Rows(lngfirstRow), Rows(lngLastRow)).Copy ThisWorkbook.Sheets("tempcoglopad").Cells(1, 1)
        MsgBox "Daten importiert"
        Application.ScreenUpdating = True
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und drücke ALT + F8, wähle das Makro holedatencoglopad aus und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler: "Der angegebene Bereich ist ungültig"
    Lösung: Vergewissere dich, dass lngfirstRow und lngLastRow korrekte Werte haben, bevor du den Bereich markierst.

  • Fehler: "Das Arbeitsblatt kann nicht gefunden werden"
    Lösung: Stelle sicher, dass die Arbeitsmappe, aus der du Daten kopierst, geöffnet ist und die angegebenen Tabellennamen korrekt sind.


Alternative Methoden

Eine alternative Methode, um einen Bereich zu markieren, ist die Verwendung der Select-Methode. Diese wird jedoch weniger empfohlen, da sie die Effizienz des Codes beeinträchtigen kann. Du kannst stattdessen direkt auf den Bereich zugreifen, wie im obigen Beispiel gezeigt.

Ein Beispiel für die Verwendung von Select wäre:

Range(lngfirstRow, lngLastRow).Select
Selection.Copy

Praktische Beispiele

Hier sind einige praktische Beispiele für das Markieren von Bereichen in Excel VBA:

  1. Markieren und Kopieren eines Bereichs:

    Sub CopyRange()
        Range("A1:A10").Copy Destination:=Sheets("Sheet2").Range("B1")
    End Sub
  2. Markieren eines dynamischen Bereichs:

    Sub DynamicRange()
        Dim lastRow As Long
        lastRow = Cells(Rows.Count, 1).End(xlUp).Row
        Range("A1:A" & lastRow).Select
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler reduziert.
  • Vermeide Select und Activate: Greife direkt auf die Zellen zu, um den Code schneller und effizienter zu machen.
  • Nutze With-Blöcke: Diese verbessern die Lesbarkeit und Effizienz des Codes.

FAQ: Häufige Fragen

1. Wie markiere ich einen Bereich ohne VBA?
Du kannst einen Bereich manuell markieren, indem du die Maustaste drückst und ziehst oder die Shift-Taste zusammen mit den Pfeiltasten verwendest.

2. Was ist der Unterschied zwischen Range und Cells?
Range referenziert einen spezifischen Bereich von Zellen, während Cells auf einzelne Zellen innerhalb eines Bereichs zugreift, z.B. Cells(1, 1) für Zelle A1.

3. Kann ich mehrere Arbeitsmappen gleichzeitig öffnen?
Ja, du kannst mehrere Arbeitsmappen gleichzeitig öffnen, um Daten zwischen ihnen zu übertragen. Stelle sicher, dass du die Namen der Arbeitsmappen korrekt angibst.

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