我正在尝试在VBA中为矩阵定义动态范围,如下所示:
Dim Range1 As Range, Range2 As Range
'...
'define some indexes
'...
Set Range1 = Sheets("Sheet1").Range(Cells(rowFirst, colFirst), Cells(rowEnd,colEnd))
但是我收到运行时错误#1004,我不知道为什么以及如何修复它。
我是VBA的新手,所以我期待你能帮助我。
感谢所有人!
注意:rowFirst,colFirst,rowEnd,colEnd
变量不断变化,因为我需要在工作表中从矩阵移动到矩阵。
感谢大家的回复,但是我仍然在同一行上收到同样的错误。 让我更深入地解释一下我正在尝试做什么。我需要采用13x91(单元格)矩阵并对其进行转置,然后我需要将所有列连接在一个单独的列中,并将结果列放在工作表2中。这样做了20次在列中前进(而不是在行中)。我在这里留下代码:
Sub ConvertRangeToColumn()
Dim it As Integer
Dim rowInit As Integer, rowEnd As Integer, colInit As Integer, colEnd As Integer
rowInit = 1
rowEnd = 91
colInit = 1
colInit = 13
For it = 1 To 20
Dim Range1 As Range, Range2 As Range, Rng As Range
Dim rowIndex As Integer
xTitleId = "Automatización"
Set Range1 = Hoja1.Range(Hoja1.Cells(rowInit, colInit), Hoja1.Cells(rowEnd, colEnd))
Set Range2 = Sheets("Hoja2").Range(Cells(1, it))
colInit = colInit + 13
colEnd = colEnd + 13
rowIndex = 0
Application.ScreenUpdating = False
For Each Rng In Range1.Rows
Rng.Copy
Range2.Offset(rowIndex, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
rowIndex = rowIndex + Rng.Columns.Count
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
Next it
End Sub
注2:由于我使用西班牙语在Excel中工作,Hoja1
对象意味着Sheet1
答案 0 :(得分:3)
根据你的新代码三件事:
Hoja1
应为Worksheets("Hoja1")
colEnd
分配值,但已colInit
两次。Cells()
内放置一个Range()
。只需使用Cells()
本身。代码:
Sub ConvertRangeToColumn()
Dim it As Integer
Dim rowInit As Integer, rowEnd As Integer, colInit As Integer, colEnd As Integer
rowInit = 1
rowEnd = 91
colInit = 1
colEnd = 13
For it = 1 To 20
Dim Range1 As Range, Range2 As Range, Rng As Range
Dim rowIndex As Integer
xTitleId = "Automatización"
Set Range1 = Worksheets("Hoja1").Range(Worksheets("Hoja1").Cells(rowInit, colInit), Worksheets("Hoja1").Cells(rowEnd, colEnd))
Set Range2 = Worksheets("Hoja2").Cells(1, it)
colInit = colInit + 13
colEnd = colEnd + 13
rowIndex = 0
Application.ScreenUpdating = False
For Each Rng In Range1.Rows
Rng.Copy
Range2.Offset(rowIndex, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
rowIndex = rowIndex + Rng.Columns.Count
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
Next it
End Sub
答案 1 :(得分:1)
尝试下面的代码。应该使用工作表引用单元格。
Dim Range1 As Range, Range2 As Range
'...
'define some indexes
Set Range1 = Sheets("Sheet1").Range(Sheets("Sheet1").Cells(rowFirst, colFirst), Sheets("Sheet1").Cells(rowEnd,colEnd))
答案 2 :(得分:1)
Sheets
函数隐含地引用Sheets
的{{1}}集合。您可能意味着使用ActiveWorkbook
集合,该集合不包含“图表工作表”和其他非工作表对象。
不合格,Worksheets
隐含地引用Range
;同样适用于不合格的ActiveSheet
电话。
Cells
要求 Range(cell1, cell2)
和cell1
与cell2
调用中符合条件的工作表对象位于同一工作表中 - 如果{{ 1}}是不合格的,然后处理活动工作表将起作用。
但此处Range
符合Range
条件,因此Range
和Sheets("Sheet1")
必须也在同一cell1
工作表上,否则你会得到你得到的错误。
此外,如果cell2
位于Sheets("Sheet1")
(具有正在运行的VBA代码的工作簿)中,那么您可以通过其全局对象(可以在属性<中重命名)来引用它/ em> toolwindow),使用其代码名称 - 默认情况下,Sheets("Sheet1")
代表“Sheet1”工作表。
换句话说:
ThisWorkbook
答案 3 :(得分:0)
错误1004 =如果数组中的一个或多个单元格(单元格区域)包含设置为包含911个以上字符的字符串,则可能会出现此问题。
- &GT;单元格中的某个值是否超过911个字符?