【发布时间】:2020-04-29 19:08:43
【问题描述】:
我对使用 VBA 还是很陌生。我有一个访问数据库,用户单击一个按钮,这将上传多个文件。
上传的文件是临时表并获取添加到其中的字段等。一旦对临时表进行了更新,记录就会转移到永久表中。
它一次上传多个文件,因此当文件上传到表时,它们会输入到名为“temp_filename”的表中,每个文件都有自己的表。
下面是我的代码。对于 alter table 语句,我想上传刚刚创建的临时表。因为每次我尝试将其分配给变量时,该表都会被命名为不同的名称。我尝试了不同的语法等,但是我不断收到错误。谁能看到我哪里出错了?如有任何帮助,我们将不胜感激。
Public Sub Import()
Dim oFileDiag As Office.FileDialog
Dim path As String: path = ""
Dim oFSO As New FileSystemObject
Dim FileSelected As Variant
Dim FileNameSelected As Variant
Dim UpdatedTableName As Variant
Set oFileDiag = Application.FileDialog(msoFileDialogFilePicker) ''Picks file to import
oFileDiag.AllowMultiSelect = True ''Allows multiple files to be selected
oFileDiag.Title = "Please select the reports to upload"
oFileDiag.Filters.Clear
oFileDiag.Filters.Add "Excel Spreadsheets", "*.xlsx, *.xls" ''Only allows xlsx and xls file types to upload
If oFileDiag.Show Then
For Each FileSelected In oFileDiag.SelectedItems
FileNameSelected = oFSO.GetFileName(FileSelected)
UpdatedTableName = "temp_" & FileNameSelected
If oFileDiag.SelectedItems.Count > 0 Then path = oFileDiag.SelectedItems(1)
If Len(path) > 0 Then
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, UpdatedTableName, path, 1
DoCmd.RunSQL "ALTER TABLE UpdatedTableName ADD COLUMN [Date_of_Report] TEXT(100);"
MsgBox "The " & FileNameSelected & " file has been uploaded"
Else
MsgBox "File not found"
End If
Next
End If
【问题讨论】:
-
看起来
DoCmd.RunSQL "ALTER TABLE UpdatedTableName ADD COLUMN [Date_of_Report] TEXT(100);"将UpdatedTableName视为不是变量,而是字面意思。我不熟悉 Access VBA,但它不应该像字符串一样连接吗?DoCmd.RunSQL "ALTER TABLE " & UpdatedTableName & " ADD COLUMN [Date_of_Report] TEXT(100);"也许您可以完全删除UpdatedTableName变量,而是写:DoCmd.RunSQL "ALTER TABLE temp_" & FileNameSelected & " ADD COLUMN [Date_of_Report] TEXT(100);" -
感谢@ionizing,我已经尝试了以下两行,但仍然出现运行时错误 3293
DoCmd.RunSQL "ALTER TABLE" & UpdatedTableName & " ADD COLUMN [Date_of_Report] TEXT(100);"DoCmd.RunSQL "ALTER TABLE ' " & UpdatedTableName & " ' ADD COLUMN [Date_of_Report] TEXT(100);" -
我对 Access 不够熟悉,无法为您提供帮助,抱歉。听起来 Access 正在崩溃,可能在
DoCmd.TransferSpreadsheet。您可以在每个DoCmd之后添加debug.print "whatever"命令,以查看您的代码在崩溃之前能走多远。在即时窗口中查看debug.print的输出,在编辑器中是Ctrl+G。