VBA窗体控件练习2
(花点心思的时候,excel也可以做的精致。)
首先声明,这个简易版的职工档案管理系统是根据《别怕,excel vba其实很简单》这本书中的例子做的。
前几天夜里在听网易公开课app里的TED演讲中,听到有关学习类型方面的描述。
传统认为,人的记忆类型是不同的,有的人是视觉记忆者,有的人是听觉,有的人是嗅觉,有的是肌肉记忆等等,由此衍生出要针对个人制定出不同的学习方式。而人们也普遍接受这一观点,根据自我经验而认为自我擅长视觉记忆,或者听觉记忆,或者在某些特定的场景有着别人不及的天赋。
在某些场景,人忽然有一种好似经历过的感觉,比如,心中在想什么人要来的时候,那个人就到了,说曹操曹操就到,就是这个意思,从而感觉自己有着预知的天赋。
而事实并非如此,大多数人其实都一样,从出生起天赋异禀,甚至是能力偏向都没有本质上的区别,差别在于后天的经历,以及周围环境,他人以及自我心理暗示而产生我善长什么,不擅长什么的认知。
TED中,举了大量实例与论证来证明这一观点,比如在证明视觉记忆上,一张国际象棋棋盘上放了许多棋子,象棋大师可以一眼就能记忆住所有棋子的位置,而普通人只能记忆其中的三到八个棋子,这并不是说象棋大师都是优秀的视觉天赋者,事实上是象棋大师自我训练过程中不断形成的,棋子在摆放是按照国际象棋的规则摆放的,所以象棋大师才有惊人的记忆能力,当棋子再次随机摆放的时候,象棋大师与普通人没有什么本质的区别。
这一点说明我们在学习新东西的时候,事实上不存在以往经验中的擅长与不擅长的自我认知与否定,知晓这一点有助于我们在面对自我认为很困难的事情和学习上突破自我的心理障碍。
当然天赋异禀的人有,毕竟是少数。
言归正传,书中的这个例子,我初次看的时候直接略过了,因为感觉繁琐,而且难,这两天看的时候依旧看的很困惑,于是我采用了笨办法。
由于书中的控件名称都做了改动,于是我做了张图,把控件名称一一标注,从而知道各代码部分用的什么控件,然后照着代码,自己运行一边(不懂的就略过),然后把运行错误的地方改一下,点击看过程是怎样执行的,这样再次看代码就有不一样的感觉了。
代码如下:
职工档案表Option Explicit
Dim nrow As Long
Private Sub cmdadd_Click()
If MsgBox("确定在【职工档案】中添加该员工记录吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
nrow = Worksheets("职工档案").Range("a1").Range("a1").CurrentRegion.Rows.Count + 1
Call edit
End If
End Sub
Private Sub cmddel_Click()
If MsgBox("确定将该员工信息移动到【删除】工作表中吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
nrow = Worksheets("职工档案").Range("a1:a65536").Find(Range("c7").Value, lookat:=xlWhole).Row
Worksheets("职工档案").Rows(nrow).Copy Worksheets("删除").Range("a63356").End(xlUp).Offset(1, 0)
Worksheets("职工档案").Cells(nrow, "a").EntireRow.Delete
End If
End Sub
Private Sub cmdedit_Click()
If MsgBox("确定修改【职工档案】中该员工的信息吗?", vbQuestion + vbYesNo, "询问") = vbYes Then
nrow = Worksheets("职工档案").Range("a1:a65536").Find(Range("c7").Value, lookat:=xlWhole).Row
Call edit
End If
End Sub
Private Sub cmdend_Click()
nrow = Worksheets("职工档案").Range("a1").CurrentRegion.Rows.Count
Call findi
End Sub
Private Sub cmdfind_Click()
Dim col As Integer
If findname.Value = True Then
col = 7
Else
col = 1
End If
With Worksheets("职工档案")
Dim rng As Range
Set rng = .Columns(col).Find(findtext.Value, lookat:=xlWhole)
If Not rng Is Nothing Then
nrow = rng.Row
Call findi
Else
MsgBox "没有记录"
End If
findtext.Value = ""
End With
End Sub
Private Sub cmdfirst_Click()
nrow = 2
Call findi
End Sub
Private Sub cmdformer_Click()
nrow = Worksheets("职工档案").Range("a2:a65536").Find(Range("c7").Value, lookat:=xlWhole).Row - 1
Call findi
End Sub
Private Sub cmdnext_Click()
nrow = Worksheets("职工档案").Range("a1:a65536").Find(Range("c7").Value, lookat:=xlWhole).Row + 1
Call findi
End Sub
Sub findi()
With Worksheets("职工档案")
Range("c7:e7").Value = .Range(.Cells(nrow, 1), .Cells(nrow, 3)).Value
Range("c10:e10").Value = .Range(.Cells(nrow, 4), .Cells(nrow, 6)).Value
Range("c13").Value = .Cells(nrow, 7).Value
Range("e13").Value = .Cells(nrow, 8).Value
Range("c16:e16").Value = .Range(.Cells(nrow, 9), .Cells(nrow, 11)).Value
Range("c19").Value = .Cells(nrow, 12).Value
End With
End Sub
Sub edit()
With Worksheets("职工档案")
.Cells(nrow, "a").Resize(1, 3) = Range("c7:e7").Value
.Cells(nrow, "d").Resize(1, 3) = Range("c10:e10").Value
.Cells(nrow, 7).Value = Range("c13").Value
.Cells(nrow, 8).Value = Range("e13").Value
.Cells(nrow, 9).Resize(1, 3).Value = Range("c16:e16").Value
.Cells(nrow, 12).Value = Range("c19").Value '
End With
End Sub