excel DateAdd-函数仅适用于硬编码字符串

uqxowvwt  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(106)

我是vba新手,尝试在日期中添加月份。这看起来很简单,我只需要使用DateAdd函数,这工作得很好,直到我在for循环中使用它,并从数组中传递日期,然后我得到类型不匹配的错误

Public Function copyWiederkehrend(all As Variant)
    
    
    Dim month As String
    Dim datePay As Date
    Dim i, j As Integer
    Dim ErsteLeereZeile As Long
    
    'loop throw all rows that i have passed
    For i = 1 To all.Rows.Count
        
        'looking for the first emtpy row
        ErsteLeereZeile = Worksheets("Zusammenzug").Cells(Rows.Count, 1).End(xlUp).row + 1
        'shows the hidden column copy the row and remove the column it again
        Columns("C:C").EntireColumn.Hidden = False
        range("B" & all(i).row & ":L" & all(i).row).Copy
        Columns("C:C").EntireColumn.Hidden = True
        With ThisWorkbook.Worksheets("Zusammenzug")
            'add the first row
            .Cells(ErsteLeereZeile, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            'copy the added row and add it 17 times again and add one month
            For j = 1 To 17
                ErsteLeereZeile = Worksheets("Zusammenzug").Cells(Rows.Count, 1).End(xlUp).row + 1
                .Cells(ErsteLeereZeile, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                month = .range("K" & ErsteLeereZeile - 1).Value
                datePay = DateAdd("m", 1, month)
                .range("K" & ErsteLeereZeile).Value = datePay
            Next j
        End With
    Next i
End Function

我的月份有这样的格式“31.01.2023”首先我认为这是因为它不像yyyy-mm-dd,但如果我替换这部分代码:

month = .range("K" & ErsteLeereZeile - 1).Value
                datePay = DateAdd("m", 1, month)

就凭这个

datePay = DateAdd("m", 1, "31.01.2023")

它工作(没有添加月份,因为它是硬编码的)我在调试模式下试过了,我100%确信我传递给dateadd函数的字符串也是“31. 01. 2023”
我真的不知道什么是问题感谢答复和填写免费评论我的代码对其他问题
编辑:或者简短的版本,我有一个像31.12.2013这样的日期作为字符串的单元格,我想像这样添加一个月

stringMonth = ActiveSheet.range("K" & ErsteLeereZeile - 1).Value
dateMonth   = DateAdd("M", 1, CDate(stringMonth))

和我得到类型不匹配错误

8ehkhllq

8ehkhllq1#

如果它是一个字符串,则拆分为多个部分并使用DateSerial(y,m,d)

Dim s As String, d As Date, a As Variant
s = "31.12.2013"
a = Split(s, ".")
d = DateAdd("m", 1, DateSerial(a(2), a(1), a(0)))
Debug.Print d
ig9co6j1

ig9co6j12#

如果我使用dateMonth = DateAdd("M", 1, "31.01.2023"),我会得到一个类型不匹配的错误。我也会得到同样的错误与dateMonth = DateAdd("M", 1, CDate(stringMonth))这是因为Excel不承认31.01.2023作为一个字符串,代表一个日期。
试着用连字符代替句号,例如:

dateMonth = DateAdd("M", 1, CDate(Replace(stringMonth, ".", "-")))

相关问题