我正在尝试编写代码,以法语返回当前月份的名称。我已经创建了一个集合,它确实返回了我的月份,但是我无法将其连接到第二个函数,该函数返回当前月份的数字。
第一个和第二个MsgBox返回预期的DECEMBRE和“ 12”,但是最后一个返回运行时错误'5':无效的过程调用或参数。
Sub test()
Dim Month1 As String
Dim dict As New Collection
dict.Add "JANVIER", "1"
dict.Add "FÉVRIER", "2"
dict.Add "MARS", "3"
dict.Add "AVRIL", "4"
dict.Add "MAI", "5"
dict.Add "JUIN", "6"
dict.Add "JUILLET", "7"
dict.Add "AOUT", "8"
dict.Add "SEPTEMBRE", "9"
dict.Add "OCTOBRE", "10"
dict.Add "NOVEMBRE", "11"
dict.Add "DÉCEMBRE", "12"
Month1 = """" & Month(Now) & """"
MsgBox (dict.Item("12")) '1st check - OK
MsgBox (Month1) '2nd check - OK
MsgBox (dict.Item(Month1)) 'final result - FAIL
End Sub
错误在哪里?
答案 0 :(得分:2)
仅使用:
Month1 = "" & Month(Now)
答案 1 :(得分:1)
"""" & Month(Now) & """"
将值括在双引号中,其中"1"
只是将数字1转换为字符串。 VBA集合甚至不关心数字是数字还是字符串。 Month1 = Month(Now)
和MsgBox dict.Item(Month(Now))
都可以工作。
话虽这么说,我只会使用数组。
Function getMois(MonthIndex As Long) As String
getMois = Array("JANVIER", "FÉVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DÉCEMBRE")(MonthIndex - 1)
End Function
答案 2 :(得分:0)
Function GetMonth(iMonth%)
GetMonth = Choose(iMonth, "JANVIER", ..., "DÉCEMBRE")
End Function
答案 3 :(得分:0)
我重新编写了一些代码以分离问题,并仅使用Excel的隐式转换将Month(Now)作为字符串。 VBA只会将值强制转换为字符串,但是您也可以使用类型转换通过CSTR()将数字转换为字符串。
总体而言,其他一些解决方案很紧凑,您应该使用它们,但是它确实指出您可能需要更加关注关注点的分离(本质上是良好的代码习惯),类型转换和隐式/在VBA中进行显式转换。另外,您可能会发现在进行编码/调试时更容易使用Debug.Print,以及使用“即时”和“本地”窗口来了解您的代码。
代码
Private dict As Collection
Sub SetArray()
Set dict = New Collection
dict.Add "JANVIER", "1"
dict.Add "FÉVRIER", "2"
dict.Add "MARS", "3"
dict.Add "AVRIL", "4"
dict.Add "MAI", "5"
dict.Add "JUIN", "6"
dict.Add "JUILLET", "7"
dict.Add "AOUT", "8"
dict.Add "SEPTEMBRE", "9"
dict.Add "OCTOBRE", "10"
dict.Add "NOVEMBRE", "11"
dict.Add "DÉCEMBRE", "12"
End Sub
测试:
Sub Test()
SetArray
Dim Month1 As String
Debug.Print dict.Item("12") '1st check - OK
Month1 = Month(Now)
Debug.Print Month1 '2nd check - OK
Debug.Print dict.Item(Month1) 'final result - SUCCEED
Month1 = CStr(Month(Now))
Debug.Print dict.Item(Month1) 'final result - SUCCEED
End Sub