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

Forumthread: Range in Variable speichern und wiedergeben

Range in Variable speichern und wiedergeben
03.03.2016 07:18:19
Björn
Hallo,
ich möchte in einer "Quelldatei" mehrere Zellinhalte einer Spalte in einer Variablen (Range) speichern, um sie dann in einer "Zieldatei" wieder auszugeben. Leider komme ich hier nicht weiter:
Sub Import()
Dim strSourceFile As String
Dim objWB As Workbook
Dim Datum As Range
Dim Name As Range
Dim Ort As Range
Dim Klasse As Range
'Quelldatei auswählen
ChDir ThisWorkbook.Path
strsource = Application.GetOpenFilename()
'Daten aus Quelldatei in Variablen (Range) speichern
If strsource  CStr(False) Then
Set objWB = Workbooks.Open(Filename:=strsource)
With objWB
With .Sheets("Tabelle1")
Datum = .Cells(4, 2).Value
Name = .Range("i3:i14").Value
Ort = .Range("j3:j14").Value
End With
With .Sheets("Tabelle2")
Klasse = .Range("b8:b500").Value
End With
End With
End If
ActiveWorkbook.Close savechanges:=False
'Werte der Variablen in Zieldatei ausgeben
ThisWorkbook.activate
Worksheets("Tabelle1").activate
Cells(4, 2).Value = Datum
Range("t3:t14").Value = Name
Range("z3:z14").Value = Ort
Worksheets("Tabelle2").activate
Range("a8:a500").Value= Klasse
End Sub

Danke und Gruß
Björn

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range in Variable speichern und wiedergeben
03.03.2016 08:19:11
Steve
Hallo Björn,
dafür gibt mehr als einen Weg. Bei deiner Variante hast du nicht beachtet, dass Range-Variablen mit "Set" Werte zugewiesen bekommen müssen. Zudem besitzt eine Zelle mehr als nur ein Attribut, du musst desshalb hier in der Regel angeben welches du haben möchtest: Werte/Formeln, Formate, ... .
Set Datum = .Cells(4, 2)
Set Name = .Range("T3:T14")
Cells(4, 2) = Datum.Value
Range("T3:T14") = Name.Value
'alternativ
Range("T3").Resize(Name.Rows.Count, Name.Columns.Count) = Name.Value
lg Steve

Anzeige
AW: Range in Variable speichern und wiedergeben
03.03.2016 09:30:27
Björn
Danke für die Antwort.
Mit "Cells" funktioniert es, mit "Range" nicht: Es wird einfach nichts in die Zieldatei eingefügt.
Jetzt weiß ich nicht, ob
1. die Range-Variablen "leer" sind oder
2. das Einfügen der Inhalte der Range-Variablen in die Zieldaten nicht funktioniert?
Gruß
Björn

Anzeige
AW: Range in Variable speichern und wiedergeben
03.03.2016 09:32:57
Björn
Danke für die Antwort.
Mit "Cells" funktioniert es, mit "Range" nicht: Es wird einfach nichts in die Zieldatei eingefügt.
Jetzt weiß ich nicht, ob
1. die Range-Variablen "leer" sind oder
2. das Einfügen der Inhalte der Range-Variablen in die Zieldaten nicht funktioniert?
Gruß
Björn

Anzeige
AW: Range in Variable speichern und wiedergeben
03.03.2016 11:24:55
Rudi
hallo,
so sollte das gehen:
Sub Import()
Dim strSourceFile As String
Dim objWB As Workbook
Dim Datum As Date
Dim vName
Dim vOrt
Dim vKlasse
'Quelldatei auswählen
ChDir ThisWorkbook.Path
strsource = Application.GetOpenFilename()
'Daten aus Quelldatei in Variablen (Range) speichern
If strsource  CStr(False) Then
Set objWB = Workbooks.Open(Filename:=strsource)
With objWB
With .Sheets("Tabelle1")
Datum = .Cells(4, 2).Value
Name = .Range("i3:i14").Value
Ort = .Range("j3:j14").Value
End With
With .Sheets("Tabelle2")
Klasse = .Range("b8:b500").Value
End With
End With
.Close savechanges:=False
End If
'Werte der Variablen in Zieldatei ausgeben
ThisWorkbook.Activate
With Worksheets("Tabelle1")
.Cells(4, 2).Value = Datum
.Range("t3:t14").Value = Name
.Range("z3:z14").Value = Ort
End With
With Worksheets("Tabelle2")
.Range("a8:a500").Value = Klasse
End With
End Sub

Gruß
Rudi

Anzeige
AW: Range in Variable speichern und wiedergeben
03.03.2016 13:51:01
Björn
Hallo Rudi
Danke für die Antwort. Leider funktioniert es bei mir nicht...

Korrektur
03.03.2016 15:25:59
Rudi
jetzt aber.
Sub Import()
Dim strSourceFile As String
Dim objWB As Workbook
Dim Datum As Date
Dim vName
Dim vOrt
Dim vKlasse
'Quelldatei auswählen
ChDir ThisWorkbook.Path
strSourceFile = Application.GetOpenFilename()
'Daten aus Quelldatei in Variablen (Range) speichern
If strSourceFile  CStr(False) Then
Set objWB = Workbooks.Open(Filename:=strSourceFile)
With objWB
With .Sheets("Tabelle1")
Datum = .Cells(4, 2).Value
vName = .Range("i3:i14").Value
vOrt = .Range("j3:j14").Value
End With
With .Sheets("Tabelle2")
vKlasse = .Range("b8:b500").Value
End With
.Close savechanges:=False
End With
End If
'Werte der Variablen in Zieldatei ausgeben
ThisWorkbook.Activate
With Worksheets("Tabelle1")
.Cells(4, 2).Value = Datum
.Range("t3:t14").Value = vName
.Range("z3:z14").Value = vOrt
End With
With Worksheets("Tabelle2")
.Range("a8:a500").Value = vKlasse
End With
End Sub
Gruß
Rudi

Anzeige
AW: Korrektur
03.03.2016 21:12:11
Björn
@ Rudi
Danke es funktioniert, nun muss ich es nur noch implementieren...
Gruß
Björn
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte aus Excel Range in Variablen speichern und wiedergeben


Schritt-für-Schritt-Anleitung

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

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

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub Import()
        Dim strSourceFile As String
        Dim objWB As Workbook
        Dim Datum As Date
        Dim vName
        Dim vOrt
        Dim vKlasse
    
        ' Quelldatei auswählen
        ChDir ThisWorkbook.Path
        strSourceFile = Application.GetOpenFilename()
    
        ' Daten aus Quelldatei in Variablen (Range) speichern
        If strSourceFile <> CStr(False) Then
            Set objWB = Workbooks.Open(Filename:=strSourceFile)
            With objWB
                With .Sheets("Tabelle1")
                    Datum = .Cells(4, 2).Value
                    vName = .Range("i3:i14").Value
                    vOrt = .Range("j3:j14").Value
                End With
                With .Sheets("Tabelle2")
                    vKlasse = .Range("b8:b500").Value
                End With
            End With
            objWB.Close savechanges:=False
        End If
    
        ' Werte der Variablen in Zieldatei ausgeben
        ThisWorkbook.Activate
        With Worksheets("Tabelle1")
            .Cells(4, 2).Value = Datum
            .Range("t3:t14").Value = vName
            .Range("z3:z14").Value = vOrt
        End With
        With Worksheets("Tabelle2")
            .Range("a8:a500").Value = vKlasse
        End With
    End Sub
  4. Ausführen: Drücke F5, um das Makro auszuführen. Wähle die Quelldatei aus und die Werte werden in die Zieldatei übertragen.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht übereinstimmend": Achte darauf, dass die Variablen richtig deklariert sind. Zum Beispiel, wenn du mit Dim arbeitest, stelle sicher, dass die Datentypen korrekt sind (z. B. Dim vName für String).

  • Problem: Keine Werte in Zieldatei: Überprüfe, ob die Range-Variablen korrekt zugewiesen wurden. Verwende Set für Range-Objekte:

    Set vName = .Range("i3:i14")
  • Fehler: "Objektvariable oder With-Blockvariable nicht gesetzt": Stelle sicher, dass du Set verwendest, wenn du Objekte zuweist.


Alternative Methoden

  • Direktes Zuweisen: Anstelle von Variablen kannst du auch direkt auf die Zellen zugreifen:

    Worksheets("Tabelle1").Cells(4, 2).Value = Workbooks("Quelldatei.xlsx").Sheets("Tabelle1").Cells(4, 2).Value
  • Arrays verwenden: Du kannst auch Arrays verwenden, um mehrere Werte zu speichern und sie dann in einem Schritt zuzuweisen:

    Dim arrValues() As Variant
    arrValues = .Range("i3:i14").Value
    Range("t3:t14").Value = arrValues

Praktische Beispiele

  1. Einfaches Importieren: Übertrage Daten von einer bestimmten Tabelle:

    ' Daten von Tabelle1 in Tabelle2 übertragen
    With Worksheets("Tabelle1")
        Range("A1").Value = .Cells(1, 1).Value
    End With
  2. Berechnung und Ausgabe: Führe Berechnungen durch, bevor du die Werte ausgibst:

    Dim total As Double
    total = Application.WorksheetFunction.Sum(vKlasse)
    Worksheets("Tabelle2").Cells(1, 1).Value = total

Tipps für Profis

  • Verwende Option Explicit: Füge oben im Modul Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert sind.
  • Code optimieren: Vermeide unnötige Activate und Select-Befehle, um die Ausführung zu beschleunigen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um Probleme während der Ausführung zu erkennen und zu beheben:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Wie speichere ich eine Excel Range in einer Variable?
Du kannst eine Excel Range in einer Variablen speichern, indem du Set verwendest, um die Range zuzuweisen:

Set myRange = Worksheets("Tabelle1").Range("A1:A10")

2. Was mache ich, wenn die Daten in der Ziel-Range nicht angezeigt werden?
Überprüfe, ob die Quelle korrekt ist und ob du die Werte aus der Range richtig zuweist, z. B. mit .Value.

3. Kann ich mehrere Werte in einer einzigen Variable speichern?
Ja, du kannst ein Array verwenden, um mehrere Werte zu speichern und sie dann auf einmal zuzuweisen.

4. Wie kann ich mit VBA eine Range dynamisch anpassen?
Du kannst die Resize-Methode verwenden, um die Größe einer Range basierend auf der Anzahl der Zeilen oder Spalten anzupassen:

Range("A1").Resize(5, 2).Value = yourArray

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige