VBA小计列并在同一列中打印

时间:2014-07-01 13:16:22

标签: excel vba

我正在尝试在整个列上运行=subtotal()函数并将值粘贴到同一列中,但是您无法在与尝试总计相同的列中运行该函数。

ActiveCell.Value = "Total No. of chargeable hours"
ActiveCell.Offset(0, 2).Select
ActiveCell.Value = "=SUBTOTAL(9,G:G)"

由于这会返回错误,我尝试使用辅助单元格进行剪切和粘贴,但在PasteSpecial = xlPasteValues行上出现调试错误。

ActiveCell.Value = "Total No. of chargeable hours"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "=SUBTOTAL(9,G:G)"
ActiveCell.Cut
ActiveCell.Offset(0, 1).Select
ActiveCell.PasteSpecial = xlPasteValues

每次创建相关工作表时,行数都会更改,因此无法使用特定的单元格范围。

有没有人有办法实现这个目标?

感谢。

2 个答案:

答案 0 :(得分:2)

Sub WriteSubtotal()

    With ActiveCell
        .Value = "Total No. of chargeable hours."
        .Offset(0, 1).Value = Application.WorksheetFunction.Subtotal(9, .Parent.Range("G1").EntireColumn)
    End With

End Sub

通常,您不需要选择或激活单元格。只需引用单元格并操纵属性或调用方法即可。上面的sub将标签放在活动单元格中,然后将单元格的Value属性更改为右边。

请注意,SUBTOTAL的第二个参数使用.Parent属性。在ActiveCell的With块内,.Parent属性将引用工作表。

答案 1 :(得分:0)

您需要编写一个返回数组的公式,以便将函数声明为

Function SubTotal(InputRange as Range) as Variant
    Dim Output() as Variant
    ' ReDim Output(.... to the correct rows, column size)

    ' Run your subtotal code here
    ' Output (Row, 1) = YourAnswer(Row)

    SubTotal = Output
End Function

VBA不允许函数使用复制粘贴类型操作修改电子表格。