ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1764|回复: 7

下面的For Next内容为什么会提示错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-1-17 10:44 | 显示全部楼层 |阅读模式
本帖最后由 nanfanglang 于 2012-1-17 10:45 编辑

Sub main()
Application.ScreenUpdating = False
Sheets("sheet1").Select
t = Timer
Dim re() As Single, arr
xrow = Range("e:e").End(xlDown).Row
arr = Range("e1:e" & xrow)
ReDim re(1 To xrow)

For i = 1 To xrow
re(i) = arr(i, 1)
Next i


Range("m3") = Timer - t
MsgBox "程序运行时间:" & Range("m3")
End Sub

把For Next加上去之后会提示下面错误:
运行时错误'13':
类型不匹配

-------------------------------------------------------
目标是想把E列的数值赋给re(i)数组,工作表在附件里。
请高人给回答一下,错误在什么地方呢?
另外问下,其它函数和过程能调用re(i)吗?
谢谢啦!

工作表.zip

106.22 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2012-1-17 10:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ReDim re(1 To xrow,1 to 1)

TA的精华主题

TA的得分主题

发表于 2012-1-17 10:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Dim re() As Single 不自行定义

Dim re() 由系统自行定义

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-17 10:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-1-17 11:04 | 显示全部楼层
本帖最后由 mjzxlmg 于 2012-1-17 11:05 编辑
nanfanglang 发表于 2012-1-17 10:55
还是有问题



dim re()


For i = 1 To xrow
ReDim Preserve re(1 To xrow)
re(i) = arr(i, 1)
Next i
  这样得出结果是横向的。

TA的精华主题

TA的得分主题

发表于 2012-1-17 11:07 | 显示全部楼层
nanfanglang 发表于 2012-1-17 10:55
还是有问题

如果想把E列的所有数值(含标题),2楼、3楼方法都可以
如果确实想定义re() As Single ,arr不能包含标题:
  1. Sub main()
  2.     Application.ScreenUpdating = False
  3.     Sheets("sheet1").Select
  4.     t = Timer
  5.     Dim re() As Single, arr
  6.     xrow = Range("e:e").End(xlDown).Row
  7. '    arr = Range("e1:e" & xrow)
  8.     arr = Range("e2:e" & xrow)
  9.     ReDim re(1 To xrow - 1)
  10.     For i = 1 To xrow - 1
  11.         re(i) = arr(i, 1)
  12.     Next i
  13.     Range("m3") = Timer - t
  14.     MsgBox "程序运行时间:" & Range("m3")
  15. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-17 15:03 | 显示全部楼层
本帖最后由 nanfanglang 于 2012-1-17 15:12 编辑

您好  帮忙看看下面  如何在别的模块引用re(i)数组呢?运行下面的代码到了re(i)说没定义(子过程或函数没定义)

Sub main()
    Application.ScreenUpdating = False
    Sheets("sheet1").Select
    t = Timer
    Dim re() As Single, arr
    xrow = Range("e:e").End(xlDown).Row
'    arr = Range("e1:e" & xrow)
    arr = Range("e2:e" & xrow)
    ReDim re(1 To xrow - 1)
    For i = 1 To xrow - 1
        re(i) = arr(i, 1)
    Next i
    For i = 500 To xrow - 1
    youhua (i)
'调用youhua函数
Next i

    Range("m3") = Timer - t
    MsgBox "程序运行时间:" & Range("m3")
End Sub



Public Function youhua(ByVal kd As Integer) As Integer
Dim i, k, l, EMAA, EMAB As Integer
Dim sy, sumb, sums As Single
Dim rm(), rn(), ro(), rp(), rq(), rr(), rs(), rt(), ru(), arr(12 To 100, 20 To 200) As Single
xrow = Range("e:e").End(xlDown).Row
ReDim rm(1 To xrow - 1), rn(1 To xrow - 1), ro(1 To xrow - 1), rp(1 To xrow - 1), rq(1 To xrow - 1), rr(1 To xrow - 1), rs(1 To xrow - 1)
ReDim rt(1 To xrow - 1), ru(1 To xrow - 1)

         For i = 11 To kd
             If i = 11 Then
               rm(i) = re(i)
             rn(i) = re(i)
            
             Else
              rm(i) = rm(i - 1) * (12 - 1) / (12 + 1) + re(i) * 2 / (12 + 1)
              rn(i) = rn(i - 1) * (26 - 1) / (26 + 1) + re(i) * 2 / (26 + 1)
             End If
        
         If i > 25 Then ro(i) = rm(i) - rn(i)
                 If ro(i) > 0 Then
                 rq(i) = 1
                 Else: If ro(i) < 0 Then rq(i) = -1
                 End If
      
          Next i
         
End Function

TA的精华主题

TA的得分主题

发表于 2012-1-17 15:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
nanfanglang 发表于 2012-1-17 15:03
您好  帮忙看看下面  如何在别的模块引用re(i)数组呢?运行下面的代码到了re(i)说没定义(子过程或函数 ...

在模块的最顶部声明数组:
  1. Dim re() As Single

  2. Sub main()
  3.      Application.ScreenUpdating = False
  4.      Sheets("sheet1").Select
  5.      t = Timer
  6.      Dim arr
  7.      xrow = Range("e:e").End(xlDown).Row
  8.      arr = Range("e2:e" & xrow)
  9.      ReDim re(1 To xrow - 1)
  10.      For i = 1 To xrow - 1
  11.          re(i) = arr(i, 1)
  12.      Next i
  13.      For i = 500 To xrow - 1
  14.      youhua (i)
  15. '调用youhua函数
  16. Next i

  17.     Range("m3") = Timer - t
  18.      MsgBox "程序运行时间:" & Range("m3")
  19. End Sub



  20. Public Function youhua(ByVal kd As Integer) As Integer
  21. Dim i, k, l, EMAA, EMAB As Integer
  22. Dim sy, sumb, sums As Single
  23. Dim rm(), rn(), ro(), rp(), rq(), rr(), rs(), rt(), ru(), arr(12 To 100, 20 To 200) As Single
  24. xrow = Range("e:e").End(xlDown).Row
  25. ReDim rm(1 To xrow - 1), rn(1 To xrow - 1), ro(1 To xrow - 1), rp(1 To xrow - 1), rq(1 To xrow - 1), rr(1 To xrow - 1), rs(1 To xrow - 1)
  26. ReDim rt(1 To xrow - 1), ru(1 To xrow - 1)

  27.          For i = 11 To kd
  28.               If i = 11 Then
  29.                 rm(i) = re(i)
  30.               rn(i) = re(i)
  31.               Else
  32.                rm(i) = rm(i - 1) * (12 - 1) / (12 + 1) + re(i) * 2 / (12 + 1)
  33.                rn(i) = rn(i - 1) * (26 - 1) / (26 + 1) + re(i) * 2 / (26 + 1)
  34.               End If
  35.          
  36.           If i > 25 Then ro(i) = rm(i) - rn(i)
  37.                   If ro(i) > 0 Then
  38.                   rq(i) = 1
  39.                   Else: If ro(i) < 0 Then rq(i) = -1
  40.                   End If
  41.         
  42.           Next i
  43.          
  44. End Function

复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 09:26 , Processed in 0.024811 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表