gpt4 book ai didi

vba - 使用 Range.Columns 时出现错误 1004 - 使用与 Range.Rows 相同的语法

转载 作者:行者123 更新时间:2023-12-04 20:46:08 27 4
gpt4 key购买 nike

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

该代码旨在根据原始 block 的范围对象以及新的行数和列数调整公式 block 的大小。它通过删除多余的行/列并在需要更多行/列时向下填充或向右填充来做到这一点。

我遇到的问题是,虽然行的代码使用 Range.Rows(...).Clear 运行得很好,但我收到错误 1004 - 使用几乎相同的代码执行的应用程序定义或对象定义错误Range.Columns(...).Clear 。

下面的子程序:

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

最佳答案

您需要对列使用 A1 引用。

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

我个人会以不同的方式执行此操作,例如使用 Range.OffsetRange.Resize .

关于vba - 使用 Range.Columns 时出现错误 1004 - 使用与 Range.Rows 相同的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com