使用VBA的日期序列

时间:2016-07-22 08:33:35

标签: vba excel-vba excel

状况

我有一系列日期序列号,例如:

42519, 42526, 42533, 42540, 42547, 42554

在单元格中

B2, C2, D2, E2, F2, G2

分别

最终将有52个日期序列号,每个序列号代表一个每周发票日期。

你会注意到在前一个宏中每一个都增加了7,这没有任何问题。

目标

我需要使用下面方法2 中提到的VBA将这些日期序列号转换为"dd-mmm-yy"格式(而不是手动复制公式)。

因此,我们假设小区42519中的第一个日期编号为B2

方法1。

将日期序列号42519转换为"dd-mmm-yy"格式的方法对我来说没有任何问题,但是长篇大论并涉及手动复制公式:

使用表达式:

 Range("B3")="=TEXT(B2,""dd-mmm-yy"")"    ' returns 29-May-16 in cell B3

我甚至可以使用表达式:

 Range("C3")="=TEXT(B2+7,""dd-mmm-yy"")"    'returns 05-Jun-16 in cell C3

方法2。

这让我很难过,我正碰到一堵砖墙。我的想法是做类似以下的事情,如果我可以让它工作,我可以继续使用循环来生成52个单元格中的52个日期(C3D3等格式"dd-mmm-yy",每一个在一年中增加7天):

Sub sbNumToText_01()
    Dim intAdd7 As Integer
    intAdd7 = 0
    Dim lngSerialDate As Long
    lngSerialDate = Range("C2").Value
    MsgBox lngSerialDate + intAdd7  'returns 42526, as expected
    Range("C3") = "=TEXT(lngSerialDate + intAdd7,""dd-mmm-yy"")"
End Sub

而不是显示C3的单元格"05-Jun-16",单元格C3显示#Name?,单元格C3左侧的迷你下拉错误菜单显示{{ 1}}。

你们中的任何人都可以解释如何使用包含变量的"The formula contains unrecognised text"函数吗?或者沿着这些方向的任何其他解决方案。

1 个答案:

答案 0 :(得分:3)

你的问题在于

Range("C3") = "=TEXT(lngSerialDate + intAdd7,""dd-mmm-yy"")"

如果在运行宏后查看单元格C3中的公式,则会看到它包含

=TEXT(lngSerialDate + intAdd7,"dd-mmm-yy")

但是lngSerialDateintAdd7是VBA变量,而不是Excel名称,因此它们在工作表公式中毫无意义,这就是您看到错误的原因。你想要做的是将这些变量的总和转换为之前的数字将它放在工作表函数中:

Range("C3") = "=TEXT(" & lngSerialDate + intAdd7 & ",""dd-mmm-yy"")"