我有一些问题,在VBA子程序(Excel 2010中)。错误1004使用Range.Columns - 使用相同的语法Range.Rows
代码旨在调整给定的原始块的范围对象式的块,并且行和列的新的号码。它通过删除多余的行/列并填充或如果需要更多行/列来实现这一点。
我遇到的问题是,而行的代码运行就好用Range.Rows(...)清除,我得到一个错误1004 - 应用程序定义或使用近对象定义的错误相同的代码来执行Range.Columns(...)。清除。
以下子程序:
Sub ResizeBlock(BlockRange As Range, Optional nRows As Variant, Optional nColumns As Variant)
If IsMissing(nRows) And IsMissing(nColumns) Then Exit Sub
Dim TopLeftCell, BottomRightCell As Range
Set TopLeftCell = BlockRange.Cells(1, 1)
Set BottomRightCell = BlockRange.Cells(BlockRange.Rows.Count, BlockRange.Columns.Count)
If Not IsMissing(nRows) Then Set BottomRightCell = BottomRightCell.Offset(nRows - BlockRange.Rows.Count, 0)
If Not IsMissing(nColumns) Then Set BottomRightCell = BottomRightCell.Offset(0, nColumns - BlockRange.Columns.Count)
Dim NewBlockRange As Range
Set NewBlockRange = Range(TopLeftCell, BottomRightCell)
Select Case BlockRange.Rows.Count - NewBlockRange.Rows.Count
Case Is > 0
BlockRange.Rows(NewBlockRange.Rows.Count + 1 & ":" & BlockRange.Rows.Count).Clear
Case Is < 0
NewBlockRange.Rows(BlockRange.Rows.Count & ":" & NewBlockRange.Rows.Count).FillDown
End Select
Select Case BlockRange.Columns.Count - NewBlockRange.Columns.Count
Case Is > 0
BlockRange.Columns(NewBlockRange.Columns.Count + 1 & ":" & BlockRange.Columns.Count).Clear
Case Is < 0
NewBlockRange.Columns(BlockRange.Columns.Count & ":" & NewBlockRange.Columns.Count).FillRight
End Select
End Sub
我使用下面的“测试”代码调用子程序:
Call ResizeBlock(Range("C5:I11"), 10, 10)
的选择情况下的顺序并不重要,即我仍然得到当它位于行部分之上时,列部分中的错误。
编辑:解决
好吧,也许写出来在我的脑海做事情更清晰的问题,我似乎已经解决了这个问题。
解决方案通过改变列选择情况:
Select Case BlockRange.Columns.Count - NewBlockRange.Columns.Count
Case Is > 0
Range(BlockRange.Columns(NewBlockRange.Columns.Count + 1), BlockRange.Columns(BlockRange.Columns.Count)).Clear
Case Is < 0
Range(NewBlockRange.Columns(BlockRange.Columns.Count), NewBlockRange.Columns(NewBlockRange.Columns.Count)).FillRight
End Select
我不知道为什么Range.Rows(x:y)
作品,但Range.Columns(x:y)
没有。
如果已经解决,而不是编辑的标题是“解决”了,请把你的答案,并接受它。 – LittleBobbyTables 2013-05-01 13:51:30
“*我不知道为什么Range.Rows(x:y)是由Range.Columns(x:y)工作的。*”因为这不是你正在做的。你实际上是这样做的:'Range.Rows(“5:10”)'这是有效的,但'Range.Columns(“5:10”)'不是,因为列地址字符串必须使用字母,而不是行使用的数字。如果您不使用地址*字符串*,则行和列的工作方式相同。 – RBarryYoung 2013-05-01 14:11:04
如果您有以下未提供的工作解决方案,则应提取该信息并将其添加为以下问题的答案,然后将其作为正确答案接受。 – Gaffi 2013-05-01 15:32:23