2008年7月28日星期一

Part11 - VBA 学习第十回 - 正确 , 不正确 ( 简体 )

| |
~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~

~ 声明事项 ~

如各位想把以下本文章转贴 , 请记得要注明出处.

本文章之内容为本人之经验所写, 绝无抄袭成份, 特此声明.

由于图片制作需时, 所以更新会比较慢.

存放图片的 SHARE A PIC SERVER 可能读取速度较慢, 请耐心等待.

Picture


上一次有提过 , 如果按照以下的程序代码


( 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 这个字了 , 这就证明了计算机找到了对应的对象 ... 嗯 ...

我想... 这个应该是解决问题的方法吧 . 先试试看吧~ 再有问题的话可以再问哦 ~ =)

最新回應

Loading...

有事啟奏‧無事閒聊 ~ 哈 ~


米高積遜全復刻 哈利波特 Michael Jackson 妙麗 金曲獎 MJ 迈克尔杰克逊其实没有死!美国CBC电台已证实 哈利波特 hongkong168 蓮花河畔景苑 盧廣仲 鄧麗欣 不想放手New! 陳珊妮 方大同 巨乳排球 痞子英雄 23 東風 蕭閎仁 米高積遜全復刻 上海 倒塌 南王姐妹花 周杰倫 變形金剛2下載 michael jackson 去世 天文台 米高積遜 花拉科茜 天圖佈局 浪卡 耳廓狐 神探俏嬌娃 韶关旭日玩具厂 譚曉風 严妍 僧老少閒 地下天文台 金泰浩 百老匯 巨乳排球 陳振聰 柯柏文 aika 麥可傑克森