求助:关于VB导入excle数据显示类型不匹配

weixin_41133222 2017-11-29 08:03:37
这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题
...全文
326 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-11-30
  • 打赏
  • 举报
回复
引用 2 楼 weixin_41133222 的回复:
[quote=引用 1 楼 Chen8013 的回复:] [quote=引用 楼主 weixin_41133222 的回复:] 这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题 ……
应该是“第6列”吧! 另外,在使用动态数组之前,应该先“分配数组元素的数据空间”。 在你的 For循环之前,就要写上: Redim a(15) 这儿因为你最多用到a(15),当然你用Redim a(20)或Redim a(500)都可以,只是浪费了一些内存空间而已。 如果你要用到多少个数组元素是“确定”的,就可以声明固定数组,这样就不需要(也不能用)Redim分配空间了。 比如你这个,把 Dim a() As String ,改成 Dim a(15) As String就行了。 [/quote] 我按照您的修改了,但是在调试过程中运行到a(i - 1) = xlsheet.Cells(i, 6)这一部时就会显示报错,以及要求对象,这是哪里出了问题呢[/quote] 你的“变量名”写错了! 在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)。 代码没有具体指定哪个属性,那么只能是它的“默认属性值”来赋值。 然而:谁能肯定它的“默认属性”是什么呢!万一它的“默认属性”不是你预期的呢! 用“隐含使用默认属性”的方式,不便于代码的“阅读理解”,更严重的是可能造成不可预料的结果! 何苦去节省那几个字符、而带来一些“潜在危险”呢!!! 当然你这儿“不写”也会正确达到效果,不过那也只是“凑巧”罢了。 关键是:我认为“隐含使用默认属性”,不是良好的代码风格(或说“编程习惯)。   这回,你需要的是它的”值“,你不写,正好是”取值“了;   下一回,你要的是单元格的宽度(或高度、位置坐标等),你也”习惯不指定具体属性“,那不是差得十万八千里了???
weixin_41133222 2017-11-30
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
变量 a 是“数组”,Print a() 是不合法的语句。 应该是: for i= 1 to 15: Print a(i): Next [quote=引用 楼主 weixin_41133222 的回复:] 这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题 ……
应该是“第6列”吧! 另外,在使用动态数组之前,应该先“分配数组元素的数据空间”。 在你的 For循环之前,就要写上: Redim a(15) 这儿因为你最多用到a(15),当然你用Redim a(20)或Redim a(500)都可以,只是浪费了一些内存空间而已。 如果你要用到多少个数组元素是“确定”的,就可以声明固定数组,这样就不需要(也不能用)Redim分配空间了。 比如你这个,把 Dim a() As String ,改成 Dim a(15) As String就行了。 [/quote]
引用 1 楼 Chen8013 的回复:
变量 a 是“数组”,Print a() 是不合法的语句。 应该是: for i= 1 to 15: Print a(i): Next [quote=引用 楼主 weixin_41133222 的回复:] 这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题 ……
应该是“第6列”吧! 另外,在使用动态数组之前,应该先“分配数组元素的数据空间”。 在你的 For循环之前,就要写上: Redim a(15) 这儿因为你最多用到a(15),当然你用Redim a(20)或Redim a(500)都可以,只是浪费了一些内存空间而已。 如果你要用到多少个数组元素是“确定”的,就可以声明固定数组,这样就不需要(也不能用)Redim分配空间了。 比如你这个,把 Dim a() As String ,改成 Dim a(15) As String就行了。 [/quote] 我按照您的修改了,但是在调试过程中运行到a(i - 1) = xlsheet.Cells(i, 6)这一部时就会显示报错,以及要求对象,这是哪里出了问题呢
舉杯邀明月 2017-11-29
  • 打赏
  • 举报
回复
变量 a 是“数组”,Print a() 是不合法的语句。 应该是: for i= 1 to 15: Print a(i): Next
引用 楼主 weixin_41133222 的回复:
这是我的代码和表格,希望能将表格中第六行导入vb的数组中但是显示类型不匹配,大佬帮忙看看哪里出了问题 ……
应该是“第6列”吧! 另外,在使用动态数组之前,应该先“分配数组元素的数据空间”。 在你的 For循环之前,就要写上: Redim a(15) 这儿因为你最多用到a(15),当然你用Redim a(20)或Redim a(500)都可以,只是浪费了一些内存空间而已。 如果你要用到多少个数组元素是“确定”的,就可以声明固定数组,这样就不需要(也不能用)Redim分配空间了。 比如你这个,把 Dim a() As String ,改成 Dim a(15) As String就行了。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧