我想在VBA MS字上获得两个datepicker的值,并计算与约会者的差异

发布于 2025-01-21 04:18:52 字数 4029 浏览 3 评论 0原文

我想在VBA MS字上获取两个datePicker的值,然后使用Notatediff来计算两个日期之间的差异,并在文档上显示它。 我可以通过使用“ contentControl.range.text”获得datepicker的值,但是当我将其与日期化一起使用时,请说“ type missmatch”。

 Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl As String
CCtrl = "Date1"

Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
For Each control In doc.ContentControls
    If control.Tag = CCtrl Then
        chkExt = True
        Exit For
    End If
Next

If chkExt = False Then
    MsgBox "Nothing"
    Exit Sub
End If

Dim ChangeType As Date
ChangeType = control.Range.Text

Debug.Print IsDate(ChangeType)

End Sub

更新:我发现问题显示日期的显示会影响代码,如果以这种方式显示日期 正常格式

但如果它以泰语显示不起作用,则将 thai格式

因此,是否有任何变方法可以使显示为泰语格式,但是它的价值是它的价值与普通的相同。

我找到了解决方案,感谢我的朋友,这样做的方法是通过拆分日期,然后在文档中使用日期以这种方式使用日期仍显示为泰语格式 在这里,对我有用的代码:

Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl, CCtrl2 As String
CCtrl = "Date1"
CCtrl2 = "Date2"



Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
Dim control2 As ContentControl


    For Each control2 In doc.ContentControls
        If control2.Tag = CCtrl2 Then
        control2.DateDisplayFormat = "d ´´´´ bbbb"
         Dim Result1() As String
        Result1() = Split(control2.Range.Text)
        Dim MyClasses1 As New Collection
         MyClasses1.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses1.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses1.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses1.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses1.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses1.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses1.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses1.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses1.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses1.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses1.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses1.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
         Dim engDate1 As String
         engDate1 = Result1(0) & "/" & MyClasses1(Result1(1)) & "/" & Result1(2)
         Debug.Print IsDate(engDate1)
        Exit For
        End If
    Next



    For Each control In doc.ContentControls
        'check if there is a tag
        If control.Tag = CCtrl Then
        control.DateDisplayFormat = "d ´´´´ bbbb"
        
        'For spliting Date as 00 00 00
        Dim Result() As String
        Result() = Split(control.Range.Text)
        
        'Creating Keys
        Dim MyClasses As New Collection
         MyClasses.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
        
        'Put together the Date
        Dim engDate As String
        engDate = Result(0) & "/" & MyClasses(Result(1)) & "/" & Result(2)
        Debug.Print IsDate(engDate)
        Exit For
        End If
    Next
     Dim ccdisplayDateDiff As ContentControl
     Dim displayDateDiff As String
     displayDateDiff = "displayDateDiff"
     For Each ccdisplayDateDiff In doc.ContentControls
        If ccdisplayDateDiff.Tag = displayDateDiff Then
         ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
         Exit For
        End If
     Next
End Sub

PS。外星人语言是无法显示的泰语,在收藏中是泰语的月份。对我的英语不好。

感谢大家的帮助:)

I want to get the value of two Datepicker on VBA ms-Word and then use DateDiff to calculate the difference between two dates and make it display on the document.
I can get the value of the Datepicker by using "ContentControl.Range.Text" but when I use it with DateDiff is saying "Type missmatch".

 Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl As String
CCtrl = "Date1"

Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
For Each control In doc.ContentControls
    If control.Tag = CCtrl Then
        chkExt = True
        Exit For
    End If
Next

If chkExt = False Then
    MsgBox "Nothing"
    Exit Sub
End If

Dim ChangeType As Date
ChangeType = control.Range.Text

Debug.Print IsDate(ChangeType)

End Sub

UPDATE:I Find the problem The display of the date is affecting the code if the date is display this way is working fine
Normal Format

but if it display in Thai format is not working
Thai Format

so is there any workaround to make the display as Thai format but the value of it is the same as the normal one.

I found the Solution Thanks to my Friend so the way to do it is by split the date and then use DateDiff this way on the Document the date still show as thai format but still got the value to use in DateDiff
Here the Code that work for me:

Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl, CCtrl2 As String
CCtrl = "Date1"
CCtrl2 = "Date2"



Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
Dim control2 As ContentControl


    For Each control2 In doc.ContentControls
        If control2.Tag = CCtrl2 Then
        control2.DateDisplayFormat = "d ´´´´ bbbb"
         Dim Result1() As String
        Result1() = Split(control2.Range.Text)
        Dim MyClasses1 As New Collection
         MyClasses1.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses1.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses1.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses1.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses1.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses1.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses1.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses1.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses1.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses1.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses1.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses1.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
         Dim engDate1 As String
         engDate1 = Result1(0) & "/" & MyClasses1(Result1(1)) & "/" & Result1(2)
         Debug.Print IsDate(engDate1)
        Exit For
        End If
    Next



    For Each control In doc.ContentControls
        'check if there is a tag
        If control.Tag = CCtrl Then
        control.DateDisplayFormat = "d ´´´´ bbbb"
        
        'For spliting Date as 00 00 00
        Dim Result() As String
        Result() = Split(control.Range.Text)
        
        'Creating Keys
        Dim MyClasses As New Collection
         MyClasses.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
        
        'Put together the Date
        Dim engDate As String
        engDate = Result(0) & "/" & MyClasses(Result(1)) & "/" & Result(2)
        Debug.Print IsDate(engDate)
        Exit For
        End If
    Next
     Dim ccdisplayDateDiff As ContentControl
     Dim displayDateDiff As String
     displayDateDiff = "displayDateDiff"
     For Each ccdisplayDateDiff In doc.ContentControls
        If ccdisplayDateDiff.Tag = displayDateDiff Then
         ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
         Exit For
        End If
     Next
End Sub

ps. The Alien language is Thai language that can't be display and in the collection is the month in Thai language.Sorry for my bad English.

Thanks everyone for helping :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

看轻我的陪伴 2025-01-28 04:18:52

您只需通过将日期语言环境和格式更改为英语,收集数据,然后将其更改回泰语来实现这一目标。

这样的事情:

Sub Test2()
    Dim doc As Document
    Set doc = Application.ActiveDocument

    Const CCtrl As String = "Date1"
    Const CCtrl2 As String = "Date2"
    Const displayDateDiff As String = "displayDateDiff"

    Dim control As ContentControl
    Dim ccdisplayDateDiff As ContentControl
    Dim engDate As String, engDate1 As String
    For Each control In doc.ContentControls
        Select Case control.Tag
        Case CCtrl, CCtrl2
            control.DateDisplayLocale = wdEnglishUS
            control.DateDisplayFormat = "MMMM d YYYY"
            
            If control.Tag = CCtrl Then
                engDate = control.Range.Text
            ElseIf control.Tag = CCtrl2 Then
                engDate1 = control.Range.Text
            End If
            
            control.DateDisplayLocale = wdThai
            control.DateDisplayFormat = "d ´´´´ bbbb"
        
        Case displayDateDiff
            Set ccdisplayDateDiff = control
        End Select
    Next
    
    If Not ccdisplayDateDiff Is Nothing Then ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
    
End Sub

You can achieve this simply by changing the date locale and format to English, collecting your data, then change it back to Thai.

Something like this:

Sub Test2()
    Dim doc As Document
    Set doc = Application.ActiveDocument

    Const CCtrl As String = "Date1"
    Const CCtrl2 As String = "Date2"
    Const displayDateDiff As String = "displayDateDiff"

    Dim control As ContentControl
    Dim ccdisplayDateDiff As ContentControl
    Dim engDate As String, engDate1 As String
    For Each control In doc.ContentControls
        Select Case control.Tag
        Case CCtrl, CCtrl2
            control.DateDisplayLocale = wdEnglishUS
            control.DateDisplayFormat = "MMMM d YYYY"
            
            If control.Tag = CCtrl Then
                engDate = control.Range.Text
            ElseIf control.Tag = CCtrl2 Then
                engDate1 = control.Range.Text
            End If
            
            control.DateDisplayLocale = wdThai
            control.DateDisplayFormat = "d ´´´´ bbbb"
        
        Case displayDateDiff
            Set ccdisplayDateDiff = control
        End Select
    Next
    
    If Not ccdisplayDateDiff Is Nothing Then ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
    
End Sub
故人的歌 2025-01-28 04:18:52
Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl, CCtrl2 As String
CCtrl = "Date1"
CCtrl2 = "Date2"



Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
Dim control2 As ContentControl


    For Each control2 In doc.ContentControls
        If control2.Tag = CCtrl2 Then
        control2.DateDisplayFormat = "d ´´´´ bbbb"
         Dim Result1() As String
        Result1() = Split(control2.Range.Text)
        Dim MyClasses1 As New Collection
         MyClasses1.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses1.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses1.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses1.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses1.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses1.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses1.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses1.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses1.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses1.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses1.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses1.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
         Dim engDate1 As String
         engDate1 = Result1(0) & "/" & MyClasses1(Result1(1)) & "/" & Result1(2)
         Debug.Print IsDate(engDate1)
        Exit For
        End If
    Next



    For Each control In doc.ContentControls
        'check if there is a tag
        If control.Tag = CCtrl Then
        control.DateDisplayFormat = "d ´´´´ bbbb"
        
        'For spliting Date as 00 00 00
        Dim Result() As String
        Result() = Split(control.Range.Text)
        
        'Creating Keys
        Dim MyClasses As New Collection
         MyClasses.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
        
        'Put together the Date
        Dim engDate As String
        engDate = Result(0) & "/" & MyClasses(Result(1)) & "/" & Result(2)
        Debug.Print IsDate(engDate)
        Exit For
        End If
    Next
     Dim ccdisplayDateDiff As ContentControl
     Dim displayDateDiff As String
     displayDateDiff = "displayDateDiff"
     For Each ccdisplayDateDiff In doc.ContentControls
        If ccdisplayDateDiff.Tag = displayDateDiff Then
         ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
         Exit For
        End If
     Next
End Sub
Sub Test1()
'
' Test1 Macro
'
'
Dim doc As Document
Set doc = Application.ActiveDocument

Dim CCtrl, CCtrl2 As String
CCtrl = "Date1"
CCtrl2 = "Date2"



Dim chkExt As Boolean
chkExt = False

Dim control As ContentControl
Dim control2 As ContentControl


    For Each control2 In doc.ContentControls
        If control2.Tag = CCtrl2 Then
        control2.DateDisplayFormat = "d ´´´´ bbbb"
         Dim Result1() As String
        Result1() = Split(control2.Range.Text)
        Dim MyClasses1 As New Collection
         MyClasses1.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses1.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses1.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses1.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses1.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses1.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses1.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses1.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses1.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses1.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses1.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses1.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
         Dim engDate1 As String
         engDate1 = Result1(0) & "/" & MyClasses1(Result1(1)) & "/" & Result1(2)
         Debug.Print IsDate(engDate1)
        Exit For
        End If
    Next



    For Each control In doc.ContentControls
        'check if there is a tag
        If control.Tag = CCtrl Then
        control.DateDisplayFormat = "d ´´´´ bbbb"
        
        'For spliting Date as 00 00 00
        Dim Result() As String
        Result() = Split(control.Range.Text)
        
        'Creating Keys
        Dim MyClasses As New Collection
         MyClasses.Add Item:="01", Key:="Á¡ÃÒ¤Á"
         MyClasses.Add Item:="02", Key:="¡ØÁÀҾѹ"
         MyClasses.Add Item:="03", Key:="ÁÕ¹Ò¤Á"
         MyClasses.Add Item:="04", Key:="àÁÉÒ¹"
         MyClasses.Add Item:="05", Key:="¾ÄÉÀÒ¤Á"
         MyClasses.Add Item:="06", Key:="ÁԶعÒ¹"
         MyClasses.Add Item:="07", Key:="¡Ã¡®Ò¤Á"
         MyClasses.Add Item:="08", Key:="ÊÔ§ËÒ¤Á"
         MyClasses.Add Item:="09", Key:="¡Ñ¹ÂÒ¹"
         MyClasses.Add Item:="10", Key:="µØÅÒ¤Á"
         MyClasses.Add Item:="11", Key:="¾ÄȨԡÒ¹"
         MyClasses.Add Item:="12", Key:="¸Ñ¹ÇÒ¤Á"
        
        'Put together the Date
        Dim engDate As String
        engDate = Result(0) & "/" & MyClasses(Result(1)) & "/" & Result(2)
        Debug.Print IsDate(engDate)
        Exit For
        End If
    Next
     Dim ccdisplayDateDiff As ContentControl
     Dim displayDateDiff As String
     displayDateDiff = "displayDateDiff"
     For Each ccdisplayDateDiff In doc.ContentControls
        If ccdisplayDateDiff.Tag = displayDateDiff Then
         ccdisplayDateDiff.Range.Text = DateDiff("d", engDate, engDate1)
         Exit For
        End If
     Next
End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文