Datenimport VBA Code anpassen
#1
Hallo Forum,

mit folgendem Code lese den Bereich A2:E1000 des Tabellenblattes (Data) aus der Arbeitsmappe (Data012024) aus,
und lasse die Daten (keine Formeln sondern nur Werte) in das Tabellenblatt (Datenimport) der aktuellen Arbeitsmappe schreiben.
Das funktioniert mit diesen Code auch bestens.
Nun suche ich eine Lösung per Dateidialog eine Arbeitsmappe auszuwählen um aus dieser den Bereich A2:E1000 des Tabellenblattes (Data)
auszulesen und in das Tabellenbaltt (Datenimport) der aktuellen Arbeitsmappe zu schreiben. 
In allen Arbeitsmappen die ich einlesen möchte befindet sich das Tabellenblatt (Data) mit der gleiche Datenstrucktur.
Bei jedem Import sollen die Daten des Tabellenblatt (Datenimport) der aktuellen Arbeitsmappe überschrieben werden,
da die Daten aus dem Tabellenblatt (Datenimport) nach dem Import kopiert und zur Weiterverarbeitung in ein anderes Tabellenblatt eingefügt wird.

Besten Dank im Voraus
omron2003

Code:
Option Explicit

'----------------------------------------------------------------------------------------------------------------------
'
'** Variabelen dklaration für den Datenimport
'
'----------------------------------------------------------------------------------------------------------------------
Const strSheetQ As String = "Data" '** Diese Tabelle wird ausgelesen"
Const strSheetZ As String = "Datenimport" '** Die Tabelle in dieser Datei, in welche die Daten übertragen werden
Const strRange As String = "A2:E1000" '** Der Bereich wird ausgelesen
Const strFile As String = "C:\Datenimport2024\Data012024.xlsx" '** Pfad und Datei

'----------------------------------------------------------------------------------------------------------------------
'
'** Datenimport aus geschlossener Excelmappe (Data012024.xlsx)
'
'----------------------------------------------------------------------------------------------------------------------

Public Sub ExSalesDatenHolen()
'** Daten aus geschlossener Datei per Zell-Verknüpfung auslesen und Formel zur externen Datei erzeugen
With ThisWorkbook.Worksheets(strSheetZ)
'** Eintragen der Formel
.Range(strRange).Formula = "='" & Mid(strFile, 1, InStrRev(strFile, "\")) & "[" & _
Mid(strFile, InStrRev(strFile, "\") + 1) & "]" & strSheetQ & "'!" & strRange
End With
'** Umwandeln der Formel in fixe Werte
Range(strRange).Value = Range(strRange).Value
End Sub
Antworten Top
#2
Moin,

das wäre etwas, dass ich gar nicht über VBA, sondern über Powerquery lösen würde. Aber sei es drum, mit der Function Application.GetOpenFilename() kannst du eine Datei auswählen, die dir als String zurückgegeben wird. Du musst dann nur die Konstante zur Variablen machen:
Code:
strFile = Application.GetOpenFilename()

Viele Grüße
derHöpp

Nachtrag: Du hast übrigens in vielen deiner letzten Beiträge vergessen, eine Rückmeldung zu geben. Ich hoffe, das ist hier nicht so.
Antworten Top
#3
Hallo


so?

Code:
'----------------------------------------------------------------------------------------------------------------------
'
'** Variabelen dklaration für den Datenimport
'
'----------------------------------------------------------------------------------------------------------------------
Const strSheetQ As String = "Data" '** Diese Tabelle wird ausgelesen"
Const strSheetZ As String = "Datenimport" '** Die Tabelle in dieser Datei, in welche die Daten übertragen werden
Const strRange As String = "A2:E1000" '** Der Bereich wird ausgelesen
Const strPath As String = "C:\Datenimport2024\"
   
'----------------------------------------------------------------------------------------------------------------------
'
'** Datenimport aus geschlossener Excelmappe (Data012024.xlsx)
'
'----------------------------------------------------------------------------------------------------------------------

Public Sub ExSalesDatenHolen()
    '** Daten aus geschlossener Datei per Zell-Verknüpfung auslesen und Formel zur externen Datei erzeugen
    Dim Dlg As FileDialog, strFile As String, strVorgabe As String
    Set Dlg = Application.FileDialog(msoFileDialogFilePicker) 'Datei wählen
   
    strVorgabe = "Data*.xlsx"
    With Dlg
        .AllowMultiSelect = False
        .InitialFileName = strPath & strVorgabe
        .InitialView = msoFileDialogViewDetails 'Anzeige des Dialogs - die Dateien als Detail
        .Title = "Importdatei auswählen"
    End With
   
    If Dlg.Show = True Then
        strFile = Dlg.SelectedItems(1)
        With ThisWorkbook.Worksheets(strSheetZ)
            '** Eintragen der Formel
            .Range(strRange).Formula = "='" & Mid(strFile, 1, InStrRev(strFile, "\")) & "[" & _
            Mid(strFile, InStrRev(strFile, "\") + 1) & "]" & strSheetQ & "'!" & strRange
        End With
        '** Umwandeln der Formel in fixe Werte
        Range(strRange).Value = Range(strRange).Value
    End If
End Sub

LG UweD
Antworten Top
#4
Oder:

Code:
Sub M_snb()
  With Application.FileDialog(3)
    If .Show Then Sheets(1).QueryTables.Add("ODBC;DSN=Excel_xlsb;DBQ=" & .SelectedItems(1), Sheets(1).Range("A1"), "SELECT * FROM `Data$`").Refresh
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Zitat:da die Daten aus dem Tabellenblatt (Datenimport) nach dem Import kopiert und zur Weiterverarbeitung in ein anderes Tabellenblatt eingefügt wird.

Abgesehen davon, dass ich das auf jeden Fall mit Power Query machen würde, stellt sich mit die Frage, ob denn dieser Zwischenschritt notwendig ist, oder ob nicht gleich in das "andere Tabellenblatt" eingefügt werden könnte.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste