在我开始之前,我想提一提,这是我的第一篇文章,所以请让我知道如果我没有正确地发布我的文章。从打开的工作簿转置单元集合[解决]
下面是背景故事:我是VBA的新手,并且在Excel 2007中享受其多功能性,但是我试图从另一个工作簿中引用一系列单元格。更明确地说,我想从ThisWorkbook中的单元格I12开始使用For Each Next过程创建一个柱状列表,该过程将从工作表的第一行(工作表变量为CompShtName)中获取单元格值(不同数量) OldFile工作簿。这是我写的代码的摘录:
CompShtName = Range("E12").Value
For Each Cell In OldFile.Sheets(CompShtName).Range("A1", Range("A1").End(xlRight)) **<---Run-time error 1004**
Range("I" & 12 + i).Value = Cell.Value
i = i + 1
Next
我已经宣布和定义的变量其中:OldFile = file
地址旧文件,板材CompShtName = name
中的oldfile,并i = counter
。当我尝试运行代码时,我在包含箭头的行中得到run-time error 1004
。出了什么问题?
我想也许问题在于从另一本书拉动。但是,如果我将范围更改为更简单的范围,例如Range("A1:A5")
,它就可以工作。我甚至尝试删除OldFile.Sheets(CompShtName).
,并让它使用活动的ThisWorkbook
来运行,但是这也起作用。所以这个问题必须从尝试创建一个笨重的集合。但我无法修复它。请帮忙!
UPDATE
我真的很喜欢@Zemens用换位,而不是一个循环的方法。我还确保使用@mehow的建议来正确限定我的范围。不幸的是,我仍然收到了1004错误。这里是更新的代码exceprt:在Set EndOldHeader
线上发生
Dim OldSht As Worksheet
Dim EndOldHeader As Range
Set OldSht = OldFile.Sheets(CompShtName)
Set EndOldHeader = OldSht.Cells(1, OldSht.Cells(1, Columns.Count).End(xlToRight))
Compare.Range("I12").Resize(EndOldHeader.Columns.Count, 1).Value = Application.Transpose(EndOldHeader.Value)
该错误。
尝试'为每个小区在OldFile.Sheets(CompShtName).Cells(1,OldFile.Sheets(CompShtName).Cells(1, Columns.Count).End(xlToRight))' – 2013-09-25 15:44:59
您不需要循环将列转移到像这样的行。但你确实需要限定你的范围对象:) –
你有没有机会尝试我的答案? –