我有一些問題,在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