使用VBA以法语显示计算日期



我创建了一个宏来计算日期值,然后将其转换为法语:

Sub FrenchFutureDate()
Selection.TypeText Text:=Format(CDate(ActiveDocument.MailMerge.DataSource.DataFields("RREG_Registr_File_GSFTDateReceived").Value) + 30, "d, mmmm, yyyy")
Selection.LanguageID = wdFrench
End Sub

注意:原始/基线日期作为邮件合并值传递。

我们希望将函数更改为使用当前日期。

我将邮件合并字段引用替换为日期(见下文(。

问题是日期不再以法语显示,而是以英语显示。

Sub FrenchFutureDate()          
Selection.TypeText Text:=Format(Date + 30, "mmmm d, yyyy")
Selection.LanguageID = wdFrench
End Sub

您可以使用类似的函数,只需替换为法语月份名称,并将函数重命名为MonthNameFrench:

' Returns the English month name for the passed month number.
' Accepted numbers are 1 to 12. Other values will raise an error.
' If Abbreviate is True, the returned name is abbreviated.
'
' 2015-11-25. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function MonthNameInvariant( _
ByVal Month As Long, _
Optional ByVal Abbreviate As Boolean) _
As String

Const AbbreviatedLength As Integer = 3

Dim MonthName( _
MinMonthValue To _
MaxMonthValue)      As String
Dim Name                As String

If Not IsMonth(Month) Then
Err.Raise DtError.dtInvalidProcedureCallOrArgument
Exit Function
End If

' Non-localized (invariant) month names.
MonthName(1) = "January"
MonthName(2) = "February"
MonthName(3) = "March"
MonthName(4) = "April"
MonthName(5) = "May"
MonthName(6) = "June"
MonthName(7) = "July"
MonthName(8) = "August"
MonthName(9) = "September"
MonthName(10) = "October"
MonthName(11) = "November"
MonthName(12) = "December"

If Abbreviate = True Then
Name = Left(MonthName(Month), AbbreviatedLength)
Else
Name = MonthName(Month)
End If

MonthNameInvariant = Name
End Function

它取自我的VBA工程中的DateText.bas模块。日期

常数可以在模块DateBase.bas中找到。

只要Word的日期字段格式支持您想要使用的语言(在您的情况下是法语(,您就可以这样做:

Sub InsertDatePlus30FR()
Dim f As Word.Field
Set f = Selection.Fields.Add(Selection.Range, WdFieldType.wdFieldQuote, """" & Format(Date + 30, "YYYY-MM-DD") & """ @ ""MMMM, D, YYYY""", False)
f.Code.LanguageID = wdFrench
f.Update
' If you want to remove the field, uncomment the following line
' f.Unlink
Set f = Nothing
End Sub

(注意,当你在Word中以这种方式构造日期时,Word总是将"NNNN-NN-NN"格式解释为YYYY-MM-DD,而不是YYYY-DD-MM——假设它是一个日期(。

由于您的问题也被标记为Excel,您可能会考虑使用以下函数来获取法语月份名称:

函数mois()

  • a(使用(的缩写方括号方法(公式评估来获得所有法语月份名称的基于1的二维数组(请参阅格式前缀[$-80C](和
  • b( 简单地返回由第一个参数indx指示的月份字符串,其长度可以是完整的,也可以是缩写的,符合系统选项(第二个参数abbrev(
Option Explicit
Function mois(ByVal indx As Long, Optional ByVal abbrev = False) As String
'Meth: Excel evaluation based on column sequence
'Purp: return French month name
'0) escape clause for invalid indices
If indx > 12 Or indx < 1 Then Mois = "?": Exit Function
'a) get 1-based 1-dim array of french months name
Dim months
If abbrev Then
months = [Text(Date(0,Column(A:L),1),"[$-80C]mmm")]
Else    ' full length
months = [Text(Date(0,Column(A:L),1),"[$-80C]mmmm")]
End If
'b) return function result
mois = months(indx)
End Function

示例调用

Debug.Print Mois(4)       ' ~~> avril
Debug.Print Mois(4, True) ' ~~> avr.

最新更新