vba - 将工作表转移到新工作簿

标签 vba excel

Excel VBA 的新手令人难以置信。我在很多不同的地方都发现了这个问题,但似乎无法操纵我尝试工作的代码。本质上,我有一个工作簿,它创建一个新工作簿,完全复制一张工作表,保存工作簿,然后需要从原始工作簿传输第二张工作表。我已经用这个完成了:

Wb1.Sheets("Scorecard").Range("A1:M37").Value(11) = Wb.Sheets("Scorecard").Range("A1:M37").Value(11)

其中 Wb1 是“转移到”工作簿,Wb 是“转移自”工作簿。问题是这不会显示页眉/页脚、图片( Logo )或隐藏本应隐藏的列。

我已经尝试过这个,但它似乎只是打开另一本书并卡住我的系统并打开第三本书:

Wb.Sheets("Scorecard").Copy
Wb1.Sheets("Scorecard").PasteSpecial xlPasteValues

我觉得我错过了一些非常明显的东西,但我厌倦了为此而用头撞墙。此时的完整代码如下:

Sub NewWb()
Dim Aname As String
Dim HospName As String
Dim DateDone As String
Dim xPath As String
Dim Wb As Workbook
Dim Wb1 As Workbook
Set Wb = ThisWorkbook
xPath = Application.ActiveWorkbook.Path
Aname = "CS Diversion Prevention Assessment"
HospName = Sheets("Hospital ID").Range("I8")
DateDone = Replace((Sheets("Hospital ID").Range("I13").Text), "/", "-")

Application.ScreenUpdating = False
ActiveWorkbook.Sheets("Compliance Checklist").Copy
With ActiveSheet.UsedRange
  .Value = .Value
End With
ActiveSheet.Shapes("Button 1").Delete
Sheets.Add.Name = "Scorecard"
ActiveWorkbook.SaveAs Filename:=xPath & "\" & HospName & "." & Aname & "." &     DateDone & ".xlsx"
Set Wb1 = Workbooks.Open(xPath & "\" & HospName & "." & Aname & "." & DateDone & ".xlsx")

Wb.Activate

提前致谢

最佳答案

这对我在 Excel 2013 上有效,使用 Worksheet.Copy方法。我也尝试了一个举动,使用 Worksheet.Move方法,但移动工作表大约需要 10 秒(!)。

Public Sub copy_it_buster()
    Dim to_copy As Worksheet, copy_after As Worksheet
    Set to_copy = Workbooks("Book2").Sheets(1)  ' Or whatever worksheet you're moving from 
    Set copy_after = Workbooks("Book3").Sheets(1)  ' Or whatever worksheet you want to copy after.
        ' Note that this is in a different workbook!
    to_copy.Copy After:=copy_after
    'to_copy.Move After:=copy_after ' if you don't want to keep it where
                                    ' it was originally
End Sub

编辑 2:复制后,要将所有公式转换为平面值,请尝试 Ron de Bruin's MVP site 提供的此操作:

dim sh as Worksheet
set sh = ' whatever your new worksheet is
With sh.UsedRange
    .Value = .Value
End With

编辑对于我最初测试的Move案例,当我开始时:

Book2                   Book3
Sheet1                  Sheet1

我最终得到:

no Book2!               Book3
                        Sheet1    Sheet1 (2)

编辑用于复制,我得到:

Book2                   Book3
Sheet1                  Sheet1 Sheet1(2)

请注意,这要求目标工作簿已存在。另外,如果您想复制/移动到现有工作表的之前而不是之后,只需将After更改为BeforeCopy 调用中。

还有 PS:为了减少此项目和 future 项目的挫败感,请使用 FromWorkbookToWorkbook 等名称,而不是 WbWb1。它可能看起来不多,但根据我的经验,它显着减少了调试时的脑力负担!

关于vba - 将工作表转移到新工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778980/

相关文章:

excel - Excel中的字符串总和

vba - 使用 Excel VBA 更改已关闭工作簿中单元格的值?

vba - Excel 宏记录器的使用

vba - 在excel电子表格之间复制信息的代码

asp.net-mvc - 将 MVC API 与来自 VBA 的 Windows 身份验证一起使用

vba - 如果找到(搜索词),则执行(操作)。如果没有,结束如果

vba - 使用 Excel VBA 选择 Outlook 文件夹

vba - 传入空日期的 Excel VBA 函数导致#VALUE!错误

python - 如何在Python上调用Excel中的值

vba - 将当前日期汇总到 15 日或月底