首页 > 解决方案 > 如何将新工作表添加到正在打开的文件而不是个人宏工作簿?

问题描述

我每天早上的第一个任务是抓取另一个部门生成的两个文件。然后,我基本上在文件中“移动”信息以准备电子邮件。必须做的一件事是添加新工作表,我可以在其中编写宏并将其添加到个人宏工作簿中。然而,我遇到的问题是,每当添加新工作表时,宏都会将它们添加到个人宏工作簿,而不是我每天早上打开并需要添加工作表的文件。

我相信这部分是添加工作表的代码部分(如下),但是我不确定用什么来代替它。有人可以帮忙吗?谢谢

ThisWorkbook.Sheets.Add.Name = "PAV"       ' This adds three new sheets
ThisWorkbook.Sheets.Add.Name = "PAS"
ThisWorkbook.Sheets.Add.Name = "PAD"

下面是整个宏:

Sub PaidAgainst()
Dim Cll As Range
Dim myrange As Range
Application.ScreenUpdating = False
Set myrange = Application.Union(Range("E2", Range("E" & Rows.Count).End(xlUp)), Range("S2", Range("S" & Rows.Count).End(xlUp)))

On Error GoTo EH

ThisWorkbook.Sheets.Add.Name = "PAV"       ' This adds three new sheets
ThisWorkbook.Sheets.Add.Name = "PAS"
ThisWorkbook.Sheets.Add.Name = "PAD"



For Each Cll In myrange
    If Len(Cll) < 2 Then
    
        Cll.Offset(1, 0).Copy
        Cll.PasteSpecial xlPasteValues
    
    End If
Next Cll


Sheet1.Select
Columns("J:J").Select
    Selection.Cut
Columns("A:A").Select
    Selection.Insert shift:=xlToRight


Range("D1").Select                                                          ' This adds a filter and selects "BAI" values only
  Selection.AutoFilter
  ActiveSheet.Range("$A$1:$S$7").AutoFilter Field:=4, Criteria1:="BAI"

Sheet1.Activate
Sheet1.Range("$A$1:$S$46").AutoFilter Field:=1, Criteria1:= _
"Paid against dormant"

Range("A1").CurrentRegion.Copy
Worksheets("PAD").Range("A1").CurrentRegion.PasteSpecial

Sheet1.Range("$A$1:$S$46").AutoFilter Field:=1, Criteria1:= _
"Paid against stop"

Range("A1").CurrentRegion.Resize(, 14).Copy
Worksheets("PAS").Range("A1").CurrentRegion.Resize(, 14).PasteSpecial


Sheet1.Range("$A$1:$S$46").AutoFilter Field:=1, Criteria1:= _
"Paid against void"

Range("A1").CurrentRegion.Resize(, 14).Copy
Worksheets("PAV").Range("A1").CurrentRegion.Resize(, 14).PasteSpecial



Exit Sub
EH:
MsgBox "An error occured"


Application.ScreenUpdating = True


End Sub



 

标签: excelvba

解决方案


问题是ThisWorkbook指实际运行代码的工作簿,在您的情况下,是您的个人宏工作簿。

更改代码以引用ActiveWorkbook,它处理当前在活动窗口中的工作簿。

最好的办法是创建一个适当的工作簿变量,并毫无疑问地使用它来引用工作簿中的工作簿和工作表。

dim wb as Workbook
set wb = ActiveWorkbook
[...] ' later in the code
wb.Worksheets("PAD").Range[...]
[...]
wb.Worksheets("Sheet1").Range("[...]

推荐阅读