2013-04-11 142 views
0

我想從MS-Access VBA中計算Excel電子表格中非空單元的數量。下標超出範圍 - Excel.Application.WorksheetFunction.CountA

這個想法是,我單擊MS-Access中的窗體上的按鈕,非空單元格的數量存儲爲字符串。

Excel工作簿文件名爲"MattExcelFile.xls",該工作簿之內的紙張被稱爲"Sheet1",我想使用Excel的COUNTA功能的範圍是"C1:C500"

這裏是我到目前爲止拼湊代碼:

Option Compare Database 

Sub ImportDataFromRange() 

Dim xlFilePath As String 
Dim rowVariable As String 

xlFilePath = "C:\Users\Matt\Desktop\MattExcelFile.xls" 

rowVariable = Excel.Application.WorksheetFunction.CountA(Workbooks(xlFilePath).Sheets("Sheet1").Range("C1:C500")) 

Debug.Print rowVariable 

End Sub 

Private Sub Command0_Click() 

ImportDataFromRange 

End Sub 

下面是運行這段代碼時,突出rowVariable = ...線我收到錯誤消息:

運行時錯誤「 9' :

標超出範圍

回答

2

我不知道你是否設置了適當的參考,因此這裏是完整的代碼給你一些評論裏面。

Sub test() 
Dim rowVariable As String '<--why string? 

'1st 
Dim xlFilePath 
    xlFilePath ="C:\Users\Matt\Desktop\MattExcelFile.xls" 

'2nd- set refernces 
Dim EXL As Object 
Set EXL = CreateObject("Excel.Application") 

'3rd open worksheet- required 
With EXL 
    .Workbooks.Open xlFilePath 

'4th count using WF- set appropriate reference to workbook 
'be careful about sheet name- give error '9' 
    Dim tmpName() As String 
    tmpName = Split(xlFilePath, "\") 
    rowVariable = .WorksheetFunction.CountA(.Workbooks(tmpName(UBound(tmpName))).Sheets("Arkusz1").Range("A2:A10")) 
'control of value 
    Debug.Print rowVariable 
End With 

'5th-close everything and clean 
EXL.Quit 
Set EXL = Nothing 
End Sub 
+0

感謝這個@KazJaw,我已經做了一點挖掘,來到一個解決方案,它可以被看作是[這個答案]的一部分(http://stackoverflow.com/questions/15930832/import -dynamic-和靜態範圍從 - Excel的中到MS-訪問該-DO-沒有啓動,在/ 15947191#15947191)。 – 2013-04-11 11:23:49