Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1436to1440
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

VBA Code zum Kopieren aus geschlossenen Dateien

VBA Code zum Kopieren aus geschlossenen Dateien
13.07.2015 20:00:04
WalterK
Hallo,
mit einem EinleseCode aus dem Internet und der dazu gehörigen Function (siehe unten) funktioniert das Einlesen aus geschlossenen Dateien bestens. Allerdings wird die 1. Zeile, also die Überschriftenzeile verschluckt.
Ich vermute, dass es an der Function liegt, weil ich bei der Bereichsangabe im Einlesecode nur A:Z also ganze Spalten angegeben habe.

Public Function ExcelTable(ByRef Path As String, ByRef SourceRange As String) As Object
Dim SQL As String
Dim Con As String
SQL = "select * from [" & SourceRange & "]"
If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & Path & ";"
ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Extended Properties=""Excel 12.0;HDR=YES"";" _
& "Data Source=" & Path & ";"
Else
Exit Function
End If
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 3, 1
End Function
Danke für die Hilfe und Servus, Walter

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code zum Kopieren aus geschlossenen Dateien
13.07.2015 20:06:42
Sepp
Hallo Walter,
das liegt nicht an der Funktion, sondern wahrscheinlich daran, dass .CopyFromRecordSet ... verwendet wird. Im Reccordset sind die Spaltenköpfe aber nicht mit dabei, sondern nur die Daten.
Zeig mal den Code zum Einlesen.
Gruß Sepp

AW: VBA Code zum Kopieren aus geschlossenen Dateien
13.07.2015 20:18:26
WalterK
Hallo Sepp, hier mein gesamter Code:
Option Explicit
Sub Import_XLS()
'    Sheets("Infofenster").Select
Application.ScreenUpdating = False
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
.Cursor = xlWait
End With
Sheets("A_Xls_Export").Range("A:BZ").ClearContents
Sheets("B_Xls_Export").Range("A:BZ").ClearContents
Sheets("C_Xls_Export").Range("A:BZ").ClearContents
Sheets("D_Xls_Export").Range("A:BZ").ClearContents
Dim arrStrings(3, 1) As Variant
Dim Intc As Integer
Dim strPath As String
Dim strFile As String
Dim strTab As String
arrStrings(0, 0) = "A_Xls_Export"
arrStrings(0, 1) = "A_Xls_Export.xls"
arrStrings(1, 0) = "B_Xls_Export"
arrStrings(1, 1) = "B_Xls_Export.xls"
arrStrings(2, 0) = "C_Xls_Export"
arrStrings(2, 1) = "C_Xls_Export.xls"
arrStrings(3, 0) = "D_Xls_Export"
arrStrings(3, 1) = "D_Xls_Export.xls"
For Intc = 0 To UBound(arrStrings)
Sheets(arrStrings(Intc, 0)).Range("A1:IV65536").ClearContents
Dim IntcPfad As String
Dim IntcDateiname As String
Dim IntcBlatt As String
Dim IntcZellen As String
Dim wsTemp As Worksheet
Set wsTemp = ActiveWorkbook.Worksheets.Add(After:=ActiveWorkbook.Worksheets( _
ActiveWorkbook.Worksheets.Count))
wsTemp.Name = "TemporäresBlatt"
IntcPfad = "D:\___XLS_EXPORTE\" 'Datenarbeitsmappe
IntcDateiname = arrStrings(Intc, 1)
IntcBlatt = "Sheet0"
Dim objADO As Object
Dim strFileGesamt As String, strRef2 As String
strFileGesamt = IntcPfad & IntcDateiname
strRef2 = "Sheet0$A:Z" 'normale Bereichsangabe unbedingt MIT Tabellenname & $-Zeichen
Set objADO = ExcelTable(strFileGesamt, strRef2)
wsTemp.Range("A1").CopyFromRecordset objADO
objADO.Close
If wsTemp.Range("F1") = "MitgliedNEU" Then
wsTemp.Columns("F:G").Delete
End If
If wsTemp.Range("H1") = "Adresse2" Then
wsTemp.Columns("H:H").Delete
End If
wsTemp.Columns("A:Z").Copy
Worksheets(arrStrings(Intc, 0)).Range("A1").PasteSpecial (xlPasteAll)
wsTemp.Delete
Next
With Application
.StatusBar = False
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.Cursor = xlDefault
End With
End Sub
Public Function ExcelTable(ByRef Path As String, ByRef SourceRange As String) As Object
Dim SQL As String
Dim Con As String
SQL = "select * from [" & SourceRange & "]"
If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & Path & ";"
ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Extended Properties=""Excel 12.0;HDR=YES"";" _
& "Data Source=" & Path & ";"
Else
Exit Function
End If
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 3, 1
End Function
Danke und Servus, Walter

Anzeige
AW: VBA Code zum Kopieren aus geschlossenen Dateien
13.07.2015 20:26:32
Sepp
Hallo Walter,
Spaltennamen in Zeile 1, daten ab A2.
Sub Import_XLS()
  'Deklarationen gehören IMMER an den Anfang des Modules!
  Dim arrStrings(3, 1) As Variant
  Dim Intc As Integer
  Dim strPath As String
  Dim strFile As String
  Dim strTab As String
  Dim lngI As Long
  
  ' Sheets("Infofenster").Select
  Application.ScreenUpdating = False
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
    .Cursor = xlWait
  End With
  
  Sheets("A_Xls_Export").Range("A:BZ").ClearContents
  Sheets("B_Xls_Export").Range("A:BZ").ClearContents
  Sheets("C_Xls_Export").Range("A:BZ").ClearContents
  Sheets("D_Xls_Export").Range("A:BZ").ClearContents
  
  arrStrings(0, 0) = "A_Xls_Export"
  arrStrings(0, 1) = "A_Xls_Export.xls"
  
  arrStrings(1, 0) = "B_Xls_Export"
  arrStrings(1, 1) = "B_Xls_Export.xls"
  
  arrStrings(2, 0) = "C_Xls_Export"
  arrStrings(2, 1) = "C_Xls_Export.xls"
  
  arrStrings(3, 0) = "D_Xls_Export"
  arrStrings(3, 1) = "D_Xls_Export.xls"
  
  For Intc = 0 To UBound(arrStrings)
    Sheets(arrStrings(Intc, 0)).Range("A1:IV65536").ClearContents
    
    Dim IntcPfad As String
    Dim IntcDateiname As String
    Dim IntcBlatt As String
    Dim IntcZellen As String
    
    Dim wsTemp As Worksheet
    Set wsTemp = ActiveWorkbook.Worksheets.Add(After:=ActiveWorkbook.Worksheets( _
      ActiveWorkbook.Worksheets.Count))
    wsTemp.Name = "TemporäresBlatt"
    IntcPfad = "D:\___XLS_EXPORTE\" 'Datenarbeitsmappe
    IntcDateiname = arrStrings(Intc, 1)
    IntcBlatt = "Sheet0"
    
    Dim objADO As Object
    Dim strFileGesamt As String, strRef2 As String
    
    strFileGesamt = IntcPfad & IntcDateiname
    
    strRef2 = "Sheet0$A:Z" 'normale Bereichsangabe unbedingt MIT Tabellenname & $-Zeichen
    
    Set objADO = ExcelTable(strFileGesamt, strRef2)
    'Spaltennamen!
    For lngI = 1 To objADO.Fields.Count
      wsTemp.Cells(1, lngI) = objADO.Fields(lngI - 1).Name
    Next
    wsTemp.Range("A2").CopyFromRecordset objADO
    objADO.Close
    
    
    If wsTemp.Range("F1") = "MitgliedNEU" Then
      wsTemp.Columns("F:G").Delete
    End If
    If wsTemp.Range("H1") = "Adresse2" Then
      wsTemp.Columns("H:H").Delete
    End If
    
    wsTemp.Columns("A:Z").Copy
    Worksheets(arrStrings(Intc, 0)).Range("A1").PasteSpecial (xlPasteAll)
    
    wsTemp.Delete
    
  Next
  
  With Application
    .StatusBar = False
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
    .Cursor = xlDefault
  End With
  
End Sub


Gruß Sepp

Anzeige
Besten Dank Sepp, jetzt gehts! Servus, Walter
13.07.2015 20:40:55
WalterK

noch ein Frage ....
13.07.2015 21:07:47
WalterK
Hallo Sepp,
wenn in einer Überschriftenzelle ein Punkt (also .) vorkommt, wird der Punkt in das Zeichen # umgewandelt. Kann man das noch ändern?
Danke und Servus, Walter

AW: noch ein Frage ....
13.07.2015 21:34:46
Sepp
Hallo Walter,
probier mal
wsTemp.Cells(1, lngI) = Replace(objADO.Fields(lngI - 1).Name, "#", ".")

Gruß Sepp

Anzeige
Danke Sepp, jetzt passt alles! Servus, Walter
13.07.2015 22:35:27
WalterK

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige