【答案更新如下】:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)