Selection.AutoFill目标无法按预期工作

时间:2020-09-14 12:58:38

标签: excel vba

我有以下代码 首先,它将一一插入两列 然后计算C列中的行 然后将ActiveCell.FormulaR1C1 =“ = R [-5] C [18]”复制到B7到行数 同样,将ActiveCell.FormulaR1C1 =“ = R [-5] C [13]”复制到A7到行数 但是当活动行只有01(一个)时,我得到了错误,如果它大于一个,那么就可以了。 我为此感到挣扎。如果有人可以帮忙。

Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Dim LastRow As Long
LastRow = Range("C" & Rows.Count).End(xlUp).Row

Range("B7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-5]C[18]"
Range("B7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

Selection.AutoFill Destination:=Range("B7:B" & LastRow), Type:=xlFillCopy
Range("B7:B" & LastRow).Select

Range("A7").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=R[-5]C[13]"
Range("A7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

Selection.AutoFill Destination:=Range("A7:A" & LastRow), Type:=xlFillCopy
Range("A7:A" & LastRow).Select

2 个答案:

答案 0 :(得分:1)

结束问题:

也许不使用AutoFill,而是使用Range("B7:B" & LastRow).Value = Range("B7").Value,对于A列也是如此。

或者在两列中仅一行:Range("A7:B" & LastRow).Value = Range("A7:B7").Value

答案 1 :(得分:0)

首先,Selection对象不一定是最佳选择。您可以使用Range("A:B").Insert xlShiftToRight插入列。

接下来,您可以一次为整个范围设置公式,而不必复制和粘贴。由于您只将公式从第7行开始放置,因此需要偏移和调整由C列(在插入之后)定义的范围并调整其大小。

Resize方法将需要将行数减少6,因为公式要等到第7行才开始:.Resize(LastRow - 6)。由于原始范围只有一列宽,因此可以省略Resize方法中的列数(否则为.Resize(LastRow - 6, 1))。

Offset方法将需要向下移动6行,并向左移1(或2)列:.Offset(6,-1).Offset(6,-2))。

您的代码将大大简化为:

Dim LastRow As Long
ActiveSheet.Range("A:B").Insert xlShiftToRight

LastRow = Range("C" & Rows.Count).End(xlUp).Row

With Range("C:C").Resize(LastRow-6) 
    .Offset(6,-1).FormulaR1C1="=R[-5]C[18]"
    .Offset(6,-2).FormulaR1C1="=R[-5]C[13]"
End With

当然,更简单的方法是将工作表转换为表(在VBA中为“ ListObject”),然后让Excel承担繁重的工作。但这超出了您的要求。

相关问题