Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1228to1232
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

Datumsabgleich zwischen Quell- und Zieldatei

Datumsabgleich zwischen Quell- und Zieldatei
Dietmar
Hallo in die Runde,
vor längerer Zeit habe ich von Sepp einen VBA-Code zum Datenübertrag in ein auszuwählendes Sheet erhalten.
Diesen möchte ich nun gerne wie folgt weiterentwickeln:
Alle gegeneinander zu prüfenden Zellen enthalten ein Datum.
Zwischen der Quelldatei (dort im Tabellenblatt 'Fixdaten', Range("E5")) und der Zieldatei (die nur aus einemTabellenblatt besteht) dort in den Zellen C5 und F5 soll eine Datumsüberprüfung stattfinden, die den Fortgang des Codes stoppt oder weiter zulässt. Näheres siehe auskommentierter Text an der entsprechenden Stelle im Code.
Ich trau mich da nicht ran, weil ich den Code nicht vermasseln will. Er läuft nämlich super gut durch
Vielen Dank für jede Hilfe!
Viele Grüße
Dietmar aus Aachen
Hier nun der Code mit Erläuterungen an der entsprechenden Stelle:

Option Explicit
Sub DatenUebertrag()
Dim strFile As String, strNewName As String
Dim objWB As Workbook, objWS As Worksheet, objTarget As Worksheet
Dim rng As Range, rngF As Range, rngC As Range
Dim blnOpen As Boolean
Dim lngRow As Long, lngLast As Long, lngN As Long
Dim varResult As Variant
On Error GoTo ErrExit
GMS
ChDrive "C"
ChDir "C:\Testordner\01_Testunterordner"
strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm")
If strFile = "Falsch" Or strFile = ThisWorkbook.FullName Then GoTo ErrExit
blnOpen = IsOpen(strFile)
If blnOpen Then
Set objWB = Workbooks(Mid(strFile, InStrRev(strFile, "\") + 1))
Else
Set objWB = Workbooks.Open(strFile)
End If
Set objTarget = objWB.Sheets(1)
For Each objWS In ThisWorkbook.Worksheets
With objWS
Select Case .Name
'>>>>>>>> hier soll nun die Prüfung folgen >>>>>
'In der Quelldatei steht im Tabellenblatt Fixdaten.Range(„E4“) ein beliebiges Datum
'Die auszuwählende Zieldatei besteht nur aus einem Tabellenblatt.
'In Zieldatei.Range(„D5“) steht ein festgelegtes Datum und
'in Zieldatei.Range(„F5“) steht ein festgelegtes Datum (erster und letzter Tag einer Woche)
'VOR der Ausführung der nachfolgenden Befehle soll geprüft werden:
'Wenn das Datum in Quelldatei.Range(„E4“) kleiner ist als das Datum in Zieldatei.Range(„D5“)
'ODER größer ist als das Datum in 'Zieldatei.Range(„F5“), dann soll ein Hinweisfenster  _
erscheinen und darauf 'hinweisen. 'Mit JA oder NEIN soll die 'Möglichkeit gegeben werden abzubrechen oder weiterzumachen.
'  "" Then
varResult = Application.Match(rngC.Offset(0, -1), rngF, 0)
If IsNumeric(varResult) Then
objTarget.Cells(varResult + 4, 2) = rngC.Value
End If
End If
Next
'( … )  weitere  Übertragungsbefehle entfernt für Nachfrage bei Herber.de
ErrExit:
With Err
If .Number = 1004 And .Description Like "*schreibgeschützt*" Then
.Clear
Resume Next
End If
If .Number  0 Then MsgBox .Number & vbLf & vbLf & .Description, vbExclamation, "Fehler"
End With
GMS True
Set objWB = Nothing
Set objWS = Nothing
Set rng = Nothing
Set rngF = Nothing
Set rngC = Nothing
End Sub
Private Sub GMS(Optional ByVal Modus As Boolean = False)
Static lngCalc As Long
With Application
.ScreenUpdating = Modus
.EnableEvents = Modus
.DisplayAlerts = Modus
.EnableCancelKey = IIf(Modus, 1, 0)
If Not Modus Then lngCalc = .Calculation
If Modus And lngCalc = 0 Then lngCalc = -4105
.Calculation = IIf(Modus, lngCalc, -4135)
.Cursor = IIf(Modus, -4143, 2)
End With
End Sub
Private Function IsOpen(ByVal WBFullName As String) As Boolean
Dim objWB As Workbook
For Each objWB In Application.Workbooks
If objWB.FullName = WBFullName Then
IsOpen = True
Exit For
End If
Next
End Function

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datumsabgleich zwischen Quell- und Zieldatei
21.09.2011 08:34:26
fcs
Hallo Dietmar,
die entsprechende Prüfung muss vor der "Select Case .Name"-Zeile stehen.
Gruß
Franz

  For Each objWS In ThisWorkbook.Worksheets
With objWS
'>>>>>>>> hier soll nun die Prüfung folgen >>>>>
With Fixdaten 'oder ThisWorkbook.Worksheets("Fixdaten")
If .Range("E4").Value  objTarget.Range("F5").Value Then
If MsgBox("Das Datum """ & Format(.Range("E4").Value, "YYYY-MM-DD") _
& """ in der Tabelle ""Fixdaten"" ist nicht zwischen Startdatum (" _
& Format(objTarget.Range("D5").Value, "YYYY-MM-DD") _
& ") und Endedatum (" & Format(objTarget.Range("F5").Value, "YYYY-MM-DD") _
& ") im Zielblatt in Datei """ & objWB.Name & """" & vbLf & vbLf _
& "Daten trotzdem übertragen?", _
vbQuestion + vbYesNo + vbDefaultButton2, "Übertragung Daten") = vbNo Then
Exit For 'For-Next-Schleife verlassen
End If
End If
End With
Select Case .Name

Anzeige
super, aber noch nicht ganz
21.09.2011 12:41:23
Dietmar
Hallo Franz,
herzlichen Dank für Deine Lösung!
Ich habe die Überprüfung mit >> With ThisWorkbook.Worksheets("Fixdaten") Allerdings läuft der Code nur bis zur Msgbox durch.
Danach hängt er sich auf. Egal ob ich >JANein Abgesehen davon, dass der Code auch bei >JANein Reicht es eigentlich aus, nur die For-Schleife zu unterbrechen oder müsste man bei >Nein Wenn ich den Baustein rausnehme, läuft der Code wieder ohne Probleme durch.
Ich habe nun zig Möglichkeiten durchprobiert, um den Hänger wegzubekommen, leider ohne Erfolg.
Hättest du noch eine Idee?
Viele Grüße
Dietmar
Anzeige
AW: super, aber noch nicht ganz
21.09.2011 15:26:04
fcs
Hallo Dietmar,
wenn es bei "Nein" einen Hänger gibt, dann steht zwischen Next und ErrExit: noch irgendetwas was stört.
Bei "Ja" gibt es keinen richtigen Hänger, sondern es wird bei jedem Tabellenblatt nochmals die MsgBox angezeigt.
Die Prüfung muss noch vor der For-Anweisung stehen und bei Nein nach ErrExit springen.
Exit Sub ist nicht sinnvoll, da der Code nach der Fehlerprüfung nicht ausgeführt wird.
Da es eine Prüfung gibt, ob die Zieldatei geöfnet ist, sollte Sie auch nur wieder geschlossen werden, wenn sie vom Makro geöffnet wurde.
Makro scheut dann wie folgt aus.
Gruß
Franz

Sub DatenUebertrag()
Dim strFile As String, strNewName As String
Dim objWB As Workbook, objWS As Worksheet, objTarget As Worksheet
Dim rng As Range, rngF As Range, rngC As Range
Dim blnOpen As Boolean
Dim lngRow As Long, lngLast As Long, lngN As Long
Dim varResult As Variant
On Error GoTo ErrExit
GMS
ChDrive "C"
ChDir "C:\Testordner\01_Testunterordner"
strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
"*.xls; *.xlsx; *.xlsm")
If strFile = "Falsch" Or strFile = ThisWorkbook.FullName Then GoTo ErrExit
blnOpen = IsOpen(strFile)
If blnOpen Then
Set objWB = Workbooks(Mid(strFile, InStrRev(strFile, "\") + 1))
Else
Set objWB = Workbooks.Open(strFile)
End If
Set objTarget = objWB.Sheets(1)
'>>>>>>>> hier soll nun die Prüfung folgen >>>>>
With ThisWorkbook.Worksheets("Fixdaten")
If .Range("E4").Value  objTarget.Range("F5").Value Then
If MsgBox("Das Datum """ & Format(.Range("E4").Value, "YYYY-MM-DD") _
& """ in der Tabelle ""Fixdaten"" ist nicht zwischen Startdatum (" _
& Format(objTarget.Range("D5").Value, "YYYY-MM-DD") _
& ") und Endedatum (" & Format(objTarget.Range("F5").Value, "YYYY-MM-DD") _
& ") im Zielblatt in Datei """ & objWB.Name & """" & vbLf & vbLf _
& "Daten trotzdem übertragen?", _
vbQuestion + vbYesNo + vbDefaultButton2, "Übertragung Daten") = vbNo Then
If blnOpen = False Then objWB.Close savechanges:=False 'Zieldatei schliessen
GoTo ErrExit 'For-Next-Schleife überspringen
End If
'Hier geht es bei Ja Weiter
End If
End With
For Each objWS In ThisWorkbook.Worksheets
With objWS
Select Case .Name
Case "PersonalDaten"
Set rng = .Range("B2:B" & .Cells(Rows.Count, 2).End(xlUp).Row)
Set rngF = objTarget.Range("A5:A1000")
For Each rngC In rng
If rngC  "" Then
varResult = Application.Match(rngC.Offset(0, -1), rngF, 0)
If IsNumeric(varResult) Then
objTarget.Cells(varResult + 4, 2) = rngC.Value
End If
End If
Next
' Was zwischen HIER und .... ----->
'( … )  weitere  Übertragungsbefehle entfernt für Nachfrage bei Herber.de
End Select                                        'zum Testen eingfügt
'( … )  weitere ?
End With                                          'zum Testen eingfügt
Next 'objWS                                         'zum Testen eingfügt
'------> HIER bei dir alles passiert weiss ich ja nicht
'Hier geht es bei Nein weiter
ErrExit:
With Err
If .Number = 1004 And .Description Like "*schreibgeschützt*" Then
.Clear
Resume Next
End If
If .Number  0 Then MsgBox .Number & vbLf & vbLf & .Description, vbExclamation, "Fehler"
End With
GMS True
Set objWB = Nothing
Set objWS = Nothing
Set rng = Nothing
Set rngF = Nothing
Set rngC = Nothing
End Sub

Anzeige
Perfektissimo
21.09.2011 23:16:02
Dietmar
Hallo Franz,
und wieder mal bin ich beeindruckt!
Ich hab's jetzt rauf und runter getestet und was soll ich sagen: Dein Code läuft jetzt in beiden Prüfvarianten absolut perfekt durch!
Herzlichen Dank!
Viele Grüße
Dietmar aus Aachen
AW: Perfektissimo
22.09.2011 06:25:48
Hajo_Zi
Hallo Ditemar,
Warum Offen?

Sorry ...
22.09.2011 15:31:24
Dietmar
Hallo Hajo,
natürlich nicht offen. Hab nicht aufgepasst.
VG
Dietmar

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige