【发布时间】:2014-12-11 19:36:38
【问题描述】:
我一直在为我的公司开发一个 Excel 宏,它可以打开几个工作簿,解析它们以获得特定的信息行,存储该行,然后在遍历每个工作簿后设置一个单元格中水平选择的值两页之一上的单个工作簿。我遇到的问题是在尝试选择需要将数据放入的第二页时出现运行时错误 1004。
这里是代码;
Sub sortandinsert(listie As Variant)
'Takes in the data array and sorts it as it inserts it into the spreadsheet.
'Expects a 2 dimensional array.
Dim serialarray() As Variant
Dim listlen1 As Integer
Dim listlen2 As Integer
Dim listlen3 As Integer
Dim count1 As Integer
Dim count2 As Integer
Dim SSCcurrentrow As Integer
Dim DSCcurrentrow As Integer
Dim Colstart As Integer
Dim SSCcounter As Integer
Dim DSCcounter As Integer
Dim actbook As Workbook
Dim selectrange As range
Set actbook = ActiveWorkbook
SSCcounter = 0
DSCcounter = 0
Colstart = 1
SSCcurrentrow = 10
DSCcurrentrow = 10
serialarray = FindSerial(listie, serialarray)
listlen1 = findlength(serialarray)
For count = 0 To listlen1 - 1
MsgBox serialarray(count)
Next
With actbook
listlen2 = findlength(listie)
For count1 = 0 To listlen1 - 1
MsgBox "Current Serial is" & " " & serialarray(count1)
For count2 = 0 To listlen2 - 1
If contains(listie(count2), CStr(serialarray(count1))) Then
listlen3 = findlength(listie(count2))
If listie(count2)(0) = "SSC" Then
Set selectrange = Sheets("SSC").range(Cells(SSCcurrentrow + SSCcounter, Colstart), Cells(SSCcurrentrow + SSCcounter, Colstart + listlen3 - 1))
With selectrange
.Value = listie(count2)
End With
SSCcounter = SSCcounter + 1
ElseIf listie(count2)(0) = "DSC" Then
Set selectrange = Sheets("DSC").range(Cells(DSCcurrentrow + DSCcounter, Colstart), Cells(DSCcurrentrow + DSCcounter, Colstart + listlen3 - 1))
With selectrange
.Value = listie(count2)
End With
DSCcounter = DSCcounter + 1
End If
End If
Next
SSCcurrentrow = SSCcurrentrow + SSCcounter + 6
DSCcurrentrow = DSCcurrentrow + DSCcounter + 6
'SSCcounter = 0
'DSCcounter = 0
Next
End With
End Sub
出现错误的代码部分是;
Set selectrange = Sheets("DSC").range(Cells(DSCcurrentrow + DSCcounter, Colstart), Cells(DSCcurrentrow + DSCcounter, Colstart + listlen3 - 1))
With selectrange
.Value = listie(count2)
End With
在宏开始时,我打开一个新工作簿以将所有数据放入其中,然后打开和关闭包含数据的工作簿,然后返回到创建的新工作簿。在宏执行过程中会定期进行保存。
我可以做些什么来修复这个错误?
【问题讨论】:
-
您的工作簿中是否有名为“DSC”的工作表?尝试制作: Sheets("DSC").range(Sheets("DSC").Cells(DSCcurrentrow + DSCcounter, Colstart), Sheets("DSC").Cells(DSCcurrentrow + DSCcounter, Colstart + listlen3 - 1))
-
另外,“With actbook”没有做任何事情......你没有用“。”调用任何子对象。此 WITH 语句中的符号。我建议对您的“SSC”范围执行我在上面发布的相同操作,即将 Sheets("SSC").Cells 添加到范围
-
btw - 自 2007 年以来,行的变量应声明为 Long
-
除了下面的评论。我会亲自在您的“selectrange”语句之前写几行错误。不要让每个单元格语句都有这么多变量和 (),而是尝试将您尝试使用的值总结为整洁的值。每当我在参考文献中进行数学运算的多个参考文献中出现错误时,我都会将其分解并简化。这样做可能会知道错误。否则,请使用您的本地窗口查看进入其中的所有变量的值。
-
在熟悉了代码之后。我不得不想知道,而不是使用 RANGE 并像那样设置它,您尝试使用的实际范围是什么,因为只设置一个值然后尝试使用 With selected Range 然后结合所有这些步骤可能要容易得多。我可能是错的,这可能是唯一的方法,我的意思不是侮辱。也许您可以仅举一个您希望它所在的实际范围的示例,例如评论中的“单元格(行,“H”)”,我们也许可以减少正在发生的事情。所有的单元格都在一个 2D XY 网格中,很容易找到。
标签: vba excel data-processing