【发布时间】:2014-01-13 15:51:00
【问题描述】:
我收到以下错误“运行时错误'1004'应用程序定义或对象定义错误并突出显示以下代码行 newb.sheets(shts(s)).Range("a1").Resize(, cols).Value = wb.sheets(shts(s)).Range(heds(s)).Value
当我跳过上面的代码行并移至下一行时,它显示另一个错误“运行时错误'9'脚本超出范围”并突出显示以下代码行 "newb.sheets(shts(s)).Range("a" & rw(s)).Resize(rws, cols).Value = wb.sheets(s).Range(Rng(s) & rws - 1).Value" 请帮我做什么。
有人可以帮我解决上述错误吗?
Sub Consolidation()
Dim newb as workbook
Dim wb as workbook
Dim Shts
Dim rws as long
Dim rw(2) As Long
mypath = "C:\Consolidation\"
shts = Array("Total Consolidation", "State level Consolidation", "District Level Consolidation")
Set newb = Workbooks.Add
newb.Sheets(1).Name = shts(0)
newb.Sheets(2).Name = shts(1)
newb.Sheets(3).Name = shts(2)
rw(0) = 1
rw(1) = 1
rw(2) = 1
rng = Array("a6:k", "a2:g", "o2:aa")
cols = Array("11", "7", "13")
heds = Array("a1:k1", "a1:g1", "o1:aa1")
fname = Dir(mypath & "*.xls")
Do While Len(fname) > 0
Set Wb = Workbooks.Open(mypath & fname)
For s = 0 To 2
rws = Wb.Sheets(shts(s)).UsedRange.Rows.Count - 1
If s = 0 Then rws = rws - 6
If Not headsdone Then
newb.Sheets(shts(s)).Range("a1").Resize(, cols(s)).value = Wb.Sheets(shts(s)).Range(heds(s)).value
headsdone = True
End If
newb.Sheets(shts(s)).Range("a" & rw(s)).Resize(rws, cols(s)).value = Wb.Sheets(shts(s)).Range(rng(s) & rws).value
rw(s) = rw(s) + rws - 1
Next
fname = Dir
Loop
newb.SaveAs mypath & "COUNTRY LEVEL CONSOLIDATION.xls"
newb.Close
End Sub
【问题讨论】:
-
rng(s) & rws - 1应该做什么?您会以这种方式创建范围地址,这似乎很奇怪。 -
你也可以做类似
dim rightSide as vaiant, leftSide as vaiant: set rightSide = Wb.Sheets(shts(s)).Range(heds(s)): set leftSide = newb.Sheets(shts(s)).Range("a1").Resize(, cols)的事情。leftSide和rightSide等于什么? -
这些是三个工作表中需要复制的行范围
-
对象设置成功了吗?
-
我目前在一个文件夹中有 55 个工作簿(例如“C:\Consolidation”),每个工作簿包含 11 个工作表。我需要从所有 55 个工作簿中合并以下三个工作表 1. Total Consolidation、2. State level Consolidation 和 3. District Level Consolidation,并将其保存在同一文件夹中新工作簿的三个不同工作表中(即 C:\合并)。