Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Daten aus einer anderen Mappe synchronisieren

Betrifft: Daten aus einer anderen Mappe synchronisieren von: jafa
Geschrieben am: 27.08.2014 14:55:46

Hallo,

ich habe zwei Mappen, eine für die Eingabe (92319.xlsm) und eine zweite für die Überwachung (92320.xlsm). Die Daten aus der Eingabe sollen automatisch mit der ersten Tabelle der Überwachung synchronosiert werden. Ich habe mich schon an einer VBA-Lösung versucht, aber meine Kenntnisse sind leider zu gering um zu einem funktionierenden Ergebniss zu kommen.
Ich habe die Dateien mit hochgeladen.

https://www.herber.de/bbs/user/92319.xlsm

https://www.herber.de/bbs/user/92320.xlsm

In der Datei Eingabe ist ebenfalls eine VBA-Lösung hinterlegt, dass bei Eingabe in Spalte B ein Datum in A erzeugt, auf das nicht zugegriffen werden kann. Ich möchte aber alle Daten, die in den Spalten A bis K stehen automatisch in die Datei Überwachung übertragen haben.
Für Hilfe bin ich sehr dankbar.

Mit freundlichen Grüßen...

  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: fcs
Geschrieben am: 27.08.2014 16:27:07

Hallo Jafa,

synchronisieren heist bei dir -wenn ich es richtig verstanden habe- dass die Überwachungsdatei auf den Stand der Eingabedatei gebracht wird. D.h. nach dem Synchroniseren haben beide Dateien den gleichen Inhalt.

Wann soll denn synchronisiert werden?
Nach jeder Eingabe? Das wäre der leichte Wahnsinn.
Nach Anwender-Befehl (Schaltfläche)?
Vor dem Schließen der Eingabedatei?
Vor- oder nach dem Speichern der Eingabedatei?
Zeitgesteuert in bestimmten Abständen?

Wie soll denn synchronisiert werden?
Einzelzeilenvergleich? Kann dann Auftrags-Nr+Positionsnr. als Datensatz-ID verwendet werden?

oder
Inhalt in Überwachung löschen und Inhalt aus Eingabe nach Überwachung kopieren?

Gruß
Franz


  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: jafa
Geschrieben am: 27.08.2014 17:32:46

Hallo Franz,

danke für die Antwort.
Ja, nach dem synchronisieren sollen Überwachungsdatei und Eingabdatei auf dem gleichen Stand sein.
Es wäre nicht schlecht, wenn dies über eine Schaltfläche/Button in der Überwachungsdatei geschieht. Die Aktualisierung kann/sollte erst dann erfolgen, wenn die Eingabedatei gespeichert bzw. geschlossen ist und dann der Button benutzt wird.
Als Datensatz-ID kann die Auftrags-Nr. verwendet werden und neue Eingaben sollten auf die vorherigen in der Überwachungsdatei folgen.
Danke nochmals.

Mit freundlichen Grüßen...


  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: fcs
Geschrieben am: 28.08.2014 11:01:01

Hallo Jafa,

hier ein Makro, dass die Daten in der Überwachungsdatei mit den Daten in der Eingabedatei abgleicht.
Als Schaltfläche fügst du im Tabellenblatt eine Schaltfläche aus den Formular-Steuerelementen ein und weist der Schaltfläche das Makro zu.

Gruß
Franz

'Makro in einem allgemeinen Modul der Überwachungsarbeitsmappe
Sub DatenHolenAusEingabeMappe()
    Dim Zeile_Q As Long, Spalte_Q As Long
    Dim ZeileMax As Long
    Dim Zeile_Z As Long
    Dim rngTreffer As Range, rngSuche As Range, strAdr1 As String, bolNeu As Boolean
    Dim varPos, varPosNr
    Dim wkbQuelle As Workbook, wksQuelle As Worksheet, strQuelle As String, _
        strVerzQuelle As String
    Dim wkbZiel As Workbook, wksZiel As Worksheet
    
    strQuelle = "Eingabe.xlsm" 'Name der Eingabe-Datei            - ggf. anpassen
    strVerzQuelle = ThisWorkbook.Path 'Verzeichnis Eingabe-Datei  - ggf.anpassen
    'prüfen, ob Eingabedatei geöffnet ist
    For Each wkbQuelle In Application.Workbooks
      If LCase(wkbQuelle.Name) = LCase(strQuelle) Then
        MsgBox "Die Eingabe-Datei ist noch geöffnet, bitte Datei erst speichern und schließen"
        wkbQuelle.Activate
        GoTo Beenden
      End If
    Next
    
    Set wkbZiel = ThisWorkbook
    Set wksZiel = wkbZiel.Worksheets(1)
    
    'Quelle schreibgeschützt öffnen
    Set wkbQuelle = Workbooks.Open(strVerzQuelle & "\" & strQuelle)
    Set wksQuelle = wkbQuelle.Worksheets(1)
    
    With Application
      .EnableEvents = False
      .ScreenUpdating = False
    End With
    
    With wksQuelle
      ZeileMax = .Cells(.Rows.Count, 2).End(xlUp).Row
      'Zeilen in Quelle (Eingabeblatt) abarbeiten
      For Zeile_Q = 6 To ZeileMax
        varPos = .Cells(Zeile_Q, 2).Text
        varPosNr = .Cells(Zeile_Q, 3).Value
        bolNeu = True
        With wksZiel
          Zeile_Z = .Cells(.Rows.Count, 2).End(xlUp).Row
          If Zeile_Z > 5 Then
            Set rngSuche = .Range(.Cells(6, 2), .Cells(Zeile_Z, 2))
            'Position in Zieltabelle suchen
            Set rngTreffer = rngSuche.Find(what:=varPos, LookIn:=xlValues, _
                    lookAT:=xlWhole)
        
            If rngTreffer Is Nothing Then
                'Position ist noch nicht vorhanden
                Zeile_Z = Zeile_Z + 1
            Else
                strAdr1 = rngTreffer.Address '1. Fundstelle merken
                Do
                  If rngTreffer.Offset(0, 1) = varPosNr Then
                    'Position und Positions-Nr. ist vorhanden
                    Zeile_Z = rngTreffer.Row
                    bolNeu = False
                    Exit Do
                  End If
                  'Suche nach Position wiederholen
                  Set rngTreffer = rngSuche.FindNext(After:=rngTreffer)
                  If rngTreffer.Address = strAdr1 Then
                    'Position und Positions-Nr. ist nicht vorhanden
                    Zeile_Z = Zeile_Z + 1
                    Exit Do
                  End If
                Loop
            End If
          Else
            '1. Eintrag in Überwachungsblatt
            Zeile_Z = 6
          End If
        End With
        'Werte Spalte_Q A bis K ( 1 bis 11) nach Ziel übertragen
        For Spalte_Q = 1 To 11
          Select Case Spalte_Q
            Case 2, 3
              If bolNeu = True Then
                wksZiel.Cells(Zeile_Z, Spalte_Q).Value = .Cells(Zeile_Q, Spalte_Q).Value
              End If
            Case Else
              wksZiel.Cells(Zeile_Z, Spalte_Q).Value = .Cells(Zeile_Q, Spalte_Q).Value
          End Select
        Next Spalte_Q
      Next Zeile_Q
    End With
    
    wkbQuelle.Close savechanges:=False
    
    'Daten in Zieltabelle sortieren _
        aufsteigend nach Eingabedatum, aufsteigend nach Auftrags-/Positionsnummer
    With wksZiel
      ZeileMax = .Cells(.Rows.Count, 2).End(xlUp).Row
      If ZeileMax > 6 Then
        With .Range(.Cells(5, 1), .Cells(ZeileMax, 11))
          .Sort Key1:=.Range("A1"), Order1:=xlAscending, _
              Key2:=.Range("B1"), Order2:=xlAscending, _
              Key3:=.Range("C1"), Order3:=xlAscending, Header:=xlYes
        End With
      End If
    End With

    
Beenden:
    With Application
      .EnableEvents = True
      .ScreenUpdating = True
    End With
    Set wkbZiel = Nothing: Set wksZiel = Nothing: Set wkbQuelle = Nothing: Set wksQuelle =  _
Nothing
    Set rngSuche = Nothing: Set rngTreffer = Nothing
End Sub



  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: jafa
Geschrieben am: 28.08.2014 11:29:35

Hallo Franz,

vielen Dank für die Antwort und das Makro funktioniert super!!!

Mit freundlichen Grüßen...


  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: jafa
Geschrieben am: 28.08.2014 15:25:08

Hallo Franz,

ich hätte da noch eine Frage. Ist es möglich den Code so zu erweitern, dass man mit ihm auf weitere Mappen zugreifen kann oder ist dies nicht so einfach möglich?!
Wenn ja, was müsste dazu an welcher Stelle eingefügt werden?
Danke nochmals für die Hilfe!

Mit freundlichen Grüßen...


  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: fcs
Geschrieben am: 28.08.2014 16:08:45

Hallo Jafa,

Ist es möglich den Code so zu erweitern, dass man mit ihm auf weitere Mappen zugreifen kann oder ist dies nicht so einfach möglich?!
Ja, wenn du die Dateinamen/Verzeichnisse und Blattnamen kennst, dann ist das Öffnen und Bearbeiten/Verarbeiten weiterer Dateien möglich.
"Einfach" ist relativ - für mich wahrscheinlich einfach, für dich im Moment schwierig bis unmöglich.


Wenn ja, was müsste dazu an welcher Stelle eingefügt werden?
Das kann man nicht pauschal sagen. Das hängt dann davon ab wie sich Zieldatei/-tabelle und Quelldatei/-tabelle bei den Aktionen ändern.

Gruß
Franz

Gruß
Franz


  

Betrifft: AW: Daten aus einer anderen Mappe synchronisieren von: jafa
Geschrieben am: 29.08.2014 14:17:13

Ok, danke. Mit der Antwort ist mir fürs erste geholfen.

Mit freundlichen Grüßen...


 

Beiträge aus den Excel-Beispielen zum Thema "Daten aus einer anderen Mappe synchronisieren"