Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Hilfe: Makro
12.08.2022 10:25:43 Radoras
NotSolved

Ansicht des Beitrags:
Von:
Radoras
Datum:
12.08.2022 10:25:43
Views:
641
Rating: Antwort:
  Ja
Thema:
VBA-Hilfe: Makro

Hallo zusammen,

ich als Möchtegern-VBA-Programmierer hänge an einer etwas komplexeren Aufgabe fest & bräuchte etwas Hilfe von etwas erfahreneren anwendern:

Der Code den ich mir zusammengestellt/gebastelt habe soll folgende Aufgabe erfüllen (was soweit klappt):

- eine Auswählbare Anzahl von Dateien in einem Ordner wählen (täglich aktualisierte, hinzukommende Dateien die in einen Sammelordner gespeichert werden)
- diese Dateien untereinander im selben Schema verketten
- die verketteten Dateien in einem Excel-Sheet ausgeben (als "Datenbank" für andere Formeln, die mit z.B. S-Verweis darauf zugreifen sollen)
 

Das habe ich mit folgendem Code soweit auch hinbekommen:

__________________________________________________________________________________________________________________________

Sub File_Update ()

On Error GoTo errExit
Dim WBQ As Workbook
Dim WBZ As Workbook
Dim varDateien As Variant
Dim lngAnzahl As Long
Dim lngLastQ As Long
Dim numberrows As Integer
Dim countrows As Integer
Dim i As Long
Dim sZeile As Long             
Dim eZeile As Long             

    Set WBZ = ThisWorkbook

    WBZ.Worksheets(1).Range("A1:IV65536").ClearContents

    varDateien = _

    Application.GetOpenFilename("Datei (*.xl*),*.xls", False, "Please mark selected file(s)", False, True)

    With Application

        .ScreenUpdating = False

        .EnableEvents = False

        .Calculation = xlCalculationManual

    End With

    For lngAnzahl = LBound(varDateien) To UBound(varDateien)

        Set WBQ = Workbooks.Open(Filename:=varDateien(lngAnzahl))

        ThisWorkbook.Activate

        lngLastQ = WBQ.Worksheets(1).Range("A1").End(xlDown).Row

        With WBZ.Worksheets(1)

            sZeile = .Cells(Rows.Count, "C").End(xlUp).Row + 1

            WBQ.Worksheets(1).Range("A15:Y" & lngLastQ).Copy

                .Range("C" & sZeile).PasteSpecial Paste:=xlPasteValues

            eZeile = .Cells(Rows.Count, "C").End(xlUp).Row

            .Range("AA" & sZeile).AutoFill Destination:=.Range("AA" & sZeile & ":AA" & eZeile), Type:=xlFillCopy

        End With

        WBQ.Close

 

    Next lngAnzahl

    With Application

        .ScreenUpdating = True

        .EnableEvents = True

        .Calculation = xlCalculationAutomatic

        .CutCopyMode = False

    End With

    Range("A1").Select

    MsgBox "Es wurden " & UBound(varDateien) & " Dateien zusammengefügt.", 64

Exit Sub

errExit:

With Application

  .ScreenUpdating = True

  .EnableEvents = True

  .Calculation = xlCalculationAutomatic

End With

 

If Err.Number = 13 Then

MsgBox "Es wurde keine Datei ausgewählt"

  Else

MsgBox "Es ist ein Fehler aufgetreten!" & vbCr _

& "Fehlernummer: " & Err.Number & vbCr _

& "Fehlerbeschreibung: " & Err.Description

End If

End Sub
_______________________________________________________________________________________________________________________

 

Was ich allerdings versuche hinzubekommen, aber nicht sicher bin ob/wie ich das einbauen könnte wäre:
eine (in jeder Datei gleich positionierte) Kennummer aus Zelle "D8" kopieren & für jede Tabelle in einer variablen Anzahl von Reihen vor Spalte A einfügen bevor die Dateien zusammengefügt werden.

Hintergrund ist, dass zu jeder Kennummer (Zelle D8) mehrere Messwerte gehören, die aber je nach Tabelle in unterschiedlicher Anzahl vorkommen (z.B. Tabelle A mit Kennummer "1234" hat 2 Messwerte - in Zeilen 11 & 12 der Quelldatei - , während Tabelle B mit Kennummer "5678" 3 Messwerte in Zeilen 11 - 13 hat); diese Messwerte müssen für spätere Verwendung jeweils der Kennummer zugeordner werden (aktuell angedacht z.B. per S-Verweis.

In der "fertigen" Tabelle mit allen Dateien sind die ursprünglichen Zellenwerte um 2 Spalten nach rechts versetzt (ursprüngliche Werte aus A-G eingefügt in  C-I), also müsste die Kennummer (Zelle D8 der Ursprungsdatei) in der "neuen" Spalte B vor den Messwerten, die ab Zeile 11 anfangen, mit letzter Zeile variabel (abhängig von Anzahl der Messwerte).

- Meine Lösungsansätze waren z.B. mit Nutzung der Formel "COUNTA" (dadurch die Anzahl der Messwert-Zeilen, die einen Eintrag haben ermitteln) &    um diese Anzahl an Zellen nach unten zu kopieren

Allerdings kann ich mir nicht herleiten, wie ich das im Code verbauen könnte & wie/ob es mit dem Setup möglich wäre, alle Quelldateien entsprechend anzupassen & dann in der neuen Form zusammenzufügen (oder während des Kopier-Prozesses die Änderungen vorzunehmen), da in den Quelldateien vor den Messwerten noch keine freie Spalte ist, um die Kennummer davor anzusetzen.

Vielen Dank im Voraus für jegliches Feedback!

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot VBA-Hilfe: Makro
12.08.2022 10:25:43 Radoras
NotSolved