0

我在资产计算工作簿中有一个 vba 代码,用于通过用户表单选择另一个工作簿(资产)。代码在 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
4

1 回答 1

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
于 2013-09-30T20:19:51.923 回答