Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 以整数形式插入日期(Excel)_Vba_Excel - Fatal编程技术网

Vba 以整数形式插入日期(Excel)

Vba 以整数形式插入日期(Excel),vba,excel,Vba,Excel,我有一个vba代码来连接来自不同列的值。其中一列;M列-是日期,格式为dd/mm/yyyy。我想将这个日期的整数值与单元格中的其他值连接起来 我试图使用Int(CDbl(“date”))将日期值转换为Int,然后使用该值与其他单元格连接 我当前的vba代码是: Dim datevar As Integer For i = 1 to LastRow datevar = Int(CDbl(Sheets("Project_Name").Cells(i, 13).value)) targ

我有一个vba代码来连接来自不同列的值。其中一列;M列-是日期,格式为dd/mm/yyyy。我想将这个日期的整数值与单元格中的其他值连接起来

我试图使用
Int(CDbl(“date”))
将日期值转换为Int,然后使用该值与其他单元格连接

我当前的vba代码是:

Dim datevar As Integer
For i = 1 to LastRow
    datevar = Int(CDbl(Sheets("Project_Name").Cells(i, 13).value))
    target.location.formula = "=Project_Name!B" & i & "&UPPER(Project_Name!D" & i & ")&Project_Name!E" & i & "&Project_Name!F" & i & "&Project_Name!G" & i & "&Project_Name!H" & i & "&Project_Name!I" & i & datevar & ""
Next i
运行此命令时,在
datevar=Int(CDb1(…)
行上出现“类型不匹配”错误:

有人能告诉我为什么会出错,以及是否有更有效的工作方式吗

编辑


好的-我得到了错误,因为CDbl无法将字符串转换为双精度。。。但是,该单元格中的值肯定是日期而不是字符串。解决这个问题的最好办法是什么

处理日期时,最好将它们的值存储到
Double
而不是
Integer

只需使用:

datevar = Sheets("Project_Name").Cells(i, 13).Value
可以添加以下行以防止出现非整数值:

If IsNumeric(Sheets("Project_Name").Cells(i, 13).Value) And Sheets("Project_Name").Cells(i, 13).Value > 0 Then

注意:您可以使用
Double
Long
存储日期值。
Integer
限制为最大值32767,读取


如果我们看一下今天的日期,2018年8月17日的值是43329,这超过了
整数的上限,这就是为什么您会出现错误。

要继续我们在评论中的对话,这里有一个简单的例子:

Sub test()

    Dim cellValue As String
    Dim spaceSpot As Integer

    cellValue = CStr(ThisWorkbook.Worksheets(1).Range("A1").Value) ' which is 12/22/2018
    spaceSpot = InStr(cellValue, " ")

    ' Checking if date is in format 12/22/2018 00:00:00
    If spaceSpot > 0 Then
        cellValue = Left(cellValue, spaceSpot - 1)
    End If

    cellValue = Replace(cellValue, "/", "")

    MsgBox cellValue ' shows 1222018

End Sub

如果在该单元格上使用
=ISNUMBER()
,Excel是否返回TRUE?如果不是,Excel不会将其识别为有效日期,这意味着它是一个字符串,并且该字符串不能直接转换为双精度。在我的系统上进行的测试(使用系统日期格式
mm/dd/yyyyy
),单元格A1中的
01/01/2018
,单元格B1中的
=IsNumber(A1)
,显示
TRUE
。你能将其改为双精度而不是整数吗?@KenWhite-dammit它返回False。。。。但是,当我点击format时,它被识别为日期格式……如果您的目标是将该值与其他值连接起来,为什么不保留为string并使用string操作删除“/”呢?然后将有一个带有数字的字符串characters@Kubie-你是个天才。。这正是我所想的!!!是-我同意,但出于操作原因,我需要将日期转换为整数,以便生成唯一的id。@OdaySalim我建议使用
Long
而不是
Integer
,请阅读此处。这样,上面的代码仍然可以正常工作