0

ユーザーがいくつかの行 (最大 100) を挿入できるように Excel ワークシートを作成しました。

一部のフィールドの値は、ドロップダウン リストから選択されます。

数式を 100 行すべてに配置しました。

問題は、ユーザーが挿入する行が 100 行未満の場合、アクセスでデータがインポートされないことです。この場合、残りの行からドロップダウン リストの数式を削除した場合にのみ、データがインポートされます。

アクセスで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 に答える