Ms access 仅在第一次运行时存储期望值时访问VBA维度

Ms access 仅在第一次运行时存储期望值时访问VBA维度,ms-access,ms-access-2007,vba,ms-access-2010,Ms Access,Ms Access 2007,Vba,Ms Access 2010,我从其他地方改编了这段代码。点击表单上的按钮,它意味着告诉我Excel电子表格中给定单元格范围(C1:C500)中非空行的数量 Sub-ImportDataFromRange() 将excelapp设置为Excel.Application 设置excelapp=CreateObject(“excel.application”) excelapp.Workbooks.Open(Application.CurrentProject.Path&“\MattExcelFile.xls”) 将myrang

我从其他地方改编了这段代码。点击表单上的按钮,它意味着告诉我Excel电子表格中给定单元格范围(C1:C500)中非空行的数量

Sub-ImportDataFromRange()
将excelapp设置为Excel.Application
设置excelapp=CreateObject(“excel.application”)
excelapp.Workbooks.Open(Application.CurrentProject.Path&“\MattExcelFile.xls”)
将myrange变暗为Range
设置myrange=excelapp.Sheets(“Sheet1”).Range(“C1:C500”)
将numberofrows设置为整数
numberofrows=Excel.Application.WorksheetFunction.CountA(myrange)
MsgBox numberofrows
调试。打印Excel应用程序
退出
设置excelapp=Nothing
端接头
专用子命令0_单击()
ImportDataFromRange
端接头
在打开MS Access并通过我创建的按钮运行此代码时,它第一次正常工作,但之后不会再次正常工作。关闭和重新打开MS Access将重置该行为,以便在打开后第一次运行时,它将再次正常工作,但以后不会再运行

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

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

在后续运行中,这是尺寸标注中存储的(不正确)数据:

excelapp
=“Microsoft Excel”
numberofrows
=500


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

刚刚对您的代码做了一些更改-我为您记下了它们-对我有用

至于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

我相信您的问题源于这样一个事实,即您创建了
excelapp
对象变量,但随后在获取
numberofrows
的行上使用了不同的引用(
Excel.Application.WorksheetFunction
),而不是
excelapp.WorksheetFunction

以下(已更正)代码适用于我:

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

效果很好。非常感谢。我已经在您的答案中添加了一条注释,提醒其他遇到此问题的人,他们需要确保他们的MS Access引用包含Microsoft Excel[version]对象库,否则这种方法将无法工作。和西蒙的一样。但是Simon更好:)+1对于“毫无疑问令人恼火”的问题,许多程序员可能已经并且可能在未来面临这个问题。