Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4715|回复: 8

[已解决]求助!怎么在一个模块里面组合两个VBA?

[复制链接]
发表于 2013-9-14 01:22 | 显示全部楼层 |阅读模式
现在已经在一个工作表里面编好了两个VBA,先执行1,再执行2,才能完成最终的运算,怎么样才能把这两个BVA合并,点一次按钮就能完成运算?
后面将附上表格附件
表格中,蓝色区域里面是原始数据,黄色结果里面是计算第一步的结果,绿色区域里面是最终的计算结果
              计算的结果的表达方式需要修改,以前面几行为例
最佳答案
2013-9-14 06:16
sub test1()
……
call test2
end sub
就是在程序test1的end sub前加call 调用test2程序

目前结果的格式

目前结果的格式

希望得到结果的格式

希望得到结果的格式

护栏位置--合成实验.zip

131.35 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2013-9-14 01:25 | 显示全部楼层
调整结果的目的不是后面的文字,而是前面的数据,把连续的数组表达成一个段落
例如:0    -173
         173-264
         264-714
       直接表达成0-714
         
回复

使用道具 举报

发表于 2013-9-14 03:08 | 显示全部楼层
在第一个程序的后面加call调用第二个程序行不行
回复

使用道具 举报

 楼主| 发表于 2013-9-14 04:17 | 显示全部楼层
具体的代码是什么
回复

使用道具 举报

发表于 2013-9-14 06:16 | 显示全部楼层    本楼为最佳答案   
sub test1()
……
call test2
end sub
就是在程序test1的end sub前加call 调用test2程序
回复

使用道具 举报

发表于 2013-9-14 07:31 | 显示全部楼层
不是很明白 你是要模块一中两个组合 还是什么的啊  
回复

使用道具 举报

 楼主| 发表于 2013-9-14 14:20 | 显示全部楼层
youfang 发表于 2013-9-14 06:16
sub test1()
……
call test2

感谢你的解答,实验后成功了。以后再有问题还得请教你啊
回复

使用道具 举报

 楼主| 发表于 2013-9-14 14:26 | 显示全部楼层
youfang 发表于 2013-9-14 06:16
sub test1()
……
call test2

Type MYST
    tag As Boolean
    开始 As Double
    结束 As Double
    名称 As String
    d01 As Double
    d02 As Double
    d11 As Double
    d12 As Double
    d21 As Double
    d22 As Double
    d31 As Double
    d32 As Double
    d41 As Double
    d42 As Double
    d1 As Double
    d2 As Double
End Type
Sub test2()
    Dim le
    Dim rng, i, i1, t, diff
    Dim Data(0 To 10000) As MYST
    '第一步  生成初始数据
    '见上面的test

    '第二步 数据读入内存
    Set rng = Range([F4], [h1000000].End(3))
    Data(0).d01 = 70
    Data(0).d02 = 100
    For i = 1 To rng.Rows.Count
        Data(i).开始 = rng.Cells(i, 1)
        Data(i).结束 = rng.Cells(i, 2)
        Data(i).名称 = rng.Cells(i, 3)
    Next

    '第三步 对数据进行处理
    For i = 1 To rng.Rows.Count
        diff = Data(i).结束 - Data(i).开始
        Data(i).d01 = IIf((Data(i).名称 = "高填") * (diff > 70), diff, 0)
        Data(i).d02 = IIf((Data(i).名称 = "其他") * (diff < 100), diff, 0)
        Data(i).d11 = IIf((Data(i).名称 = "高填") * (diff > 70), Data(i).开始, 0)
        Data(i).d12 = IIf((Data(i).名称 = "高填") * (diff > 70), Data(i).结束, 0)
        Data(i).d21 = IIf(Data(i).名称 = "高填" And diff > 30 And diff < 70, (Data(i).开始 + Data(i).结束) / 2 - 35, 0)
        Data(i).d22 = IIf(Data(i).名称 = "高填" And diff > 30 And diff < 70, (Data(i).开始 + Data(i).结束) / 2 + 35, 0)
    Next
    For i = 1 To rng.Rows.Count
        Data(i).d31 = IIf(Data(i - 1).d01 * Data(i + 1).d01 * Data(i).d02 > 0, Data(i - 1).开始, 0)
        Data(i).d32 = IIf(Data(i - 1).d01 * Data(i + 1).d01 * Data(i).d02 > 0, Data(i + 1).结束, 0)

    Next
    For i = 1 To rng.Rows.Count
        Data(i).d41 = IIf((Data(i).d02 <> 0) * (Data(i).d02 < 100) * (Data(i - 1).d11 + Data(i - 1).d21 + Data(i - 1).d31) * (Data(i + 1).d11 + Data(i + 1).d21 + Data(i + 1).d31), Data(i).开始, 0)
        Data(i).d42 = IIf((Data(i).d02 <> 0) * (Data(i).d02 < 100) * (Data(i - 1).d11 + Data(i - 1).d21 + Data(i - 1).d31) * (Data(i + 1).d11 + Data(i + 1).d21 + Data(i + 1).d31), Data(i).结束, 0)
        Data(i).d1 = Data(i).d11 + Data(i).d21 + Data(i).d31 + Data(i).d41
        Data(i).d2 = Data(i).d12 + Data(i).d22 + Data(i).d32 + Data(i).d42
        Data(i).tag = Data(i).d1 + Data(i).d2 > 0
    Next

    '第四步 输出数据
    [I4:K1000000].ClearContents
    t = 4
    For i = 1 To rng.Rows.Count
        If Data(i).tag = True Then
            Cells(t, "i") = Data(i).开始
            Cells(t, "j") = Data(i).结束
            Cells(t, "k") = Data(i).名称
            t = t + 1
        End If
    Next
End Sub





能帮我解释一下这段语句吗?

点评

不好意思,VBA我不太懂,这些我看不太明白,没办法跟你解释。call语句也是刚巧以前听过,可以调用其他程序的  发表于 2013-9-14 20:27
回复

使用道具 举报

 楼主| 发表于 2013-9-14 14:56 | 显示全部楼层
youfang 发表于 2013-9-14 03:08
在第一个程序的后面加call调用第二个程序行不行

还有个问题
我的工作表里面,计算的结果是将没以段都列出来了,包括连续的段落也是依次列出的,怎么能让最后的结果显示连续的段落只当做一段列出?
例如:(0-234,234-423,423-516)里面的四个段落为连续的段落,直接记为(0-516)
把这种形式的段落排列:     0        234                改为这种形式  :        0       516   
                                       234        423                                                  710    856
                                       423        516                                                   910    999
                                       710         822
                                       822         856
                                       910         999
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-4 01:10 , Processed in 0.294689 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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