数据到特定单元格Excel VBA休假计划
我正在使用一个表单制作休假计划表,其中用户选择其姓名,而不是开始日期和结束日期,并使用VBA进行申请。我正在将该数据存储到工作表a、B和C列数据到特定单元格Excel VBA休假计划,excel,excel-formula,vba,Excel,Excel Formula,Vba,我正在使用一个表单制作休假计划表,其中用户选择其姓名,而不是开始日期和结束日期,并使用VBA进行申请。我正在将该数据存储到工作表a、B和C列 Dim irow As Long, _ wS As Worksheet, _ NextRow As Long, _ cF As Range Set wS = Worksheets("Sheet1") With wS With .Range("A:A") Set cF = .Find(What:=Me.Combo.Value, _
Dim irow As Long, _
wS As Worksheet, _
NextRow As Long, _
cF As Range
Set wS = Worksheets("Sheet1")
With wS
With .Range("A:A")
Set cF = .Find(What:=Me.Combo.Value, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
End With
If Not cF Is Nothing Then
If cF.Offset(0, 1) <> vbNullString Then
Set cF = cF.End(xlToRight).Offset(0, 1)
cF.Value = Me.startdate.Value
cF.Offset(0, 1).Value = Me.enddate.Value
Else
.Cells(cF.Row, "B").Value = Me.startdate.Value
.Cells(cF.Row, "C").Value = Me.enddate.Value
End If
Else
NextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
.Cells(NextRow, "A").Value = Me.Combo.Value
.Cells(NextRow, "B").Value = Me.startdate.Value
.Cells(NextRow, "C").Value = Me.enddate.Value
End If
End With
Dim irow尽可能长_
wS-As工作表_
下一步,只要_
cF As系列
设置wS=工作表(“表1”)
与wS
带.Range(“A:A”)
设置cF=.Find(What:=Me.Combo.Value_
之后:=.个单元格(1,1)_
LookIn:=xlValues_
看:=xlother_
搜索顺序:=xlByRows_
SearchDirection:=xlNext_
MatchCase:=假_
SearchFormat:=False)
以
如果不是,那么cF什么都不是
如果cF.Offset(0,1)vbNullString,则
设置cF=cF.End(xlToRight)。偏移量(0,1)
cF.Value=Me.startdate.Value
cF.Offset(0,1).Value=Me.enddate.Value
其他的
.Cells(参见第行,“B”).Value=Me.startdate.Value
.Cells(cF.Row,“C”).Value=Me.enddate.Value
如果结束
其他的
NextRow=.Cells(.Rows.Count,“A”).End(xlUp).Offset(1,0).Row
.Cells(NextRow,“A”).Value=Me.Combo.Value
.Cells(NextRow,“B”).Value=Me.startdate.Value
.Cells(NextRow,“C”).Value=Me.enddate.Value
如果结束
以
在存储数据之后,我使用一个公式在日历中显示这些名称
=IFERROR(索引($A$20:$A$151,匹配(1,如果(日期($D$1,行($A$3:$A3),B$2)>=$B$20:$B$151,如果(日期($D$1,行($A$3:$A3),B$2)这是一个UDF,您可以直接在工作表上用作公式:
Function vac(dt As Date, rngnme As Range, rngstrt As Range, rngend As Range) As String
Application.Volatile
Dim i&
Dim temp As String
temp = ""
For i = 1 To rngnme.Rows.Count
If rngnme.Cells(i, 1) <> "" Then
If rngstrt.Cells(i, 1) <= dt And rngend.Cells(i, 1) >= dt Then
temp = temp & rngnme.Cells(i, 1) & ","
End If
End If
Next i
If temp = "" Then
vac = CVErr(xlErrNA)
ElseIf Len(temp) - Len(Replace(temp, ",", "")) > 3 Then
vac = "> 3"
Else
vac = Left(temp, Len(temp) - 1)
End If
End Function
然后反复抄写
如果当天没有分配任何人,则返回“”,或者返回以逗号分隔的名称,或者如果有三个以上,则返回“>3”
然后,您可以应用条件格式规则“
=B3=“>3”
,并将其设置为红色或其他颜色以使其更为可见。ElseIf Len上的错误(替换(临时),“,”)-Len(临时)>3then@KzhelFarmer我很高兴我们终于能为你找到适合你的东西。
=IFERROR(vac(DATE($D$1,ROWS($A$3:$A3),B$2),$A$20:$A$30,$B$20:$B$30,$C$20:$C$30),"")