Ich entschuldige mich für die Länge des Beitrags ... Ich wollte Ihnen so viel Detail wie möglich geben. Ich bin immer noch ein Amateur zu Access und immer noch VBA zu lernen, also sei geduldig mit mir. Der Code wird zusammen von anderen geparst, die ich an meine Bedürfnisse angepasst habe.Zugang VBA - neue Spalte mit ersten Zeile von Daten
Aufgabe durchgeführt wird:
1.) ich mit VBA mehrere Excel-Dateien aus einem Ordner in einer Access-Tabelle am importieren.
2.) Da die Dateien alle Informationen in einer Spalte enthalten, sortiere ich diese Spalte, um jedes Datenelement zu isolieren.
Ausgabe: Die erste Zeile in jeder importierten Excel-Datei hat einen Dateinamen (z. B. CA051607GA). Ich muss das als Zeile für jeden Dateiimport entfernen und möchte es zu einer neuen Spalte machen, die auf jeder Zeile wiederholt wird, die aus dieser Datei importiert wird. Es wird mir helfen, die Datei später aufzuspüren, wenn es Probleme mit diesem Datensatz gibt.
1 Beispiel Import unverändert
F1 (< -Feldes Name)
Row1: CS16052702
Row2: 00602498878941; US1A100037; US-G8; US1A100037; US -10
Reihe 3: 00602498878941; US1A100037; US-G8; US1A100037; US-10
2 Beispiel für Import Beitrag Changes (Makro):
(Feldnamen für jede Spalte, aber ich kann nicht herausfinden, wie man eine Tabelle hinzuzufügen, damit die Perioden jedes Feld zu trennen)
Row1: CS16052702
Row2: 00602498878941 .... US1A100037 .... US-G8 .... US1A100037 .... US-10
Row3: 00602498878941 ... .US1A100037 .... US-G8 .... US1A100037 .... US-10
3 Beispiel erwünschten Ausgang (Zugabe auf Makro):
Row1: CS16052702 .... 00602498878941 .... US1A100037 .... US-G8 .... US1A100037 .... US-10
Row2: CS16052702 .... 00602498878941 .... US1A100037 .. ..US-G8 .... US1A100037 ....US-10
Weitere Informationen:
Falls es wichtig ist, dass ich offensichtlich von der Natur des Makro sagen wird, werden die Dateien, wie sie in einer auf dem anderen kommen importieren. Die obigen Beispiele zeigen nur einen Dateiimport, um zwei Dateien zu demonstrieren, würden Sie einfach die 3 Zeilen unter die ursprünglichen 3 Zeilen kopieren (indem Sie die erste Zeile ändern, um sie einzigartig zu machen). Ich schließe auch das Makro ein, das ich für Ihre Referenz verwende.
Private Sub Command2_Click()
Dim strFile As String 'Filename
Dim strFileList() As String 'File Array
Dim intFile As Integer 'File Number
Dim filename As String
Dim path As String
DoCmd.SetWarnings False
path = "C:\Users\BrooksJ\Desktop\Test\"
Dim rs As DAO.Recordset ' Moved from below
'Loop through the folder & build file list
strFile = Dir(path & "*.xls")
While strFile <> ""
'add files to the list
intFile = intFile + 1
ReDim Preserve strFileList(1 To intFile)
strFileList(intFile) = strFile
strFile = Dir()
Wend
'see if any files were found
If intFile = 0 Then
MsgBox "No files found"
Exit Sub
End If
'cycle through the list of files
For intFile = 1 To UBound(strFileList)
filename = path & strFileList(intFile)
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "Compare_Files", filename, False
Next intFile
DoCmd.SetWarnings True
'change import field name
' CurrentDb().TableDefs("Compare_Files").Fields("F1").Name = "UPC"
'create fields to sparse out original data field
' CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN UPC Text;")
' CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN SR_Profit_Center Text;")
' CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN SR_Super_Label Text;")
' CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN SAP_Profit_Center Text;")
' CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN SAP_Super_Label Text;")
'Seperate data by ";" from original file
' Const YOUR_TABLE_NAME As String = "Compare_Files"
' Const SQL_UPDATE_DATA As String = "SELECT * FROM [" & YOUR_TABLE_NAME & "] WHERE SR_Profit_Center Is Null"
'
' Dim rs As DAO.Recordset
' Dim strF1Data As String
' Dim varData As Variant
'
' Set rs = CurrentDb.OpenRecordset(SQL_UPDATE_DATA)
' With rs
' Do Until .EOF
' strF1Data = !UPC
' varData = Split(strF1Data, ";")
' If UBound(varData) = 4 Then
' .Edit
' !UPC = varData(0)
' !SR_Profit_Center = varData(1)
' !SR_Super_Label = varData(2)
' !SAP_Profit_Center = varData(3)
' !SAP_Super_Label = varData(4)
' .Update
' End If
' .MoveNext
' Loop
' .Close
' End With
'
' Set rs = Nothing
'======================================================================================
CurrentDb.Execute ("ALTER TABLE Compare_Files ADD COLUMN UPC Text, SR_Profit_Center Text, SR_Super_Label Text, SAP_Profit_Center Text, SAP_Super_Label Text;")
CurrentDb.TableDefs("Compare_Files").Fields("F1").Name = "ref_val"
'Dim rs As DAO.Recordset
Dim ref_val As String
Set rs = db.OpenRecordset("SELECT TOP 1 ref_val FROM Compare_Files;", dbOpenDynaset)
ref_val = rs.Fields(0).Value
rs.Close
db.Execute "DELETE FROM [Compare_Files] WHERE ref_val = '" & ref_val & "';"
Const YOUR_TABLE_NAME As String = "Compare_Files"
Dim SQL_UPDATE_DATA As String
SQL_UPDATE_DATA = "SELECT *, ';' & '" & ref_val & "' FROM [" & YOUR_TABLE_NAME & "] WHERE SR_Profit_Center Is Null"
'Dim rs As DAO.Recordset
Dim strF1Data As String
Dim varData As Variant
Set rs = CurrentDb.OpenRecordset(SQL_UPDATE_DATA)
With rs
Do Until .EOF
strF1Data = !ref_val
varData = Split(strF1Data, ";")
If UBound(varData) = 4 Then
.Edit
!ref_val = ref_val
!UPC = varData(0)
!SR_Profit_Center = varData(1)
!SR_Super_Label = varData(2)
!SAP_Profit_Center = varData(3)
!SAP_Super_Label = varData(4)
.Update
End If
.MoveNext
Loop
.Close
End With
Set rs = Nothing
'==========================================================================================
End Sub
Einige der Code wird innerhalb der Code-Boxen nicht erfassen, so habe ich versucht, den Code das Beste, was ich konnte, zu isolieren. Lassen Sie mich wissen, wenn Sie mich brauchen, um zu ändern, wie es liest, um es verständlicher zu machen.
Anmerkungen hinzugefügt: Die Dateien, die gezogen werden, variieren in der Anzahl der Zeilen.
Ich schätze jede Hilfe oder Vorschläge mit diesem Problem, das jeder geben kann. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Ich habe versucht, in meiner Frage ausführlich und gründlich zu sein.
Danke für die Hilfe Yllzarith. Ich bekomme einen "Objekt erforderlich" -Fehler in der folgenden Zeile: 'Set rs = db.OpenRecordset (" SELECT TOP 1 Ref_Val FROM Compare_Files; ")' Ich habe die separate Datenstück auf meinem ursprünglichen Code aufgehoben Es sah so aus, als hättest du dieses Stück in dein aufgenommen. – Ragnar12
Stellen Sie sicher, dass die Zeile 'Dim rs As DAO.Recordset' in Ihrem Code nach oben verschoben wurde, wie in meinem Beispiel. – Yllzarith
Ich habe meinen Code im ursprünglichen Beitrag aktualisiert, um genau zu sein, was ich gerade ausgeführt habe. Ich bekomme immer noch den gleichen Fehler. – Ragnar12