09.05.2014, 09:54
Hallo zusammen!
Ich habe eine Excel Datei mit mehreren Tabellenblättern.
Die Tabellenblätter sind gleich aufgebaut.
Hinter jedem Tabellenblatt ist ein Code, der bestimmte Zellinhalte in eine Sammeldatei überträgt.
Die Zellen deren Inhalte übertragen werden sollen, sind als Namen definiert. Die Namen lauten in jedem Tabellenblatt gleich.
Die Tabellenblätter in der Sammeldatei haben einmal den gleichen Namen wie in der Ursprungsdatei und für einen zweiten Übertrag ist dem gleichen Namen ein Zusatz (ÖNB) vorangestellt.
Der Code funktioniert einwandfrei.
Ich möchte den Code jetzt nicht mehr in jedem Tabellenblatt haben, sondern nur einmal in einem Modul. Dadurch muss ich bei Änderungen nicht mehrere Codes ändern, sondern nur einen.
Dazu habe ich den Tabellenblattnamen variabel gestaltet.
Wenn ich den Code in ein Modul kopiere, kommt bei der Ausführung ein Laufzeitfehler '1004'
"Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen". Als Fehler wird der Bereich 'DATUMSABFRAGE Datprüf = Range("Datum") markiert.
Was muss ich ändern?
Der Code wurde vor längerer Zeit mit Hilfe des alten Forums erstellt. Ich kenn mich mit VBA wenig aus.
Falls jemandem noch andere Verbesserungsmöglichkeiten auffallen bin ich natürlich für Änderungen empfänglich.
Ich habe eine Excel Datei mit mehreren Tabellenblättern.
Die Tabellenblätter sind gleich aufgebaut.
Hinter jedem Tabellenblatt ist ein Code, der bestimmte Zellinhalte in eine Sammeldatei überträgt.
Die Zellen deren Inhalte übertragen werden sollen, sind als Namen definiert. Die Namen lauten in jedem Tabellenblatt gleich.
Die Tabellenblätter in der Sammeldatei haben einmal den gleichen Namen wie in der Ursprungsdatei und für einen zweiten Übertrag ist dem gleichen Namen ein Zusatz (ÖNB) vorangestellt.
Der Code funktioniert einwandfrei.
Ich möchte den Code jetzt nicht mehr in jedem Tabellenblatt haben, sondern nur einmal in einem Modul. Dadurch muss ich bei Änderungen nicht mehrere Codes ändern, sondern nur einen.
Dazu habe ich den Tabellenblattnamen variabel gestaltet.
Wenn ich den Code in ein Modul kopiere, kommt bei der Ausführung ein Laufzeitfehler '1004'
"Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen". Als Fehler wird der Bereich 'DATUMSABFRAGE Datprüf = Range("Datum") markiert.
Code:
Option Explicit
Sub Datenweitergabe()
Dim LoLetzte As Long
Dim inAbfrage As Integer
Dim DatName As String, DatPfad As String
Dim curWkb As Workbook, curWks As Worksheet
Dim Datprüf 'As String
Dim msga As String 'Definition Msgboxvariable "Datensatz vorhanden ..."
Dim suchvar As Range
Dim BstName As String
Datprüf = Range("Datum") 'Variabel für Datum
DatName = "BA_Summen.xlsx" 'Dateiname anpassen
DatPfad = "C:\Vorlagen-Muster\TESTS" & "\" 'Dateipfad anpassen
BstName = ActiveSheet.Name 'Variable für Tabellenblatt
Application.ScreenUpdating = False
Set curWkb = Workbooks(ActiveWorkbook.Name)
Set curWks = curWkb.Worksheets(ActiveSheet.Name)
curWks.Range("Datum").Copy
Workbooks.Open DatPfad & DatName
'DATUMSABFRAGE
Datprüf = Range("Datum")
Set suchvar = Worksheets(BstName).Range("A:A").Find(What:=Datprüf, LookIn:=xlValues, LookAt:=xlWhole)
If Not suchvar Is Nothing Then
msga = MsgBox("Datensatz mit diesem Datum bereits vorhanden. Weiteren Datensatz übertragen?", vbYesNo, "Info")
If msga = vbNo Then
Workbooks(DatName).Save
Workbooks(DatName).Close
Application.ScreenUpdating = True
Exit Sub
Else
GoTo datübertrag
End If
Else
GoTo datübertrag
End If
datübertrag: 'Marke aus Abfrage MsgBox oben
'Übertrag für Sammeldatei
With Workbooks(DatName).Worksheets(BstName)
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("A" & LoLetzte + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
curWks.Range("Datum").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("A" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("Stand100").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("B" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("Stand50").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("C" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("Stand20").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("D" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("Stand10").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("E" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GS_vor").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("F" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("NF_100").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("G" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("NF_50").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("H" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("NF_20").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("I" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("NF_10").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("J" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GS_nach").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("K" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End With
'Übertrag für ÖNB
With Workbooks(DatName).Worksheets("ÖNB " & BstName)
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("A" & LoLetzte + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
curWks.Range("Datum").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("A" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GSA_100").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("B" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_HA100").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("C" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_Bst100").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("D" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GSA_50").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("E" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_HA50").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("F" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_Bst50").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("G" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GSA_20").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("H" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_HA20").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("I" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_Bst20").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("J" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("GSA_10").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("K" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_HA10").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("L" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("FIT_Bst10").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("M" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
curWks.Range("Bef_Ges").Copy
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
.Range("N" & LoLetzte).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End With
Workbooks(DatName).Save
Workbooks(DatName).Close
Application.ScreenUpdating = True
MsgBox ("Die Werte wurden übertragen")
End Sub
Der Code wurde vor längerer Zeit mit Hilfe des alten Forums erstellt. Ich kenn mich mit VBA wenig aus.
Falls jemandem noch andere Verbesserungsmöglichkeiten auffallen bin ich natürlich für Änderungen empfänglich.
LG Herbert
Windows 10
Office 365
Windows 10
Office 365