我想使用excel DateAdd函数为包含波斯语/日历日期的单元格添加几天。所以,我创建了一个按钮,并为它分配了一个宏,如:
Sub mydateaddfunction()
Dim FirstDate As Date
Dim Number As Integer
FirstDate = Sheets(3).Range("e13").Value
Number = Sheets(3).Range("b13").Value
Sheets(3).Range("e14").Value = DateAdd("d", Number, FirstDate)
End Sub
但遗憾的是它会抛出错误
来自此行的应用程序定义或对象定义错误
错误:
Sheets(3).Range("e14").Value = DateAdd("d", Number, FirstDate)
e13单元格包含日期,b13包含我想要添加到e13单元格的天数。所以,如果e13单元格如下:
1396年10月17日
和b13包含一个像3的数字,我希望e14为:
1396年10月20日
我做错了什么?
答案 0 :(得分:0)
默认情况下,VBA使用格里高利日期日历。因此,我假设您需要将您的Hijri日期转换为格里高利日期,并在添加日期后将格里高利日期转换回Hijri日期。
请试一试......
Sub mydateaddfunction()
Dim FirstDate As Date
Dim Number As Integer
Dim gDate As Date
FirstDate = HijriToGreg(Sheets(3).Range("e13").Value)
Number = Sheets(3).Range("b13").Value
gDate = DateAdd("d", Number, FirstDate)
Sheets(3).Range("e14").Value = GregToHijri(gDate)
End Sub
Function GregToHijri(dtGegDate As Date) As String
'Converts Gregorian date to a Hijri date
VBA.Calendar = vbCalHijri
GregToHijri = dtGegDate
VBA.Calendar = vbCalGreg
End Function
Function HijriToGreg(dtHijDate As String) As Date
'Converts Hijri date to a Gregorian date
VBA.Calendar = vbCalHijri
HijriToGreg = dtHijDate
VBA.Calendar = vbCalGreg
End Function
答案 1 :(得分:0)
如果是Excel 2016,请将代码更改为
Sub mydateaddfunction()
Dim FirstDate As Date
Dim Number As Integer
Dim rg As Range
Set rg = Union(Sheets(1).Range("E13"), Sheets(1).Range("E14"))
rg.NumberFormat = "[$-fa-IR,16]dd/mm/yyyy;@"
FirstDate = Sheets(1).Range("e13").Value
Number = Sheets(1).Range("b13").Value
Sheets(1).Range("e14").Value = DateAdd("d", Number, FirstDate)
End Sub
答案 2 :(得分:0)
对于那些寻求简单解决方案的人,他们可以使用Excel现有的称为“工作日”的功能来将x天数添加到数据中。
WORKDAY(开始日期,天,[节假日])