我创建了一个宏来计算日期值,然后将其转换为法语:
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.