使用Excel DateAdd函数

时间:2017-12-27 09:05:05

标签: excel vba excel-vba

我想使用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日

我做错了什么?

3 个答案:

答案 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(开始日期,天,[节假日])