Excel VBA IF OR日期声明

时间:2018-08-20 17:38:54

标签: excel vba excel-vba

我正在尝试确定单元格$H$3或单元格$H$4的日期是否小于今天的日期,然后显示用户表单,否则请显示我的形状,如果这些单元格中的任何一个等于今天的日期,则出于某种原因只有单元格$H$3和单元格$H$4都具有值时,我的代码才能工作。这是我的代码:

Sub textbox96()
Dim ws As Worksheet
Set ws = Sheets("userform")

If (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value < Date) Or IsEmpty(ws.Range("H3").Value) Or _
    (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value < Date) Or IsEmpty(ws.Range("H4").Value) Then
    employeeselection.Show

    ElseIf (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value = Date) Or _
    (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value = Date) Then

        ActiveSheet.Shapes("block").Visible = False
        ActiveSheet.Shapes("TextBox 96").Visible = False
        ActiveSheet.Shapes("group 151").Visible = False
        ActiveSheet.Shapes("group 145").Visible = False
        ActiveSheet.Shapes("group 133").Visible = False
        ActiveSheet.Shapes("group 139").Visible = False
        ActiveSheet.Shapes("group 127").Visible = False

 End If



End Sub

2 个答案:

答案 0 :(得分:2)

记住一个空白单元格还会为您提供True的{​​{1}}。因此,您必须将其考虑在内

例如:

If ws.Range("H3") < Date

修改

  

@SiddharthRout由于某些原因,当我尝试输入代码时,我的形状不会隐藏

您尝试过这种方法吗?

 If (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value < Date) Or _
    (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value < Date) Then


 End If
  

@SiddharthRout您的编辑对我有用!如果$ H $ 3或$ H $ 4为空,则有什么方法可以添加,那么employeeelection.show

 If (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value < Date) Or _
    (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value < Date) Then
    '~~> Show userform
    employeeselection.Show
 ElseIf (Len(Trim(ws.Range("H3").Value)) <> 0 And ws.Range("H3").Value = Date) Or _
        (Len(Trim(ws.Range("H4").Value)) <> 0 And ws.Range("H4").Value = Date) Then
    '~~> Hide shapes here
 End If

答案 1 :(得分:0)

使用 IsDate 功能解决问题。如果ws.Range(“ H4”)。Value为Null / Empty,则IsDate将返回false。

  Sub textbox96()

        Dim ws As Worksheet

        Set ws = Sheets("userform")
       ' MsgBox IsDate(ws.Range("H3").Value)
' MsgBox IsDate(ws.Range("H4").Value)
 'MsgBox (IsDate(ws.Range("H3").Value) And IsDate(ws.Range("H4").Value))
        'If (IsDate(ws.Range("H3").Value) And (Not IsDate(ws.Range("H4").Value))) Then
            If ws.Range("H3").Value < Date Or (Not IsDate(ws.Range("H4").Value)) Then
                employeeselection.Show
            Else
                If ws.Range("H3").Value >= Date Or (Not IsDate(ws.Range("H4").Value)) Then
                    ActiveSheet.Shapes("block").Visible = False
                    ActiveSheet.Shapes("TextBox 96").Visible = False
                    ActiveSheet.Shapes("group 151").Visible = False
                    ActiveSheet.Shapes("group 145").Visible = False
                    ActiveSheet.Shapes("group 133").Visible = False
                    ActiveSheet.Shapes("group 139").Visible = False
                    ActiveSheet.Shapes("group 127").Visible = False
                End If
             End If
         'Else
         '  MsgBox "Here"
         'End If
    End Sub