VBA从数组中分配单元格值

时间:2014-08-01 14:05:55

标签: arrays excel vba excel-vba

我有一份excel报告,它依赖于3个源文档来获取数据。 该报告将3个源拉入并编译为1个阵列。然后循环遍历数组并将值分配给相应电子表格中相应行的列。

我目前正在收到"运行时错误' 1004'应用程序定义或对象定义错误"在特定的时间点。

报告循环遍历数组并成功分配单元格值,直到代表" Shift Worked"的第6列。数组中的值是" Variant / Date"输入和=#3:53:54 AM#

请帮忙,我已针对此特定问题扫描了档案,但找不到与此实例相关的任何内容。

代码:

Sub Write_Data(v() As Variant)
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim i As Integer, j As Integer
    Dim x As Integer, y As Integer
    Dim r As Integer, c As Integer
    Dim d As Date, d2 As Date
    Dim s() As String

    Set wb = ThisWorkbook
    d = CDate(frmMain.txtDate)

    For i = LBound(v, 2) To UBound(v, 2)
        sName = v(3, i)
        s = Split(sName)
        sName = Left(Trim(s(LBound(s))), 1) & Trim(s(UBound(s)))
        For Each ws In wb.Sheets
            If UCase(Trim(sName)) = UCase(Trim(ws.Name)) Then Exit For
        Next
        If Not ws Is Nothing Then
            r = 5
            Do
                r = r + 1
                If InStr(ws.Cells(r, 1), "-") Then
                    s = Split(ws.Cells(r, 1), "-")
                    d2 = CDate(s(LBound(s)))
                    If d2 = d Then
                        For j = LBound(v, 1) + 3 To UBound(v, 1)
                            c = j - 2
                            ws.Cells(r, c) = v(j, i) ' <- This is where the error
                        Next j
                        Exit Do
                    End If
                    d2 = 0
                End If
            Loop Until r > 35
        End If
    Next i
End Sub

===============

更新:

我想出来了。

以前,我这样做: 在编译数组的过程中,为了获得第6个字段的正确值,我使用了一个函数来编译8个不同的可能的时钟冲击成总数&#34; Shift Worked&#34;值。

错误发生了,因为如果有一个缺失的打卡,那么我正在使用&#34; Now()&#34;获取当前时间戳。从概念上讲这是合理的,因为这个报告将在每个小时结束时运行,如果代理人没有冲压,那么通过使用&#34; Now()&将它们增加到当前时间。 #34;功能

问题在于...... 在运行上一个日期的报告时,计算会以某种方式导致正确的查找&#34;变体/日期&#34;键入但导致&#39; 1004&#39;尝试将其分配给单元格时出现运行时错误。

我通过在运行程序之前为用户输入添加2个参数来修复此问题。 1.&#34;日期&#34; &安培; 2.&#34;小时&#34;。遇到缺失的打卡时,而不是使用&#34; Now()&#34;我用自己的变量替换它&#34; dNow&#34;哪个简单采用日期参数并将小时添加到它以获取最新的可能时间。

以下是更正的过程,用于创建在尝试放置时导致错误的值。注意变量&#34; dNow&#34;以及它的分配方式。

Function Calc_Time(t1 As Date, t2 As Date) As Date
    Dim dNow As Date
    dNow = DateAdd("h", frmMain.cmbHour, DateValue(frmMain.txtDate))
    Dim t As Date
    If t1 <> 0 And t2 <> 0 Then
        t = (TimeValue(t2) - TimeValue(t1))
    ElseIf t1 <> 0 And t2 = 0 Then
        t = (TimeValue(dNow) - TimeValue(t1))
    ElseIf t1 = 0 And t2 <> 0 Then
        t = t2
    ElseIf t1 = 0 And t2 = 0 Then
        t = 0
    End If
    Calc_Time = t
End Function

0 个答案:

没有答案