我有一份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