Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据到特定单元格Excel VBA休假计划_Excel_Excel Formula_Vba - Fatal编程技术网

数据到特定单元格Excel VBA休假计划

数据到特定单元格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, _

我正在使用一个表单制作休假计划表,其中用户选择其姓名,而不是开始日期和结束日期,并使用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, _
                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),"")