Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in neueVorlage übernehmen

Daten in neueVorlage übernehmen
stefan
Hallo Zusammen,
habe über eine Vorlage ca. 1000 Exceldateien angelegt. Leider hat sich die Vorlage nun etwas verändert.
Möchte nun in die neue Vorlage ein Macro schreiben. Wenn ich es auswähle sollte folgendes gemacht werden:
a) Ordner in dem alle XLS liegen soll geöffnet werden. manuelle Auswahl der gewünschten xls(alt).
b) nun soll Tabelle1 (V-Zeiten) der geöffneten (Zeile von 10 bis 100) Spalte B mit der Tabelle1 (V-Zeiten) der neuen Vorlage ebenso Spalte B verglichen werden. Ist der Vergleich identisch dann soll er den Inhalt
der jeweiligen Zeile in Spalte E und F in die neue Vorlage kopieren
c) Sollte Inhalt unterschiedlich sein so hätte ich gerne den Inhalt der alten Zeile in einem neuen Tabellenblatt aufgelistet (diese müssten dann manuell zugeordnet werden)
d) ist er mit Tabelle1 fertig dann soll er mit der zweiten Tabelle ( T-Zeiten) weitermachen.
hier gilt das selbe, nur dass er anstelle Spalte E & F die Werte aus G & H entnehmen soll
Wer kennt sich in VBA so gut aus, um mich da unterstützen zu können ?
:-)
Gruß
Stefan
AW: Daten in neueVorlage übernehmen
08.08.2010 01:39:22
fcs
Hallo Stefan,
das nachfolgende Makro ermöglicht einen entsprechenden Abgleich inklusive Extra-Blätter für Abweichungen.
Das Verzeichnis für die Altdateien muss du natürlich anpassen.
Gruß
Franz
Sub Abgleich_mit_Altdatei()
Dim wbNeu As Workbook, wks_V_Neu As Worksheet, wks_T_Neu As Worksheet
Dim wks_diff As Worksheet, Zeile_Diff As Long, Spalte As Long
Dim vAuswahl, wbAlt As Workbook, wks_V_Alt As Worksheet, wks_T_Alt As Worksheet
Dim Zeile_Alt As Long, vWert_B, Zelle_Wert_B As Range
Dim VerzeichnisAktiv As String
Dim StatusCalc As Long
Const VerzeichnisAlt As String = "C:\Users\Public\Test\Data" 'Verzeichnis mit Alt-Dateien
Set wbNeu = ThisWorkbook
Set wks_V_Neu = wbNeu.Worksheets("V-Zeiten")
Set wks_T_Neu = wbNeu.Worksheets("T-Zeiten")
'Altdatei auswählen
VerzeichnisAktiv = VBA.CurDir 'aktives Verzeichnis merken
VBA.ChDir VerzeichnisAlt 'Verzeichnis mit Alt-Dateien setzen
vAuswahl = Application.Dialogs(xlDialogOpen).Show
If vAuswahl = False Then GoTo Beenden 'Öffnen-Dialog wurde abgebrochen
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set wbAlt = ActiveWorkbook
Set wks_V_Alt = wbAlt.Worksheets("V-Zeiten")
Set wks_T_Alt = wbAlt.Worksheets("T-Zeiten")
'Blätter "V-Zeiten" abgleichen
With wks_V_Alt
For Zeile_Alt = 10 To 100
'Wert in Altdatei-Spalte B
vWert_B = .Cells(Zeile_Alt, 2).Value
If vWert_B  "" Then
'Wert in neuer Datei Spalte B suchen
With wks_V_Neu
Set Zelle_Wert_B = .Range(.Cells(10, 2), .Cells(100, 2)) _
.Find(what:=vWert_B, LookIn:=xlValues, lookat:=xlWhole)
End With
If Zelle_Wert_B Is Nothing Then 'Wert in neuer Vorlage nicht vorhanden
If wks_diff Is Nothing Then
'Tabellenblatt für Abweichungen anlegen
Set wks_diff = wbNeu.Worksheets.Add(After:=wks_V_Neu)
wks_diff.Name = "V-Zeiten-Diff"
'Spaltenbreiten in Differenzblatt an Alt-Datei anpassen
For Spalte = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Column
wks_diff.Columns(Spalte).ColumnWidth = .Columns(Spalte).ColumnWidth
Next
End If
Zeile_Diff = Zeile_Diff + 1
.Rows(Zeile_Alt).Copy Destination:=wks_diff.Cells(Zeile_Diff, 1)
Else
'Werte aus Spalten E:F von Alt nach Neu kopieren
.Range(.Cells(Zeile_Alt, 5), .Cells(Zeile_Alt, 6)).Copy _
Destination:=wks_V_Neu.Cells(Zelle_Wert_B.Row, 5)
End If
End If
Next
End With
'Blätter "T-Zeiten" abgleichen
Zeile_Diff = 0
Set wks_diff = Nothing
With wks_T_Alt
For Zeile_Alt = 10 To 100
'Wert in Altdatei-Spalte B
vWert_B = .Cells(Zeile_Alt, 2).Value
If vWert_B  "" Then
'Wert in neuer Datei Spalte B suchen
With wks_T_Neu
Set Zelle_Wert_B = .Range(.Cells(10, 2), .Cells(100, 2)) _
.Find(what:=vWert_B, LookIn:=xlValues, lookat:=xlWhole)
End With
If Zelle_Wert_B Is Nothing Then 'Wert in neuer Vorlage nicht vorhanden
If wks_diff Is Nothing Then
'Tabellenblatt für Abweichungen anlegen
Set wks_diff = wbNeu.Worksheets.Add(After:=wks_T_Neu)
wks_diff.Name = "T-Zeiten-Diff"
'Spaltenbreiten in Differenzblatt an Alt-Datei anpassen
For Spalte = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Column
wks_diff.Columns(Spalte).ColumnWidth = .Columns(Spalte).ColumnWidth
Next
End If
Zeile_Diff = Zeile_Diff + 1
.Rows(Zeile_Alt).Copy Destination:=wks_diff.Cells(Zeile_Diff, 1)
Else
'Werte aus Spalten G:H  von Alt nach Neu kopieren
.Range(.Cells(Zeile_Alt, 7), .Cells(Zeile_Alt, 8)).Copy _
Destination:=wks_T_Neu.Cells(Zelle_Wert_B.Row, 7)
End If
End If
Next
End With
'Altdatei wieder schliessen
wbAlt.Close savechanges:=False
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
Beenden:
VBA.ChDir VerzeichnisAktiv 'aktives Verzeichnis zurücksetzen
Set wbNeu = Nothing: Set wks_V_Neu = Nothing: Set wks_T_Neu = Nothing
Set wks_diff = Nothing
Set wbAlt = Nothing: Set wks_V_Alt = Nothing: Set wks_T_Alt = Nothing
End Sub

Anzeige
AW: Daten in neueVorlage übernehmen
08.08.2010 07:23:37
stefan
Hallo Franz,
danke für den Code. Da hast du dir aber ganz schön Arbeit rein gesteckt.
DANKE DANKE DANKE
:-)
Stefan
AW: Daten in neueVorlage übernehmen
08.08.2010 09:00:54
stefan
Hallo Franz,
danke nochmal für die Arbeit die du da reingesteckt hast...
Kleines Problem hab ich noch mit der T-Zeiten. Hier überträgt er die Werte aus der Alt Datei nicht...
An was könnte das liegen ?
Gruß
Stefan
AW: Daten in neueVorlage übernehmen
08.08.2010 11:05:00
stefan
Hallo Franz,
hat sich erledigt. War mein Fehler !!!
Code funktioniert zu 100% !!!!!!!!!!
:-)
Stefan
AW: Daten in neueVorlage übernehmen
09.08.2010 10:15:47
Stefan
Hallo nochmal,
habe vom Franz einen Code geschrieben bekommen, der mir aus einer Alten Vorlage
Daten in eine neue Vorlage reinkopiert, wenn Spalte B identisch ist.
Nun bräuchte ich nur noch eine eine einfache Kopie von einer bestimmten Zelle in meine neue Vorlage
ohne das ein Vergleich gemacht werden muß.

Z.B. Kopiere aus Alt Tabelle 3 in Neu Tabelle 3 die Zelle A5
Wer kann mir diesen Satz in einem Code schreiben ?
Anzeige
AW: Daten in neueVorlage übernehmen
09.08.2010 12:19:13
fcs
Hallo Stefan,
hier entsprechender Beispielcode.
Füge die Kopieranweisung vor dem Abgleichen der Tabellen "V-Zeiten" ein.
Gruß
Franz
  'Zelle A5 aus 3. Tabelle kopieren
'unabhängig vom Namen des Blattes
With wbAlt.Worksheets(3)
.Range("A5").Copy Destination:=wbNeu.Worksheets(.Index).Range("A5")
End With
'oder mit bestimmten Blattnamen
With wbAlt.Worksheets("Tabelle3")
.Range("A5").Copy Destination:=wbNeu.Worksheets(.Name).Range("A5")
End With
'Blätter "V-Zeiten" abgleichen

AW: Daten in neueVorlage übernehmen
09.08.2010 14:43:46
Stefan
DANKE !!!
:-)
Stefan
AW: Daten in neueVorlage übernehmen
09.08.2010 16:48:42
Stefan
Hallo nochmal,
ich verzweifle langsam. Wollte den Code gerade an unsere XLS in der Arbeit anpassen.
Dabei bleibt er mir stehen (mit gelber Markierung im Code) bei:
.Range(.Cells(Zeile_Alt, 8)).Copy _
Destination:=wks_Streckenkopf_Neu.Cells(Zelle_Wert_B.Row, 8)

Was habe ich falsch gemacht ? Wollte nur Spalte H kopieren ?
Hier der bisherige bisher komplette Code:
Sub Daten_alt_kopieren()
Dim wbNeu As Workbook
Dim wbAlt As Workbook
Rem hier alle Tabellen (Vorlage & Alt) eintragen
Dim wks_Grunddaten_Neu As Worksheet, wks_Grunddaten_Alt As Worksheet
Dim wks_Streckenkopf_Neu As Worksheet, wks_Streckenkopf_Alt As Worksheet
Rem Dim für Differenzberechnung
Dim wks_diff As Worksheet, Zeile_Diff As Long, Spalte As Long
Dim vAuswahl
Dim Zeile_Alt As Long, vWert_B, Zelle_Wert_B As Range
Dim VerzeichnisAktiv As String
Dim StatusCalc As Long
'Verzeichnis mit Alt-Dateien
Const VerzeichnisAlt As String = "C:\temp\Kalkulationstool"
Rem hier alle Tabellen der Vorlage gesetzt
Set wbNeu = ThisWorkbook
Set wks_Grunddaten_Neu = wbNeu.Worksheets("Grunddaten")
Set wks_Streckenkopf_Neu = wbNeu.Worksheets("Streck.- Ändern LP")
'Altdatei auswählen
VerzeichnisAktiv = VBA.CurDir 'aktives Verzeichnis merken
VBA.ChDir VerzeichnisAlt 'Verzeichnis mit Alt-Dateien setzen
vAuswahl = Application.Dialogs(xlDialogOpen).Show
If vAuswahl = False Then GoTo Beenden 'Öffnen-Dialog wurde abgebrochen
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set wbAlt = ActiveWorkbook
'hier werden alle Tabellen Alt gesetzt
Set wks_Grunddaten_Alt = wbAlt.Worksheets("Grunddaten")
Set wks_Streckenkopf_Alt = wbAlt.Worksheets("Streck.- Ändern LP")
'Kopieren von Standard Daten
With wbAlt.Worksheets("Grunddaten")
.Range("B3").Copy Destination:=wbNeu.Worksheets(.Name).Range("B3") 'Sachnummer
.Range("D3").Copy Destination:=wbNeu.Worksheets(.Name).Range("D3") 'Typ
.Range("B7").Copy Destination:=wbNeu.Worksheets(.Name).Range("B7") 'Nutzen
.Range("E7").Copy Destination:=wbNeu.Worksheets(.Name).Range("E7") 'E-Stand
.Range("B7").Copy Destination:=wbNeu.Worksheets(.Name).Range("B7") 'Nutzen
.Range("I7").Copy Destination:=wbNeu.Worksheets(.Name).Range("I7") 'Art
.Range("D9:F9").Copy Destination:=wbNeu.Worksheets(.Name).Range("D9:F9") 'Fepla
.Range("A15:J30").Copy Destination:=wbNeu.Worksheets(.Name).Range("A15:J30") 'Historie
.Range("D37:J56").Copy Destination:=wbNeu.Worksheets(.Name).Range("D37:J56") 'Zeitaufnahmen
End With
'Blatt "Streck.- Ändern LP" B abgleichen - Werte aus Spalten H & M:N von Alt nach Neu  _
kopieren
With wks_Streckenkopf_Alt
For Zeile_Alt = 17 To 53
'Wert in Altdatei-Spalte A
vWert_B = .Cells(Zeile_Alt, 2).Value
If vWert_B  "" Then
'Wert in neuer Datei Spalte B suchen
With wks_Streckenkopf_Neu
Set Zelle_Wert_B = .Range(.Cells(17, 2), .Cells(53, 2)) _
.Find(what:=vWert_B, LookIn:=xlValues, lookat:=xlWhole)
End With
If Zelle_Wert_B Is Nothing Then 'Wert in neuer Vorlage nicht vorhanden
If wks_diff Is Nothing Then
'Tabellenblatt für Abweichungen anlegen
Set wks_diff = wbNeu.Worksheets.Add(After:=wks_Grunddaten_Neu)
wks_diff.Name = "Streckenkopf-Diff"
'Spaltenbreiten in Differenzblatt an Alt-Datei anpassen
For Spalte = 1 To .Cells.SpecialCells(xlCellTypeLastCell).Column
wks_diff.Columns(Spalte).ColumnWidth = .Columns(Spalte).ColumnWidth
Next
End If
Zeile_Diff = Zeile_Diff + 1
.Rows(Zeile_Alt).Copy Destination:=wks_diff.Cells(Zeile_Diff, 2)
Else
'Werte aus Spalten H von Alt nach Neu kopieren
.Range(.Cells(Zeile_Alt, 13), .Cells(Zeile_Alt, 14)).Copy _
Destination:=wks_Streckenkopf_Neu.Cells(Zelle_Wert_B.Row, 13)
.Range(.Cells(Zeile_Alt, 8)).Copy _
Destination:=wks_Streckenkopf_Neu.Cells(Zelle_Wert_B.Row, 8)
End If
End If
Next
End With
Rem weitere Tabellenblätter einfügen...
'Altdatei wieder schliessen
wbAlt.Close savechanges:=False
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
Beenden:
VBA.ChDir VerzeichnisAktiv 'aktives Verzeichnis zurücksetzen
Set wbNeu = Nothing: Set wks_Grunddaten_Neu = Nothing: Set wks_T_Neu = Nothing
Set wks_diff = Nothing
Set wbAlt = Nothing: Set wks_Grunddaten_Alt = Nothing: Set wks_T_Alt = Nothing
End Sub

Anzeige
AW: Daten in neueVorlage übernehmen
09.08.2010 19:31:45
fcs
Hallo Stefan,
wenn du nur eine Zelle kopieren willst, dann fällt ".Range" beim Quellbereich weg.
           .Cells(Zeile_Alt, 8).Copy _
Destination:=wks_Streckenkopf_Neu.Cells(Zelle_Wert_B.Row, 8)
Excel interpretiert sonst den Inhalt der Zelle als Bereich, der kopiert werden soll. Das funktioniert nur, wenn dort Zelladdressen (z.B.: C10 oder C10:F32) oder Namen von Bereichen stehen.
Das sind leider die kleinen Häßlichkeiten unter VBA bei einigen Methoden und Funktionen, an die man sich erst gewöhnen muss - meistens die harte Tour, weil einem die Fehlermeldungen auch nicht immer einen Ansatz für die Lösung bieten.
Gruß
Franz
Anzeige
AW: Daten in neueVorlage übernehmen
09.08.2010 20:59:07
stefan
Hallo Franz,
danke dass du hier immer wieder Rede und Antwort stehst !
Super und nochmals DANKE
:-)
Stefan
AW: Daten in neueVorlage übernehmen
09.08.2010 21:54:48
stefan
Hallo nochmal (zum letzten mal für heute)
was muss ich machen, damit xls nicht abbricht , wenn eine Tabelle in der Vorlage vorhanden ist, aber in der Alten XLS wo ich mir die Daten ziehe gar nicht exsistiert ?
Gruß
Stefan
AW: Daten in neueVorlage übernehmen
09.08.2010 22:12:50
stefan
Frage unter offen eingestellt...
AW: Daten in neueVorlage übernehmen
10.08.2010 15:43:59
Stefan
erledigt
AW: manches erledigt sich halt doch durch Abwarten
10.08.2010 21:58:33
fcs
Hallo Stefan,
ich hatte die Beantwortung deiner Zusatzfrage noch für auf dem Plan.
So komm ich halt heute etwas früher ins Bett. ;-)
Gruß
Franz

146 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige