0

我创建了一个 Excel 工作表,用户可以插入一些行(最多 100 行)。

某些字段的值是从下拉列表中选择的。

我把公式放在所有 100 行上。

问题是,如果用户插入的行数少于 100,则数据不会在 access 中导入。在这种情况下,仅当我从剩余行中删除下拉列表的公式时才会导入数据。

要在访问中导入 excel 数据,我使用:

DoCmd.TransferSpreadsheet [Transfer Type], [Spreadsheet Type], [Table Name], [File Name], [Has Field Names], [Range]

我该如何解决这个问题?

编辑

在 Remou 的回答之后,我尝试了:

Private Sub import_Click()

Dim openDialog As FileDialog
Dim FileChosen As Integer

Set openDialog = Application.FileDialog(msoFileDialogFilePicker)
On Error GoTo DoNothing
With openDialog
  .title = "Import"
  .AllowMultiSelect = False
  .Show
End With

filename = openDialog.SelectedItems.Item(1)

Dim xl As Excel.Application
Dim wb As Excel.Workbook
Dim rng As Excel.Range

Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set wb = xl.Workbooks.Open(nomeFile)

c = wb.Worksheets("Sheet1").Range("1:1").end(-4161).Address
r = wb.Worksheets("Sheet1").Range("A:A").end(-4121).Row

ImportRange = "Sheet1!" & "A1:" _
   & Replace(Mid(c, 1, InStrRev(c, "$")) & r, "$", "")

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
"ImportTable", filename, True, ImportRange

DoNothing:
    If Err.Number = cdlCANCEL Then
    End If

End Sub

但我在Dim xl As Excel.Application上有一个调试错误

4

1 回答 1

1

注意在使用 Excel 下拉列表和验证下拉列表进行了测试后,我发现导入带有已验证单元格或未使用范围内的下拉列表的数据没有任何问题,除了这些行被导入,即使所有其他单元格都是空的。问题可能出在数据类型和导入到现有表中。您可能必须导入到临时表,然后追加。

我建议您使用自动化来获取使用的范围并将其添加为要导入的范围。

此示例代码使用后期绑定。您可以添加对 Microsoft Excel xx 对象库的引用,因此我保留了各种定义,但如果您在多台 PC 上使用代码,则后期绑定是最好的。

Dim xl As Object ''Excel.Application
Dim wb As Object ''Excel.Workbook
Dim rng As Object ''Excel.Range

Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set wb = xl.Workbooks.Open("z:\docs\test.xlsx")

'Choosing a column that is fully filled on sheet5
'xldown=-4121,xltoright=-4161
c = wb.Worksheets("Sheet5").Range("1:1").end(-4161).Address
r = wb.Worksheets("Sheet5").Range("A:A").end(-4121).Row

ImportRange = "Sheet5!" & "A1:" _
    & Replace(Mid(c, 1, InStrRev(c, "$")) & r, "$", "")

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
    "ImportSheet2", "Z:\Docs\csharp.xlsm", True, ImportRange
于 2012-09-03T20:46:16.507 回答