2008年7月30日星期三

Part13 - VBA 学习第十二回 - 第一个记录 ( 简体 )

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

~ 声明事项 ~

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

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

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

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

Picture


既然准备中作已经完成 , 我们就一起来写一个非教学而是有实际用途的模块吧 ~ 不过由于时间关系 , 所以我已经做好了 XD

好 , 你先不要看程序代码 , 我们要先想一想 , 要在报表增加一个新记录 , 所以我们会预到一个之前有讨论过的问题 , 就是如何要计算机明白 , 我们到底想怎样 . 利用之前我教过你的东西 , 我们就可以做到教计算机判断的目标 .


( Pic13_1 )

在模块 DataEntry 内的 Sub Entry() , 我们有这样的一段程序代码 , 目的就是要让计算机明白 , 我们要它用什么条件来做判断 , 也就是说 如果 Sheet1 中的储存格 B2 等于空白 , 变量 Number = 2 , 否则 Number = 1 .

当 Number 这个变量的值是 1 或者 2 , 我们都会要它根据我们的指示进行工作 , 也就是程序代码中的 :

If Number = 1 Then GoTo First
If Number = 2 Then GoTo Second

First: 的部份现在先不谈 , 我们先解决了第一次使用时所带出来的问题 , 稍后回来再想 .

在 Second: 的部份中 , 程序代码就只有一句 , 就是要计算机找到 模块 NewReport 内的 FirstRecord 来执行 .


( Pic13_2 )

在 模块 NewReport 内的 FirstRecord 中 , 我们第一件事要做的 , 就是要计算机在 A2 的储存格中 , 把记录编号定为 "1" , 所以就利用到最初学到的方法 Worksheets("Sheet1").Range("A2").Value = "1" .

之后 , 我们要计算机判断到底使用者选择了状态 , 到底是 PI , RM 还是 OUT , 所以 , 我们要计算机去检查使用者的选择 , 如果使用者选择了什么 , 计算机就要在报表的状态区记录什么 . UserForm1.OptionButton1.Value = True 的意思 , 就是被选择 , 如果是 = Flase , 就是没有被选择了 . 只要计算机判断成功 ( 就是使用者选择了其中的个选项 ) , 计算机就会继续执行程序 , 打个比喻 , 如果 OptionButton1 ( PI ) 被选择 , Sheet1 中的储存格 B2 的值就变成 PI , 储存格 C2 和 D2 的值就分别变成 TextBox1 和 2 内的文件 ( If UserForm1.OptionButton1.Value = True Then Worksheets("Sheet1").Range("C2").Value = UserForm1.TextBox1.Text ) , 最后就在日期位置加上一条函数 ( Worksheets("Sheet1").Range("E2").Formula = "=today()" ) , 不过 , 由于 =TODAY() 这个函数会根据计算机内的时钟而每天变化 , 但是我们的记录是在今天发生就是今天发生 , 不会每天日期都改变的 , 如果日期每天都改变 , 报表就失去了记录日期的意义和用途 , 所以到最后 , 我们又在程序代码上加上一句 ( Worksheets("Sheet1").Range("E2").Value = Worksheets("Sheet1").Range("E2").Value ) 让储存格 E2 的值变成 E2 的值 .

可能你会觉得 " 把 储存格 E2 的值变成 储存格 E2 的值 " 这句说话很搞笑 , 但是我要告诉你 , 这是一个很好玩 , 而且是必需要知道的东西 . 刚才有说过 , 函数 =today() 是会按照计算机内的时钟来每天更新的 , 今天你打开这个报表的时候是 1 号 , 记录了东西 , 下班时看到记录没错 , 但是到第二天 2 号回来的时候 , 你就会看到报表内所记录的日期全部都变成 2 号了 , 所以为了记录正确的发生日期 , 都必须要把函数式所得到的结果放在原本的位置上 , 并把原本的函数式取代 ( 由于这样增加函数式取答案比较方便 , 所以我自己所设计的程序很多时候都会这样做 , 就是设定了函数式 , 再把 " 储存格 XX 的值变成 储存格 XX 的值 "

如果你还是搞不懂 , 来 , 做个实验吧 ~ 在 E2 的储存格打上 =TODAY() , 之后你会看到 储存格 E2 的值是一个日期 , 但是当你看看上面 , 显示 Fx 的位置 , 你却可以清楚地看到 =TODAY() 的存在 , 当你要计算机进行 " 把 储存格 XX 的值变成 储存格 XX 的值 " , 就是自己把储存格复制 , 再选择性贴上 , 选择只贴上 " 值 " , 这样你就会发现 , 不管你在那里看过去 , 函数式都已经不见了 , 留下来的就只有一个不会随意改变的 " 值 "

判断 PI , RM 和 OUT 三个不同状态的方法是一样的 , 所以你可以看到三组程序代码是很接近的 , 只是当中的储存格位置和 OptionButton 的序号不同了 . 到程序的最后一段 ( '如果 OptionButton 1 - 3 都没有被选择 , 就显示讯息 "没有选择状态" ) , 这句程序代码太长了 , 所以我在这里再贴一次 ( If UserForm1.OptionButton1.Value = False And UserForm1.OptionButton2.Value = False And UserForm1.OptionButton3.Value = False Then MsgBox "没有选择状态" ) , 这句程序代码能够告诉计算机 , 当发现三个选项都没有被选择的时候要做什么 , 当选项 1 , 2 和 3 都没有被选择 , 就显示一个讯息 "没有选择状态" , 之后 , 因为三个选项都没有被选择 , 所以这个记录是不成立的 , 所以之前在记录编号增加了的东西 , 就应该删除 ( If Worksheets("Sheet1").Range("B2").Value = "" Then Worksheets("Sheet1").Range("A2").Value = "" )

当然 , 有一些东西我是没有加进去的 , 因为这是我特别为你安排的哦 ~ 你要学懂怎样好好利用 VBA , 这个练习可不能小 ~ 嘿嘿嘿 ~

听好了 ! 问题来噜 ~

既然我们有能力要计算机判断三个选项有没有被选择 , 如果没有选择就会跳出一个讯息提示 , 那么 , 记录时不可能不记录产品和数量的数据吧 , 如果没有这些数据 , 这一行记录都是没用的哦 ~

所以 , 你要做的 , 就是利用刚才的方法 , 想一想到底要怎么写这一部份的程序代码 , 让计算机帮你判断到底使用者有没有输入足够的数据 , 如果没有的话 , 就跳一个讯息出来 .

放心 , 如果你能够看得懂上面的东西 , 这个问题是一点困难都没有的 :) 再给你一个提示 , 记住 "判断" 这个字眼 XD 答案来的哦 ~~~ 呵呵呵 ~~~

0 留言:

最新回應

Loading...

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


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