MS Access-VBA acImport Blattnamen mit Leerzeichen und Reichweite
Baue ich ein Formular mit einem button namens "Go", um zu importieren, die einen bestimmten Bereich von einem bestimmten excel-sheet aus einer excel-Datei. Eine weitere sub/Funktion übernimmt Sie die Datei-Namen auf dem Formular im Feld " text_filepathdata.
Habe ich entdeckt, dass Leerzeichen im Blattnamen sind problematisch, aber es kann gelöst werden durch die Verwendung von speziellen Angebot.
Dim sheetname As String
sheetname = "'Commit Volumes!'"
DoCmd.Transferspreadsheet acImport, acSpreadsheetTypeExcel12, _
"lcl_ImportedFile", text_filepathdata, True, sheetname
Funktioniert, aber ich kann nicht geben Sie einen Bereich zusätzlich zu den Blatt-Namen, weil das spezielle Angebot... (dh. "'Commit Bände!A6:Z5000'" funktioniert nicht, und auch nicht eine Verkettung der beiden Stücke wie "Commit-Volumes'." & "A6:Z5000")
Ich habe versucht, alle Arten von Zitaten und Verkettungen, aber die einzigen Dinge, die funktionieren sind:
sheetname = "'Commit Volumes!'"
sheetname = "'Commit Volumes$'"
sheetname = "CommitVolumes!A6:Z5000"
Excel-Blatt kann nicht geändert werden, denn es kommt aus einem anderen system und die Datei (nach aktualisiert werden) hochgeladen werden müssen, zurück zu diesem system.
Hier ist mein code:
Private Sub button_Go_Click()
On Error GoTo Err_button_Go_Click
Dim sheetname As String
sheetname = "'Commit Volumes!'"
If IsNull(text_filepathdata) Or text_filepathdata = "" Then
MsgBox "Please browse and select a valid file to import.", _
vbCritical, "Invalid File"
Else
DoCmd.OpenForm "f_PleaseWait_Processing", acNormal, , , acFormReadOnly, acWindowNormal
If ifTableExists("lcl_ImportedFile") = True Then
DoCmd.DeleteObject acTable, "lcl_ImportedFile"
End If
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12,_
"lcl_ImportedFile", text_filepathdata, True, sheetname
'Call module to process the imported data
Call MainProcess
End If
Exit_button_Go_Click:
Exit Sub
Err_button_Go_Click:
MsgBox Err.Number & " - " & Err.Description
Resume Exit_button_Go_Click
End Sub
Bekomme ich zwei unterschiedliche Fehlermeldungen, abhängig von der Ausgabe.
Wenn es einen Raum, in dem name bekomme ich: Laufzeitfehler 3129: Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' oder 'UPDATE'.
Wenn es ein problem mit den Namen, sonst bekomme ich: Laufzeitfehler 3011: Das Microsoft Access-Datenbankmodul konnte das Objekt nicht finden "Begehen Bände$A1:Z5000". Stellen Sie sicher, dass das Objekt existiert und dass Sie buchstabieren seinen Namen und den Pfad korrekt. Wenn "Begehen Bände$A1:Z5000" ist nicht ein lokales Objekt, prüfen Sie Ihre Netzwerkverbindung oder Kontaktieren Sie den server-administrator.
Jede Hilfe wäre sehr geschätzt werden!
Bill
Variationen, die ich Ausprobiert habe:
sheetname = "'Commit Volumes'!A6:Z5000";
sheetname = "'Commit Volumes!'A6:Z5000"
sheetname = "'Commit Volumes$'A6:Z5000"
sheetname = "'Commit Volumes'$A6:Z5000"
sheetname = "'Commit Volumes'$A$6:$Z$5000"
sheetname = "'Commit Volumes!'$A$6:$Z$5000"
sheetname = "'Commit Volumes$'$A$6:$Z$5000"
InformationsquelleAutor Bill Merritt | 2013-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Datei wird aus einem anderen system exportiert, die in einem bekannten\set-format, die Sie könnte darauf verweisen, die durch den index anstatt von Namen:
Beispiel: sheets(1), sheets(2). Fügen Sie dann dem Bereich.
InformationsquelleAutor Eddie
Dies ist, was Sie brauchen:
'Commit Volumes'!A6:Z5000
Wenn es einen Blattnamen mit Leerzeichen oder Bindestrichen, excel fügt einfache Anführungszeichen um den Namen des Blattes selbst, nicht um die gesamte Referenz.
Also:
Fellow Programmierer nur geraten, versuchen mehrere Variablen, wie z.B. so:
Dim sheetname as String Dim cellrange as String Dim sheetrange as String sheetname = "'Commit Volumes!'" cellrange = "A6:Z5000" sheetrange = sheetname & cellrange
Es schien vielversprechend, aber nicht, jedoch die Arbeit. 🙁 Und verzeihen Sie mir, aber ich kann nicht den code, der erscheint auf mehreren Linien.ein Schuss im Dunkeln, aber was ist, wenn Sie versuchen, Klammern
[]
um den Namen des Blattes statt'
InformationsquelleAutor Scott Holtzman
verwenden sheetname = "Begehen Bände$" (ohne-Reihe, die scheint zu funktionieren mit der Abstimmung der Tabelle Feldnamen der excel-Spalte überschriften
InformationsquelleAutor kevin
Ich hatte das gleiche Problem.
schließlich fand ich, dass Sie verwenden können:
sheetname = "Begehen Bände!A6:Z5000"
Beispiel
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tabellenname", _
filetoimport, False, "Commit Bände!A6:Z5000"
Grüße!
InformationsquelleAutor Daniel Seeling
Ich versucht, die oben vorgeschlagenen Lösungen und leider hat es nicht funktioniert in meinem Fall: tatsächlich die import-Methode von Access mag es nicht, wenn die Arbeitsblätter mit Leerzeichen im Namen.
Habe ich einen workaround: umbenennen der Arbeitsblätter, die während der code, um etwas kurz und ohne Leerzeichen, zum Beispiel: aus "Daten Q1 2016" zu "WS1". Auf diese Weise, Sie können übergeben Sie den Wert "WS1$" das argument der Funktion importieren, und Zugriff wird der import der Bereich, der von dem angegebenen Arbeitsblatt
Beim importieren der zweiten Arbeitsblatt habe ich wieder verwendet, den code und die Umbenennung in "WS2"... und so weiter.
in der Zusammenfassung: benennen Sie die Arbeitsblätter, die während der Laufzeit code zu kurzen Namen ohne Leerzeichen, und fügen Sie die ' $ ' - symbol am Ende zu machen, schnappen Sie sich den verwendeten Bereich.
InformationsquelleAutor Leo13
Hatte ich die gleichen Probleme. Als ich eine Reihe string-variable und übergeben es dem DoCmd.TransferArbeitsblatt-routine, Zugriff geändert"! " - Zeichen "$" und gab mir eine Fehlermeldung. Wenn ich an eine string-Konstante mit dem Range-parameter der DoCmd.TransferArbeitsblatt-routine, Zugriff nicht ändern den Charakter. In anderen Worten, führen Sie den folgenden code, ...
... gab mir den Laufzeitfehler 3011.
Allerdings, wenn ich getrennt den Namen des Blattes und die Adresse in zwei separate Variablen und übergeben Sie der routine, der Zugang war glücklich. In anderen Worten, bei mir lief der code, ...
... Ich bekam keine Fehlermeldung und die Daten aus der Tabelle5 Blatt wurde richtig importiert in tblImport.
Es sollte angemerkt werden, dass Tabelle5 ist nicht das erste Blatt der Arbeitsmappe und strAddress keine "$" Zeichen.
Happy coding.
InformationsquelleAutor DebbieDoesData