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 会重置行为,因此它会在打开后第一次运行时再次正常工作,但以后再也不会正常工作了。

在第一次运行时,这是存储在维度中的(正确的)数据:

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

在随后的运行中,这是存储在维度中的(不正确的)数据:

excelapp= "微软 Excel" numberofrows= 500

有人可以帮我处理一下这里的代码,这样我就可以在同一个 MS-Access 会话中多次运行代码并每次都获取维度中的正确数据吗?非常感谢。

4

2 回答 2

2

刚刚对您的代码进行了一些更改-我为您记录了它们-对我有用。

至于 excelapp 维度,我认为它说“Microsoft Excel”是正确的,如果您要打印 wb.Name 维度,您将获得工作簿名称。不知道为什么它会在后续运行中为您提供不同的维度,可能是因为您没有明确关闭工作簿,但这是一个猜测。

Sub ImportDataFromRange()
Dim excelapp As Object
Set excelapp = CreateObject("excel.application")

' assign the workbook
Dim wb As Object
Set wb = excelapp.Workbooks.Open(Application.CurrentProject.Path & "\tbl_Order_Status.xls")


Dim numberofrows As Integer
' Call function slightly differently
numberofrows = excelapp.Application.counta(wb.worksheets("Sheet1").Range("C1:C500"))

' Close and release wb
wb.Close
Set wb = Nothing

MsgBox numberofrows
Debug.Print excelapp

excelapp.Quit
Set excelapp = Nothing

End Sub
于 2013-04-11T08:19:12.803 回答
1

我相信您的问题源于您创建excelapp对象变量但随后在获取的行上使用不同的引用(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 回答