vba - 尝试将一个工作表从一个工作簿复制到另一个预先存在的工作表中?

标签 vba excel

我编写了以下代码,它会迭代主工作簿的工作表,检查条件,然后如果满足该条件,则会将事件工作表复制到新工作簿中并保存。但是,我只想将工作表附加到另一个笔记本。

Sub Archive_Sheets()

For Each ws In ActiveWorkbook.Worksheets
    ws.Activate
    Dim SrchRng As Range, cel As Range
    Set SrchRng = ws.Range("C9:C108")

    Dim bought_amt As Integer
    Dim called_amt As Integer

    bought_amt = 0
    called_amt = 0

    For Each cel In SrchRng
        If InStr(1, cel.Value, "BOUGHT") > 0 Then
            bought_amt = bought_amt + cel.Offset(0, 1).Value
        End If

        If InStr(1, cel.Value, "CALLED") > 0 Then
            called_amt = called_amt + cel.Offset(0, 1).Value
        End If

    Next cel

    If called_amt = bought_amt Then
        ws.Range("A1").Value = "DONE"

        Module8.CopySheet

        Exit For

        'ws.Delete
    End If
Next

End Sub


Sub CopySheet()

    Application.DisplayAlerts = False

    Dim wb_name_arr() As String

    pName = ActiveWorkbook.Path
    wbName = ActiveWorkbook.Name  ' the file name of the currently active file
    shtName = ActiveSheet.Name    ' the name of the currently selected worksheet
    wb_name_arr() = Split(wbName, ".")

    Application.ScreenUpdating = False
    ActiveSheet.Select
    ActiveSheet.Copy
    ' NEED TO CHANGE THIS LINE ********************
    ActiveSheet.SaveAs Filename:=pName + "\" + wb_name_arr(0) + " archived.xlsx"
    '****************************
    Application.ScreenUpdating = True

End Sub

上面的代码将覆盖我保存到的新工作簿,因此它只是最新的工作表。我已经创建了此工作簿,因此如果我可以将事件工作表附加到其中,那就太理想了。我已经尝试过了

ActiveSheet.Copy After:=Workbook(pName + "\" + wb_name_arr(0) + " archived.xlsx")

ActiveSheet.Copy Before:=Workbooks.Open(pName + "\" + wb_name_arr(0) + " archived.xlsx").Sheets(0)

运气不好。

最佳答案

这些行是伪代码。总体思路是隐式无。尝试明确引用工作簿和工作表,而不是激活它们。这也更快。

尽量避免在代码中使用ActiveSheet。只需尝试这样的事情:

Set mySht = ActiveSheet 'This should be set at the beginning of your code

然后,每当您的代码中有该工作表(即 ActiveSheet)时,请改用 oSht

因此,您需要打开工作簿才能对其进行操作。同样,您可以为不同的工作簿分配一个名称,如下所示:

Set myWbk = ActiveWorkbook
'Or
Set oWbk = Workbooks("Output.xlsx")

@A.S.H 提出的建议对你来说是这样的:

oFile = "Path/to/the/File/" & wb_name_arr(0) & " archived.xlsx"
Set oWbk = Workbooks.Open(oFile)
mySht.Copy Before:=Workbooks(oWbk).sheets(1)

关于vba - 尝试将一个工作表从一个工作簿复制到另一个预先存在的工作表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478845/

相关文章:

从 VBA 运行 R 脚本

arrays - 用未知数的字符串填充动态数组

Excel VBA 将项目添加到动态创建的组合框

java - Apache POI 事件 API 更新现有 Excel 工作表

database - VBA Excel 语法错误查询表达式插入语句中缺少运算符

excel - 如何在Excel宏中使VBA从0而不是1开始计数

vb.net - 在 Visual Basic 中使用冒号将两个语句放在同一行

c# - 如何让 C# 连接到 excel API

arrays - 使用 VBA 使用简单命令从非连续范围的并集获取值到数组中(无循环)

php - 如何为 CSV、fgetcsv() 问题转义逗号