如何使用EXCEL VBA制作类似打卡程序的功能?

如何使用EXCEL VBA制作类似打卡程序的功能?,第1张

【答案更新如下】:

Private Sub CommandButton1_Click() '按钮1的点击事件

  '获取文件框的值

  Dim iStr$

  iStr = ActiveSheet.TextBox1.Value

  If iStr = "" Then MsgBox "姓名不能为空!", 16: Exit Sub '退出sub

  'tf的初始值为False,判断出下面三种需要启用新行的情况,并标记为tf=True

  Dim g As Range, tf As Boolean, irow&, icol%

  Set g = Columns("D").Find(iStr, , , xlWhole, , xlPrevious) '在D列逆洞唯向精确查找

  If g Is Nothing Then '如果没查找到

      tf = True '如果D列不存在该姓名,则标记为tf=True

  Else

      irow = g.Row '获取单元格g的行号

      If DateValue(Range("E" &irow).Value) <>Date Then

          tf = True '如果该行E格的日期不等于今天日期,则标记为tf=True

      Else

          icol = g.End(2).Column + 1 '获取单元格g的右界的列号+1

          If icol >Columns("F").Column Then

              tf = True '如果icol已超出F列的列序号,则标记为tf=True

          End If

      End If

  End If

 纳磨培 '若tf的值为True,则对irow和icol重新赋值

  If tf Then

      irow = Range("D" &Rows.Count).End(3).Row + 1 '重新赋值irow=D列最大行号+1

      icol = Columns("E").Column '重新赋值icol,获取E列的列序号游笑

  End If

  '输出日期时间,并设置格式和边框线

  Range("D" &irow) = iStr '输出姓名

  Cells(irow, icol).NumberFormatLocal = "yyyy/m/dd h:mm:ss" '设置格式

  Cells(irow, icol).Value = Now '输出当前的日期时间

  Range("D" &irow &":F" &irow).Borders.LineStyle = xlContinuous  '添加框线

  MsgBox "打卡成功!", 64

End Sub

VBA必须寄生于已有的应用程序,必须依赖于它茄态指的"父"应用程序,例如EXCEL、Word、CAD,只能在它的"父"应颤配用程序中运行,而不能独立运行。

可以将VBA看作一种自动化语言,其作用通常就是使常用的应用程序自动化,起“控制器”的作用。

如果要变成独闭或立的应用软件,用VB或VBS吧;若有较高的界面要求,就考虑VB吧。VB具有独立的开发环境,可创建标准的应用程序并编译成可执行文件。

在工作表插入一命令按钮,并编程如下:

Private Sub CommandButton1_Click()

Range("E:J").ClearContents

Range("E1").Formula = "=IF(COUNTIF(D:D,B1),ROW(B1),ROW(B1)+COUNT(B:B))"

Range("E1").AutoFill Destination:=Range("E1:E" &Range("B65536").End(xlUp).Row), Type:=xlFillDefault

Range("F1").Formula = "=IF(COUNTIF(B:B,D1),ROW(D1),ROW(D1)+COUNT(D:D))"

Range("F1").AutoFill Destination:=Range("F1:F" &Range("D65536").End(xlUp).Row), Type:=xlFillDefault

Range("G1").Formula = "=INDIRECT("橡闷 &Chr(34) &"A" &Chr(34) &"&IF(SMALL(E:E,ROW())<=COUNT(B:B),SMALL(E:E,ROW()),SMALL(E:E,ROW())-COUNT(B:B)))"

Range("H1").Formula = "=INDIRECT(" &Chr(34) &"B" &Chr(34) &"&IF(SMALL(E:E,ROW())<=COUNT(B:B),SMALL(E:E,ROW()),SMALL(E:E,ROW())-COUNT(B:B)))"

Range("G1:H1").AutoFill Destination:=Range("G1:H" &Range("B65536").End(xlUp).Row), Type:=xlFillDefault

Range("I1").Formula = "=IF(ROW()<=COUNTIF(E:E," &Chr(34) &"<=" &Chr(34) &"&COUNT(B:B)),INDIRECT(" &Chr(34) &"C" &Chr(34) &"&MATCH(H1,D:D,0)),INDIRECT(" &Chr(34) &"C" &Chr(34) &"裤如宴&SMALL(F:F,ROW())-COUNT(D:D)))"

Range("J1").Formula = "胡银=IF(ROW()<=COUNTIF(E:E," &Chr(34) &"<=" &Chr(34) &"&COUNT(B:B)),H1,INDIRECT(" &Chr(34) &"D" &Chr(34) &"&SMALL(F:F,ROW())-COUNT(D:D)))"

Range("I1:J1").AutoFill Destination:=Range("I1:J" &Range("D65536").End(xlUp).Row), Type:=xlFillDefault

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12481479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存