这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题

解决方案 »

  1.   

    变量 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就行了。
      

  2.   

    应该是“第6列”吧!
    另外,在使用动态数组之前,应该先“分配数组元素的数据空间”。
    在你的 For循环之前,就要写上: Redim a(15)
    这儿因为你最多用到a(15),当然你用Redim a(20)或Redim a(500)都可以,只是浪费了一些内存空间而已。
    如果你要用到多少个数组元素是“确定”的,就可以声明固定数组,这样就不需要(也不能用)Redim分配空间了。
    比如你这个,把 Dim a() As String ,改成 Dim a(15) As String就行了。
    应该是“第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)这一部时就会显示报错,以及要求对象,这是哪里出了问题呢
      

  3.   

    应该是“第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)。
    代码没有具体指定哪个属性,那么只能是它的“默认属性值”来赋值。
    然而:谁能肯定它的“默认属性”是什么呢!万一它的“默认属性”不是你预期的呢!
    用“隐含使用默认属性”的方式,不便于代码的“阅读理解”,更严重的是可能造成不可预料的结果!
    何苦去节省那几个字符、而带来一些“潜在危险”呢!!!当然你这儿“不写”也会正确达到效果,不过那也只是“凑巧”罢了。
    关键是:我认为“隐含使用默认属性”,不是良好的代码风格(或说“编程习惯)。
      这回,你需要的是它的”值“,你不写,正好是”取值“了;
      下一回,你要的是单元格的宽度(或高度、位置坐标等),你也”习惯不指定具体属性“,那不是差得十万八千里了???