VBA添加不需要的过滤器并插入不需要的行?

时间:2013-09-30 19:04:27

标签: excel excel-vba vba

我在ASSETS CALC工作簿中有一个vba代码,用于通过用户表单选择另一个工作簿(ASSETS)。代码在ASSETS中插入特定行,过滤数据,将其相加,然后将最终数字复制到ASSETS CALC。遗憾的是,出于某种原因,插入ASSETS工作簿的行也会插入到ASSETS CALC工作簿中,并添加了过滤器。有谁知道如何制止这个?我只想将最终的数字复制到ASSET CALC。

谢谢。

    Dim str1 As String
Dim i As Integer

Application.ScreenUpdating = False

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        str1 = ListBox1.List(i)
    End If
Next i

    Workbooks(str1).Activate
    Sheets(1).Activate
    Rows("4:4").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.AutoFilter
    ActiveSheet.Range("$A$4:$C$22").AutoFilter Field:=1, Criteria1:="=it*", _
        Operator:=xlAnd
    ActiveSheet.Range("$A$4:$C$22").AutoFilter Field:=2, Criteria1:="cash"
    Range("C28").Select
    ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-7]C)"
    Range("C28").Select
    Windows("Asset Calc..xlsm").Activate
    Range("D11").Select
    ActiveCell.FormulaR1C1 = "=[" & str1 & "]Sheet1!R28C3"
    Range("D12").Select

1 个答案:

答案 0 :(得分:0)

@Siddharth Rout提供了一个关于引用特定工作表的良好链接,而不依赖于“ActiveCell”或“ActiveSheets”。请务必阅读。

你手边的问题......我怀疑你是否知道在给定时间确切地知道什么是活跃的。您无需激活工作簿,工作表或范围即可获取或写入信息。

要回答您的第一个问题,您可以连接字符串以使用链接名称,如下所示:

ActiveCell.FormulaR1C1 = "=[" & str1 & "]Sheet1!R28C3"

要通过定义工作簿而不是使用“活动”方法(在公式方面)来执行此操作,请尝试以下操作:

Dim wb As Workbook
Set wb = Application.Workbooks(str)

ActiveCell.FormulaR1C1 = "=[" & wb.Name & "]Sheet1!R1C1"

我也注意到你有额外的'。'在这一行:

 Windows("Asset Calc..xlsm").Activate

应该读作

 Windows("Asset Calc.xlsm").Activate