Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Module Module1
Sub main()
Const fsiFilePath = "C:\测试.xlsx"
Const ExportedRange As String = "B9:B17"
Dim ExcelApp As Excel.Application
ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
Dim iWkbk As Excel.Workbook
iWkbk = ExcelApp.Workbooks.Open(fsiFilePath, , True)
Dim Wksht As Worksheet
Wksht = iWkbk.Worksheets(1)
Dim DataInRange(,) As Object
DataInRange = Wksht.Range(ExportedRange).Value
'从下图中可以看出来,DataInRange是从(0,0)到(8,0)的数组。
Debug.Print(LBound(DataInRange)) '返回值为1
Debug.Print(UBound(DataInRange)) '返回值为9
Dim a1 As Single = DataInRange(1, 1) '返回局部列表中(0,0)位置的值
Dim a2 = DataInRange(0, 0) '报错:索引超出了数组界限
iWkbk.Close()
ExcelApp.Quit()
End Sub
End Module
为什么索引DataInRange的下限值是(1,1) ?!!!
------解决思路----------------------
excel表从1开始
------解决思路----------------------
您的错误在于下面代码中我以提示,请仔细看看。您对多维数组有些认识错误的。
Dim a1 As Single = DataInRange(1, 0) 应该这样改。
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Module Module1
Sub main()
Const fsiFilePath = "C:\测试.xlsx"
Const ExportedRange As String = "B9:B17"
Dim ExcelApp As Excel.Application
ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
Dim iWkbk As Excel.Workbook
iWkbk = ExcelApp.Workbooks.Open(fsiFilePath, , True)
Dim Wksht As Worksheet
Wksht = iWkbk.Worksheets(1)
Dim DataInRange(,) As Object
'<span style="color: rgb(255, 0, 255);"> DataInRange = Wksht.Range(ExportedRange).Value</span>
'从下图中可以看出来,DataInRange是从(0,0)到(8,0)的数组。
'<span style="color: rgb(255, 0, 0);"> Debug.Print(LBound(DataInRange)) </span> '返回值为1
Debug.Print(UBound(DataInRange)) '返回值为9
' Dim a1 As Single = DataInRange(1, 1) '返回局部列表中(0,0)位置的值
'==========================================
Dim a1 As Single = DataInRange(1, 0) '按数据情况必须这样改
'DataInRange中的数组总长度为1,维度为9的。
'检索数据从0开始的,但是此DataInRange的数组长度没有索引值1
'==================================
Dim a2 = DataInRange(0, 0) '报错:索引超出了数组界限</span>
iWkbk.Close()
ExcelApp.Quit()
End Sub
End Module
------解决思路----------------------
索引DataInRange的最大索引值是8和0
------解决思路----------------------
索引DataInRange的最大索引值是9和0
------解决思路----------------------
LBound(DataInRange) '返回值为1
UBound(DataInRange) '返回值为9
以前的版本的解释是如果转化为检索索引值时必须减一。
LBound(DataInRange) -1 '返回值为1