1

私はこのコードを別の場所から適応させました。フォームのボタンをクリックすると、Excel スプレッドシートの特定のセル範囲 (C1:C500) 内の空でない行の数がわかります...

Sub ImportDataFromRange()

Dim excelapp As Excel.Application
Set excelapp = CreateObject("excel.application")
excelapp.Workbooks.Open (Application.CurrentProject.Path & "\MattExcelFile.xls")

Dim myrange As Range
Set myrange = excelapp.Sheets("Sheet1").Range("C1:C500")

Dim numberofrows As Integer
numberofrows = Excel.Application.WorksheetFunction.CountA(myrange)

MsgBox numberofrows
Debug.Print excelapp

excelapp.Quit
Set excelapp = Nothing

End Sub

Private Sub Command0_Click()

ImportDataFromRange

End Sub

MS-Access を開き、作成したボタンからこのコードを実行すると、最初は正しく機能しますが、その後は機能しません。MS-Access を閉じて再度開くと動作がリセットされるため、MS-Access を開いてから最初に実行したときは正常に動作しますが、その後は二度と動作しません。

最初の実行では、これはディメンションに格納された (正しい) データです。

excelapp= "C:\Users\Matt\Desktop\MattExcelFile.xls" numberofrows= 4

その後の実行では、これはディメンションに格納された (誤った) データです。

excelapp= "マイクロソフト エクセル" numberofrows= 500

同じMS-Accessセッション内でコードを複数回実行し、毎回次元で正しいデータを取得できるように、誰かがここでコードを手に入れることができますか? どうもありがとう。

4

2 に答える 2

1

あなたの問題は、excelappオブジェクト変数を作成したが、 get の行で(Excel.Application.WorksheetFunctionの代わりに) 別の参照を使用しているという事実に起因していると思います。excelapp.WorksheetFunctionnumberofrows

次の(修正された)コードは私にとってはうまくいきます:

Sub ImportDataFromRange()
Dim excelapp As Excel.Application
Set excelapp = New Excel.Application

excelapp.Workbooks.Open (Application.CurrentProject.Path & "\MattExcelFile.xls")

Dim myrange As Range
Set myrange = excelapp.Sheets("Sheet1").Range("C1:C500")

Dim numberofrows As Integer
numberofrows = excelapp.WorksheetFunction.CountA(myrange)

MsgBox numberofrows
Debug.Print excelapp

Set myrange = Nothing
excelapp.Quit
Set excelapp = Nothing

End Sub

Private Sub Command0_Click()

ImportDataFromRange

End Sub
于 2013-04-11T08:20:55.890 に答える