Excel 组合框日期格式
我在Excel表格中工作,希望在某个日期范围内获得所有数据 我创建了一个用户表单,其中有两个组合框(一个用于开始日期,另一个用于结束日期)来选择日期范围 当我选择日期时,它以数字格式显示。e、 g.41118,日期为2012年7月28日Excel 组合框日期格式,excel,vba,Excel,Vba,我在Excel表格中工作,希望在某个日期范围内获得所有数据 我创建了一个用户表单,其中有两个组合框(一个用于开始日期,另一个用于结束日期)来选择日期范围 当我选择日期时,它以数字格式显示。e、 g.41118,日期为2012年7月28日 Private子组合框1_Change() ComboBox1.Value=格式(ComboBox1.Value,“dd-mm-yyyy”) 端接头 问题解决了,但速度很慢,选择日期需要10-15秒。在更改事件中更改组合框的值将再次触发事件,这有点像一个循环。
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日将在下拉菜单中出现五次,但我只需要一次。我按照您的建议执行了相同的操作&禁用事件,但问题未得到解决。请告诉我我能做什么第二个问题是重复组合框中的日期,我该怎么办?我按照您的建议做了,并尝试了上面的代码,但问题没有解决。我不知道是什么原因造成的是缓慢的&如何控制它。另外,请指导我在组合框中重复相同日期的另一个问题。请有人能帮我找出问题。禁用事件并不能解决问题。