【发布时间】:2014-07-10 23:17:10
【问题描述】:
当我运行下面的代码时,我得到了恼人的 1004 错误。
Sub TEST_MACRO()
Dim shSource As Worksheet
Dim shDest As Worksheet
Dim DateRange As Range
Dim i As Integer, nullcounter As Integer, nullcounterov As Integer, tablelength As Integer, tablelengthov As Integer, DateRangeSize As Integer
Dim q As Integer
Set shSource = ThisWorkbook.Sheets("Sheet1")
Set shDest = ThisWorkbook.Sheets("Sheet2")
Set DateRange = shSource.Application.InputBox("Select date", Type:=8)
DateRangeSize = DateRange.Rows.Count
nullcounter = 0
nullcounterov = 0
tablelength = 3
tablelengthov = 3
For q = 0 To DateRangeSize - 1
shDest.Range("C4:I17").ClearContents
'THIS IS THE CODE FOR ABC
For i = 0 To 3
If IsEmpty(shSource.Cells(DateRange.Row + q, 2 + i)) = True Or shSource.Cells(DateRange.Row + q, 2 + i) = 0 Then
nullcounter = nullcounter + 1
Else
shDest.Cells(4 + i - nullcounter, 4) = shSource.Cells(DateRange.Row + q, 2 + i)
shDest.Cells(4 + i - nullcounter, 5) = shSource.Cells(DateRange.Row + q, 6 + i)
shDest.Cells(4 + i - nullcounter, 3) = shSource.Cells(1, 2 + i)
tablelength = tablelength + 1
End If
Next
'THIS IS THE CODE FOR XYZ
For i = 0 To 6
If IsEmpty(shSource.Cells(DateRange.Row + q, 10 + i)) = True Or shSource.Cells(DateRange.Row + q, 10 + i) = 0 Then
nullcounterov = nullcounterov + 1
Else
shDest.Cells(4 + i - nullcounterov, 8) = shSource.Cells(DateRange.Row + q, 10 + i)
shDest.Cells(4 + i - nullcounterov, 9) = shSource.Cells(DateRange.Row + q, 17 + i)
shDest.Cells(4 + i - nullcounterov, 7) = shSource.Cells(1, 10 + i)
tablelengthov = tablelengthov + 1
End If
Next
Next
End Sub
我运行它的 excel 表如下所示: http://i.imgur.com/V7tWTKq.png
该代码适用于 ABC,但不适用于 XYZ。我猜 0 值单元格搞砸了,但我不明白为什么。
代码的目标是:
提示用户选择大小范围 DateRangeSize。
对于范围内的每一行,代码复制 ABC、ABC-D、XYZ 和 XYZ-D 的值(如果它们不为 0)并将它们写入工作表 2。
如果范围内的行数为 1,则代码可以正常工作。但是如果行数大于1,我会得到1004错误,这部分代码是高亮的:
shDest.Cells(4 + i - nullcounterov, 8) = shSource.Cells(DateRange.Row + q, 10 + i)
感谢您的帮助。
编辑:我只想补充一点,代码始终适用于 ABC。如果行数为 2,则第二行的 ABC 值将打印在 sheet2 中,但在尝试对 XYZ 执行相同操作时代码会中断。
编辑 2:我在 ABC 部分添加了 0 个值,但代码仍然适用于 ABC!这太令人沮丧了。
【问题讨论】:
-
为该行中的所有变量添加监视,并在发生故障时发布它们是什么。了解 i、nullcounterov 或 q 是否以某种方式引起问题会有所帮助。
-
这些是添加手表后的值:i.imgur.com/7eJd7NG.png
-
我想我明白了:如果我是对的,我会编辑。
-
酷,在这种情况下,您可以输入您的解决方案并将自己标记为已回答!