這是我的代碼和表格,希望能將表格中第六行匯入vb的陣列中但是顯示型別不匹配,大佬幫忙看看哪里出了問題

uj5u.com熱心網友回復:
變數 a 是“陣列”,Print a() 是不合法的陳述句。應該是:
for i= 1 to 15: Print a(i): Next
應該是“第6列”吧!
另外,在使用動態陣列之前,應該先“分配陣列元素的資料空間”。
在你的 For回圈之前,就要寫上: Redim a(15)
這兒因為你最多用到a(15),當然你用Redim a(20)或Redim a(500)都可以,只是浪費了一些記憶體空間而已。

如果你要用到多少個陣列元素是“確定”的,就可以宣告固定陣列,這樣就不需要(也不能用)Redim分配空間了。
比如你這個,把 Dim a() As String ,改成 Dim a(15) As String就行了。
uj5u.com熱心網友回復:
變數 a 是“陣列”,Print a() 是不合法的陳述句。
應該是:
for i= 1 to 15: Print a(i): Next
這是我的代碼和表格,希望能將表格中第六行匯入vb的陣列中但是顯示型別不匹配,大佬幫忙看看哪里出了問題
……
應該是“第6列”吧!
另外,在使用動態陣列之前,應該先“分配陣列元素的資料空間”。
在你的 For回圈之前,就要寫上: Redim a(15)
這兒因為你最多用到a(15),當然你用Redim a(20)或Redim a(500)都可以,只是浪費了一些記憶體空間而已。
如果你要用到多少個陣列元素是“確定”的,就可以宣告固定陣列,這樣就不需要(也不能用)Redim分配空間了。
比如你這個,把 Dim a() As String ,改成 Dim a(15) As String就行了。
我按照您的修改了,但是在除錯程序中運行到a(i - 1) = xlsheet.Cells(i, 6)這一部時就會顯示報錯,以及要求物件,這是哪里出了問題呢
uj5u.com熱心網友回復:
這是我的代碼和表格,希望能將表格中第六行匯入vb的陣列中但是顯示型別不匹配,大佬幫忙看看哪里出了問題
……
應該是“第6列”吧!
另外,在使用動態陣列之前,應該先“分配陣列元素的資料空間”。
在你的 For回圈之前,就要寫上: Redim a(15)
這兒因為你最多用到a(15),當然你用Redim a(20)或Redim a(500)都可以,只是浪費了一些記憶體空間而已。
如果你要用到多少個陣列元素是“確定”的,就可以宣告固定陣列,這樣就不需要(也不能用)Redim分配空間了。
比如你這個,把 Dim a() As String ,改成 Dim a(15) As String就行了。
我按照您的修改了,但是在除錯程序中運行到a(i - 1) = xlsheet.Cells(i, 6)這一部時就會顯示報錯,以及要求物件,這是哪里出了問題呢
你的“變數名”寫錯了!
在For 回圈之前,你的代碼寫的: Set ExcelSheet = ExcelBook.Worksheets(SheetID)
但在回圈體中,寫的卻是: xlsheet.cells(i, 6)
xlsheet是未定義、未賦值的變數,如果它作為“物件變數”使用,那么它就是“空參考”,
執行時自然會“運行時錯誤”,提示“要求物件”。
你更正成: a(i-1) = ExcelSheet.cells(i, 6) 應該就可以了。
不過最好應該寫成: a(i-1) = ExcelSheet.cells(i, 6).Value
a(i-1)是 String型別,而ExcelSheet.cells(i, 6)則是“物件型別”。
不可能把“物件”賦值給 String變數,這個賦值操作只能是把“物件的屬性值”賦值給 a(i-1)。
代碼沒有具體指定哪個屬性,那么只能是它的“默認屬性值”來賦值。
然而:誰能肯定它的“默認屬性”是什么呢!萬一它的“默認屬性”不是你預期的呢!
用“隱含使用默認屬性”的方式,不便于代碼的“閱讀理解”,更嚴重的是可能造成不可預料的結果!
何苦去節省那幾個字符、而帶來一些“潛在危險”呢!!!
當然你這兒“不寫”也會正確達到效果,不過那也只是“湊巧”罷了。
關鍵是:我認為“隱含使用默認屬性”,不是良好的代碼風格(或說“編程習慣)。
這回,你需要的是它的”值“,你不寫,正好是”取值“了;
下一回,你要的是單元格的寬度(或高度、位置坐標等),你也”習慣不指定具體屬性“,那不是差得十萬八千里了???
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51411.html
標籤:VB基礎類
下一篇:VBA 提示不可識別的資料庫格式
