~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~
~ 声明事项 ~
如各位想把以下本文章转贴 , 请记得要注明出处.
本文章之内容为本人之经验所写, 绝无抄袭成份, 特此声明.
由于图片制作需时, 所以更新会比较慢.
存放图片的 SHARE A PIC SERVER 可能读取速度较慢, 请耐心等待.
上一次有提过 , 如果按照以下的程序代码
( Pic11_1 )
当 Sheet1 中的储存格 B2 有数据时 , 会有一个讯息窗口跳出来显示 "正确" 再显示 "错误" , 这是因为计算机在阅读程序代码时 , 是一句一句往下看的 , 所以现在我们就要告诉计算机 , 怎样避开这个问题 .
记得我们第一次编写模块时 , 我教过你的东西吗 ? 增加模块之后 , 我们就可以在编写程序代码的位置增加一个 SUB XXX . 当然 , 我们不用每一次都先开一个模块 , 再增加一段程序代码 , 如果是这样的话 , 当你要进行管理或者除虫 ( DEBUG ) 时 , 就会变得十分不便 , 试想像 , 一个程序有数百个模块 ... ... 晕了 ... ... 当然 , 如果你的程序利害得可以控制什么飞机大炮 , 就有可能会出现上百个模块 , 但是我们在开发 VBA 程序的时候 , 我们只是要开发一些适合的工具给自己 , 如果你要的功能太利害 , 我也不建议你用 EXCEL - VBA 来开发 ~
现在我们先在 End Sub 下面 , 再增加一段新的程序代码 , 这是独立的 , 放心 , 计算机不会随便执行的 .
( Pic11_2 )
我所增加的名字是 BBB ( 只是方便吧 ~ 懒得去想个好名字而已 XD ) , Sub BBB 内的程序代码就是之前的 MsgBox ("正确") , 再看一看上面 Sub AAA 程序代码的改变 , 当 Sheet1 中的储存格 B2 有数据 , NUMBER 这个变数就会等于 1 , 当 NUMBER 这个变数等于 1 , 就跳到 FIRST: 的部份执行 , 改变的地方就在这里了 ( 对你来说也是一个新的东西吧 XD ) , 这里多了一句 DataEntry.BBB , 这一句的意思 , 就是要计算机找到 模块 DataEntry 内的 Sub BBB , 也就是说 , 当 NUMBER 这个变量的值等于 1 的时候 , 计算机就要执行 FIRST: 的部份 , 在 FIRST: 部份内的指令就只有一个 , 就是跳到 DataEntry 模块内 , 找出 程序代码 BBB 然后执行 .
现在 , 我们先想象一下程序在执行后的效果吧 . 首先 , 我们把 Sheet1 中的储存格 B2 中的数据删除 , 理论上来说 , NUMBER 这个变数的值就等于 2 , 会执行 SECOND: 的部份 , 之后就会有一个讯息跳出来显示 "错误"
( Pic11_3 )
看到吗 ?? 看不到 ?? 怎么会呢 ~ 等我想一想 ... ... ... 哦 ~ 对了 , 忘了告诉你 , 先在 Sub AAA() 这一行程序代码 , 用你亲爱的鼠标指着它点一下左键 , 再按播放吧 ~ 呵呵呵 ~ 可以看到了吗 ? 哈哈 ~ 不要忘记哦 ~ 计算机很笨的 XD , 你一定要先点一下第一行 , 好等计算机知道那里是程序的第一行哦 ~
好 ~ 让计算机发现错误和告诉我们的程序代码没有问题了 , 那么 , 现在就要测试一下 , 要它执行 FIRST: 的部份 , 首先在 Sheet1 中的储存格 B2 加一点数据 , 什么文字也好 , 只要有东西就可以了 ~
先想象一下 , 现在 B2 的储存格是有数据的 , 那么 NUMBER 这个变数就会等于 1 , 也就是会执行 FIRST: 的部份 , 而 FIRST: 这个部份中 , 就只有一个指令 , 就是要计算机找到模块 DataEntry 内的 程序代码 BBB , 理论上来说 , 如果程序代码没有出错 , 那么 , 我们就会看到 "正确" 的讯息了 .
( Pic11_4 )
按一下确定吧 ~
( Pic11_5 )
等等 ~ 怎么搞的 ~ "正确" 之后又看到 "错误" 了耶 ~~~~~~
你是这样想吧 ~ 哈哈哈哈哈 ~ 不要骗我了 ~ 我完全知道了你在想什么 ~ 哈哈哈哈哈 ~
好吧 ~ 等我来再说明一次吧 ~ 计算机在阅读程序代码的时候 , 是一句一句往下看的 , 不信的话 , 你在 Sub AAA() 点一下左键 , 之后慢慢地按 "F8" , 准备执行的程序代码会变了颜色的 ( 我之前有告诉过你吧 ~ ) , 看到吗 ? 每按一次 "F8" 它就会执行一句程序代码 , 现在我们直到它执行到 Sub BBB() 的部份 , 看看执行完了之后 , 程序代码跳到那里 ~
( Pic11_6 )
看到了吧 , 问题就在这里了 , 按照正常情况来说 , 一个报表的第一个记录 , 只会在第一次使用时没有数据 , 不会每天都没有数据的 , 如果是每天都没有数据 , 那这个报表就没有存在的意义了 ~ 再想一想 , 计算机阅读程序代码是一行一行往下看的 , 当完成 FIRST: 的部份 , 很自然地就会执行 SECOND: 的部份了 , 完成 SECOND: 的部份之后 , 就来到了程序代码的最后一句 End Sub .
所以 , 我们又要再一次动动脑筋 , 修改一下程序代码的执行顺序 , 可以怎样做呢 ? 想到吗 ? 就把 FIRST: 和 SECOND: 这两个部份的程序代码次序反过来放吧 ~
( Pic11_7 )
刚才说过了 , 计算机阅读程序代码是一句一句看的 , 报表也是在第一次使用时是没有数据的 , 所以在第一次使用时 , 是必定会出现错误的 , 而刚才说过的问题 ( 先 "正确" 后 "错误" ) 还是会出现 , 只是次序不同了 ( 变成 先 "错误" 后 "正确" ) , 所以 , 我们又要再错加多一点 , 使程序代码在显示 "错误" 之后 , 直接跳到 End Sub 就好了 , 有想到方法吗 ? 嘿嘿嘿 ~ 就是使用 GOTO 嘛 ~
( Pic11_8 )
现在的程序代码又改变了 , 当显示 "错误" 这个讯息之后就直接跳到 FINISH: 的部份 , 当计算机跳到 FINISH: 的时候 ~ 嘿嘿嘿 ~ 直接完结了 ~ 如果显示 "正确" , 那么完成 Sub BBB 之后就是完结 , 哈哈 ~ 问题避开了耶 ~ 是不是很高兴 ~ 哈哈哈 ~
可能你现在又多了一个问题 , 既然 GOTO 这个方法可以避开上述的问题 , 那么 , 我们有必要把程序代码反转来放吗 ? 答案是没有的 ~ 哈哈哈 ~ 只要在增加 FINISH: 这个部份之后 , 分别在 FIRST: 和 SECOND: 下面增加一句 GoTo Finish 就可以了 ~ 不过 , 我的原意是要你明白 , 不管你的程序代码怎样放 , 计算机都是一句一句来阅读的 ~
注意 !
当要利用程序代码呼叫模块内的子程序 , 必需要紧记程序代码的模块名称必需跟你设定的模块名称一致 , 比如说 , 你设定的模块名称是 Module1 内有一个子程序 ABC , 那么你的程序代码就是 Module1.ABC , 但是 , 如果你所设定的模块名称改过来了 , 比如 DataEntry , 那么你的程序代码就要改为 DataEntry.ABC , 这个必须要注意哦 !!
1 留言:
对于已经有两位朋友来到第十回的时侯, 都出现程序代码找不到模块 DATAENTRY 内的 SUB BBB 这个问题 , 现在, 我就把我的程序代码贴出来给大家吧 , 不过要注意 , 由于这段程序代码是从已经完成的程序中复制出来 , 所以有可能跟教学文章中所提到的有点差别 ... 嗯 ... 希望没有把你搞到更加混乱吧 ~
Sub Entry()
'确定第一行记录有没有数据
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("B2").Select
'如果 Sheet1 中的储存格 B2 等于空白 , 变量 Number = 2 , 否则 Number = 1
If Worksheets("Sheet1").Range("B2").Value = "" Then Number = 2 Else Number = 1
'如果 Number = 1 执行 First 部份 , Number = 2 执行 Second 部份
If Number = 1 Then GoTo First
If Number = 2 Then GoTo Second
First:
DataEntry.bbb
'AddRecord.AddNewRecord
GoTo Finish
Second:
NewReport.FirstRecord
Finish:
End Sub
Sub bbb()
MsgBox "abcdefg"
End Sub
============================
再加多一点说明 , 其实当你在修改 FIRST: 这个部份的时候 , 你要注意一件事 , 在增加 DataEntry.bbb 这句程序代码之前 , 你应该先要把
Sub bbb()
MsgBox "abcdefg"
End Sub
这部份增加到程序代码内 , 因为当你在 FIRST: 这个部份中作出修改时, 当你一个一个字地输入 ( DataEntry ) 这个字的时候 , 当你按到中间的 "." , 计算机就会显示一个小窗, 你就可以在里面看到 BBB 这个字了 , 这就证明了计算机找到了对应的对象 ... 嗯 ...
我想... 这个应该是解决问题的方法吧 . 先试试看吧~ 再有问题的话可以再问哦 ~ =)
發佈留言