错误1004使用Range.Columns – 使用与Range.Rows相同的语法

我遇到了一些VBA子程序的问题(Excel 2010)。

代码旨在调整给定原始块的范围对象的公式块的大小,以及新的行数和列数。 它通过删除多余的行/列和填充或如果需要更多行/列的权利。

我遇到的问题是,尽pipe使用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 

我使用下面的“testing”代码调用子程序:

 Call ResizeBlock(Range("C5:I11"), 10, 10) 

select案例的顺序并不重要,即在行部分上方的列部分仍然存在错误。

编辑:解决

那么把这个问题写出来可能会让事情变得更加清晰,而我似乎已经解决了这个问题。

通过更改列select案例解决scheme:

 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)没有。

您将需要使用列的A1引用。

例如, range.Rows("1:3")将返回范围的前三行,则需要使用range.Columns("A:C")返回前三列。

就个人而言,我会做不同的,例如通过使用Range.OffsetRange.Resize