~ 上傳‧分享‧網賺 ~
~ 免費上傳空間‧請即申請 Freak Share ~
~ 進入後請點選左上角 注冊 ! ~
~ 声明事项 ~
如各位想把以下本文章转贴 , 请记得要注明出处.
本文章之内容为本人之经验所写, 绝无抄袭成份, 特此声明.
由于图片制作需时, 所以更新会比较慢.
存放图片的 SHARE A PIC SERVER 可能读取速度较慢, 请耐心等待.
既然准备中作已经完成 , 我们就一起来写一个非教学而是有实际用途的模块吧 ~ 不过由于时间关系 , 所以我已经做好了 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 留言:
發佈留言