Excel 组合框日期格式

Excel 组合框日期格式,excel,vba,Excel,Vba,我在Excel表格中工作,希望在某个日期范围内获得所有数据 我创建了一个用户表单,其中有两个组合框(一个用于开始日期,另一个用于结束日期)来选择日期范围 当我选择日期时,它以数字格式显示。e、 g.41118,日期为2012年7月28日 Private子组合框1_Change() ComboBox1.Value=格式(ComboBox1.Value,“dd-mm-yyyy”) 端接头 问题解决了,但速度很慢,选择日期需要10-15秒。在更改事件中更改组合框的值将再次触发事件,这有点像一个循环。

我在Excel表格中工作,希望在某个日期范围内获得所有数据

我创建了一个用户表单,其中有两个组合框(一个用于开始日期,另一个用于结束日期)来选择日期范围

当我选择日期时,它以数字格式显示。e、 g.41118,日期为2012年7月28日

Private子组合框1_Change()
ComboBox1.Value=格式(ComboBox1.Value,“dd-mm-yyyy”)
端接头

问题解决了,但速度很慢,选择日期需要10-15秒。

在更改事件中更改组合框的值将再次触发事件,这有点像一个循环。在更改值之前尝试禁用事件,然后再启用:

Private Sub ComboBox1_Change()
Application.EnableEvents = False
ComboBox1.Value = Format(ComboBox1.Value, "dd-mm-yyyy")
Application.EnableEvents = True
End Sub

以下代码只允许将格式为“dd.mm.yyyy”的日期值添加到文本框中(更改combobox的格式)。日期必须大于2000年1月1日且小于2099年12月31日,如果输入的日期是将来的日期,则会显示一条消息以发出警告:

Private Sub TextBox1_Change()
Dim ldm As Integer
Dim Reply As Long
Application.EnableEvents = False
If InStr(1, Join(Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "."), "|"), Right(TextBox1.Text, 1)) = 0 Then _
TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
If Len(TextBox1.Text) = 1 Then
    If TextBox1.Text > 3 Then
        TextBox1.Text = "0" & TextBox1.Text
    End If
ElseIf Len(TextBox1.Text) = 2 Then
    If Mid(TextBox1.Text, 2, 1) = "." Then
        TextBox1.Text = "0" & Left(TextBox1.Text, 1) & "."
        Exit Sub
    End If
    If TextBox1.Text < 31 Then
        TextBox1.Text = TextBox1.Text & "."
    Else
        TextBox1.Text = "31."
    End If
ElseIf Len(TextBox1.Text) = 4 Then
    If Right(TextBox1.Text, 1) > 1 Then
        TextBox1.Text = Left(TextBox1.Text, 3) & "0" & Right(TextBox1.Text, 1)
    End If
ElseIf Len(TextBox1.Text) = 5 Then
    If Right(TextBox1.Text, 1) = "." Then
        If Mid(TextBox1.Text, 4, 1) = 0 Then
            TextBox1.Text = Left(TextBox1.Text, 4)
            Exit Sub
        Else
            TextBox1.Text = Left(TextBox1.Text, 3) & "0" & Mid(TextBox1.Text, 4, 1) & "."
            Exit Sub
        End If
    End If
    If Right(TextBox1.Text, 2) < 13 Then
        TextBox1.Text = TextBox1.Text & "."
    Else
        TextBox1.Text = Left(TextBox1.Text, 3) & "12."
    End If
ElseIf Len(TextBox1.Text) = 7 Then
    If Right(TextBox1.Text, 1) <> "2" Then
        TextBox1.Text = Left(TextBox1.Text, 6) & "2"
    End If
ElseIf Len(TextBox1.Text) = 8 Then
    If InStr(1, Join(Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), "|"), Right(TextBox1.Text, 1)) = 0 Then _
    TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
    If Right(TextBox1.Text, 1) > 0 Then
        TextBox1.Text = Left(TextBox1.Text, 7) & "0"
    End If
ElseIf Len(TextBox1.Text) = 9 Then
    If InStr(1, Join(Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), "|"), Right(TextBox1.Text, 1)) = 0 Then _
    TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
ElseIf Len(TextBox1.Text) = 10 Then
    If IsNumeric(TextBox1.Text) = False Then TextBox1.Text = Left(TextBox1.Text, 8)
    ldm = Format(DateSerial((Right(TextBox1.Text, 4)), (Mid(TextBox1.Text, 4, 2)) + 1, 0), "d")
    If Left(TextBox1.Text, 2) > ldm Then TextBox1.Text = ldm & Right(TextBox1.Text, 8)
    If DateSerial(Right(TextBox1.Text, 4), Mid(TextBox1.Text, 4, 2), Left(TextBox1.Text, 2)) > Now() Then
        Reply = MsgBox("Das eingegebene Datum liegt in der Zukunft." & vbNewLine & "Wollen Sie es so lassen?", vbYesNo, "Datum in der Zukunft")
        If Reply = vbNo Then
            TextBox1.Text = Format(Now(), "DD.MM.YYYY")
        End If
    End If
    If Mid(TextBox1.Text, 3, 1) <> "." Then TextBox1.Text = Left(TextBox1.Text, 2) & "." & Right(TextBox1.Text, 7)
    If Mid(TextBox1.Text, 6, 1) <> "." Then TextBox1.Text = Left(TextBox1.Text, 5) & "." & Right(TextBox1.Text, 4)
ElseIf Len(TextBox1.Text) > 10 Then
    TextBox1.Text = Left(TextBox1.Text, 10)
End If
Application.EnableEvents = True
End Sub
Private子文本框1_Change()
Dim ldm作为整数
迟钝的回答
Application.EnableEvents=False
如果InStr(1,Join(数组(0,1,2,3,4,5,6,7,8,9,“.”,“|”)右(TextBox1.Text,1))=0,则_
TextBox1.Text=Left(TextBox1.Text,Len(TextBox1.Text)-1)
如果Len(TextBox1.Text)=1,则
如果TextBox1.Text>3,则
TextBox1.Text=“0”&TextBox1.Text
如果结束
ElseIf Len(TextBox1.Text)=2然后
如果Mid(TextBox1.Text,2,1)=“”,则
TextBox1.Text=“0”和左(TextBox1.Text,1)和“
出口接头
如果结束
如果TextBox1.Text<31,则
TextBox1.Text=TextBox1.Text&“
其他的
TextBox1.Text=“31。”
如果结束
ElseIf Len(TextBox1.Text)=4然后
如果正确(TextBox1.Text,1)>1,则
TextBox1.Text=左(TextBox1.Text,3)和“0”及右(TextBox1.Text,1)
如果结束
ElseIf Len(TextBox1.Text)=5然后
如果正确(TextBox1.Text,1)=“”,则
如果Mid(TextBox1.Text,4,1)=0,则
TextBox1.Text=左(TextBox1.Text,4)
出口接头
其他的
TextBox1.Text=Left(TextBox1.Text,3)&“0”和Mid(TextBox1.Text,4,1)&”
出口接头
如果结束
如果结束
如果正确(TextBox1.Text,2)<13,则
TextBox1.Text=TextBox1.Text&“
其他的
TextBox1.Text=左(TextBox1.Text,3)和“12”
如果结束
ElseIf Len(TextBox1.Text)=7然后
如果正确(TextBox1.Text,1)“2”,则
TextBox1.Text=左(TextBox1.Text,6)和“2”
如果结束
ElseIf Len(TextBox1.Text)=8然后
如果InStr(1,Join(数组(0,1,2,3,4,5,6,7,8,9),“|”)右(TextBox1.Text,1))=0,则_
TextBox1.Text=Left(TextBox1.Text,Len(TextBox1.Text)-1)
如果Right(TextBox1.Text,1)>0,则
TextBox1.Text=左(TextBox1.Text,7)和“0”
如果结束
ElseIf Len(TextBox1.Text)=9然后
如果InStr(1,Join(数组(0,1,2,3,4,5,6,7,8,9),“|”)右(TextBox1.Text,1))=0,则_
TextBox1.Text=Left(TextBox1.Text,Len(TextBox1.Text)-1)
ElseIf Len(TextBox1.Text)=10然后
如果IsNumeric(TextBox1.Text)=False,则TextBox1.Text=Left(TextBox1.Text,8)
ldm=格式(DateSerial((右(TextBox1.Text,4)),(中(TextBox1.Text,4,2))+1,0),“d”)
如果左(TextBox1.Text,2)>ldm,则TextBox1.Text=ldm&右(TextBox1.Text,8)
如果DateSerial(右(TextBox1.Text,4),中(TextBox1.Text,4,2),左(TextBox1.Text,2))>Now()那么
回复=MsgBox(“位于祖昆夫特的基准面”)&Vnewline和“您是谁?”,vbYesNo,“位于祖昆夫特的基准面”)
如果Reply=vbNo,则
TextBox1.Text=格式(现在为(),“DD.MM.YYYY”)
如果结束
如果结束
如果中间(TextBox1.Text,3,1)“.”,则TextBox1.Text=左(TextBox1.Text,2)&“.”和右(TextBox1.Text,7)
如果中间(TextBox1.Text,6,1)“.”,则TextBox1.Text=左(TextBox1.Text,5)&“.”和右(TextBox1.Text,4)
ElseIf Len(TextBox1.Text)>10然后
TextBox1.Text=Left(TextBox1.Text,10)
如果结束
Application.EnableEvents=True
端接头

偶数日期重复,因此我想删除出现多个日期的同一日期。i、 e如果五行的日期均为2016年1月1日,则2016年1月1日将在下拉菜单中出现五次,但我只需要一次。我按照您的建议执行了相同的操作&禁用事件,但问题未得到解决。请告诉我我能做什么第二个问题是重复组合框中的日期,我该怎么办?我按照您的建议做了,并尝试了上面的代码,但问题没有解决。我不知道是什么原因造成的是缓慢的&如何控制它。另外,请指导我在组合框中重复相同日期的另一个问题。请有人能帮我找出问题。禁用事件并不能解决问题。