2013-09-25 21 views
0

在我开始之前,我想提一提,这是我的第一篇文章,所以请让我知道如果我没有正确地发布我的文章。从打开的工作簿转置单元集合[解决]

下面是背景故事:我是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)

该错误。

+1

尝试'为每个小区在OldFile.Sheets(CompShtName).Cells(1,OldFile.Sheets(CompShtName).Cells(1, Columns.Count).End(xlToRight))' – 2013-09-25 15:44:59

+0

您不需要循环将列转移到像这样的行。但你确实需要限定你的范围对象:) –

+0

你有没有机会尝试我的答案? –

回答

0

不合格的Range对象Range("A1").End(xlRight)假设总是来指代ActiveWorkbook。根据@ mehow的评论,您需要完全符合条件。

的1004错误引发,因为它是不可能构建跨越多个工作簿Range对象:)

我更好地找到它的大结构,如该工作创建的对象变量来表示他们的时候。它们在未来更容易阅读,更新,维护和调试。

但是,您可以在没有循环结构的情况下执行此操作。它应该更快,虽然可能不会明显更快。

Dim oldSheet as Worksheet 
Dim oldRange as Range 
Dim cl as Range 
Set oldSheet = OldFile.Sheets(CompShtName) 
Set oldRange = oldSheet.Cells(1, oldSheet.Cells(1, Columns.Count).End(xlToRight)) 

ActiveSheet.Range("I12").Resize(oldRange.Columns.Count,1).Value = Application.Transpose(oldRange.Value) 

或者,像循环做:

For each cl in oldRange.Cells 
    ActiveSheet.Range("I" & 12 + i).Value = cl.Value 
    i = i + 1 
Next 
+0

和@mehow,您的意见非常有帮助!我已经实现了你的建议,但是我仍然收到错误1004.下面是代码,在Set EndOldHeader行有错误:Set OldSht = OldFile.Sheets(CompShtName)SetOldHeader = OldSht.Cells (1,OldSht.Cells(1,Columns.Count).End(xlToRight))''Compare.Range(“I12”)。Resize(EndOldHeader.Columns.Count,1).Value = Application.Transpose(EndOldHeader.Value )' – user2815713

+0

不要把代码放在评论中,修改或添加到您的原始问题。 –

+0

会做!谢谢:) – user2815713

相关问题