【问题标题】:VBA to copy specific sheet to existing bookVBA将特定工作表复制到现有书籍
【发布时间】:2015-09-23 23:28:39
【问题描述】:

这里的任务是双重的(虽然第一部分已经有效)。
任务 1:将从组合框中选择的工作表复制到新文档中。
任务 2:从原始文档中复制特定工作表并将其添加到上面创建的新文档中。

到目前为止,我得到了这个:(但第二个任务不起作用)

Sub Extract()

Dim wbkOriginal As Workbook
Set wbkOriginal = ActiveWorkbook



'sets site and engineer details into the estate page that is being extracted
Worksheets(FrontPage.CmbSheet.Value).Range("B3").Value = Worksheets("front page").Range("E6")
Worksheets(FrontPage.CmbSheet.Value).Range("D3").Value = Worksheets("front page").Range("N6")
Worksheets(FrontPage.CmbSheet.Value).Range("F3").Value = Worksheets("front page").Range("K6")
Worksheets(FrontPage.CmbSheet.Value).Range("B4").Value = Worksheets("front page").Range("F8")
Worksheets(FrontPage.CmbSheet.Value).Range("D4").Value = Worksheets("front page").Range("K8")

' copies sheet name from combo box into new document, saves it with site name and current date
' into C:\Temp\ folder for ease of access

    With ActiveWorkbook.Sheets(FrontPage.CmbSheet.Value)
    .Copy
            ActiveWorkbook.SaveAs _
            "C:\temp\" _
            & .Cells(3, 2).Text _
            & " " _
            & Format(Now(), "DD-MM-YY") _
            & ".xlsm", _
            xlOpenXMLWorkbookMacroEnabled, , , , False
        End With

Dim wbkExtracted As Workbook

Set wbkExtracted = ActiveWorkbook

 Workbooks(wbkOriginal.Name).Sheets(DOCUMENTS).Copy _
    After:=Workbooks(wbkExtracted.Name).Sheets(wbkExtracted.Name).Sheets.Count

'code to close the original workbook to prevent accidental changes etc
'Application.DisplayAlerts = False
'wbkOriginal.Close
'Application.DisplayAlerts = True
End Sub

我希望你们中的一个聪明人能告诉我我做错了什么:)

【问题讨论】:

    标签: vba excel spreadsheet copying


    【解决方案1】:
    Sub Full_Extract()
    
    Dim wbkOriginal As Workbook
    Set wbkOriginal = ActiveWorkbook
    
    'sets site and engineer details into the estate page that is being extracted
    Worksheets(Sheet1.CmbSheet.Value).Range("B3").Value = Worksheets("front page").Range("E6")
    Worksheets(Sheet1.CmbSheet.Value).Range("D3").Value = Worksheets("front page").Range("N6")
    Worksheets(Sheet1.CmbSheet.Value).Range("F3").Value = Worksheets("front page").Range("K6")
    Worksheets(Sheet1.CmbSheet.Value).Range("B4").Value = Worksheets("front page").Range("F8")
    Worksheets(Sheet1.CmbSheet.Value).Range("D4").Value = Worksheets("front page").Range("K8")
    
    ' copies sheet name from combo box into new document, saves it with site name and current date
    ' into C:\Temp\ folder for ease of access
    
        With ActiveWorkbook.Sheets(Array((Sheet1.CmbSheet.Value), "Z-MISC"))
                .Copy
                ActiveWorkbook.SaveAs _
                "C:\temp\" _
                & ActiveWorkbook.Sheets(Sheet1.CmbSheet.Value).Cells(3, 2).Text _
                & " " _
                & Format(Now(), "DD-MM-YY") _
                & ".xlsm", _
                xlOpenXMLWorkbookMacroEnabled, , , , False
            End With
    
    'code to close the original workbook to prevent accidental changes etc
    Application.DisplayAlerts = False
    wbkOriginal.Close
    Application.DisplayAlerts = True
    End Sub
    

    【讨论】:

      【解决方案2】:

      我想我知道您遇到的问题。 (也许)如果您正在使用新的 excel 实例,您需要保存它然后重新打开它。它必须与对象模型有关。不久前我不得不这样做。这是我使用的代码的 sn-p。

      Set appXL = New Excel.application
      appXL.Workbooks.Add
      Set wbThat = appXL.ActiveWorkbook
      wbThat.application.DisplayAlerts = False
      wbThat.SaveAs Filename:=strFilePath & "\" & strFileName
      
      'This code needed to allow the copy function to work
      wbThat.Close savechanges:=True
      Set wbThat = Nothing
      Set wbThat = application.Workbooks.Open(strFilePath & "\" & strFileName)
      appXL.Quit
      Set appXL = Nothing
      
      'Copy Help page from this workbook to the report
      wbThis.Sheets("Help").Copy after:=wbThat.Sheets(wbThat.Sheets.Count)
      

      【讨论】:

      • 嗨,杰克 - 谢谢(我知道延迟了,抱歉,被其他工作分心了)。再次回到这个话题,我正在努力让你的代码想法在我的特定场景中发挥作用。我决定回溯并尝试不同的方法,改用数组。而且我正在取得一些更好的进展。
      • 现在我收到 438 的运行时错误,“对象不支持此属性或方法”-它创建新书,并移动从下拉列表中选择的工作表,加上支持文档表,但无论我如何指定数组,它总是将文档表放在首位,我认为导致问题的原因是它查询单元格 (3,2) 以获取单元格数据(这是指定的文件名的第一部分)因为 ZON-DOCS 工作表在新书中的第一位,这些单元格中没有数据。因此它倒下了。有什么建议吗?
      • 哈,不管是不是,只是通过手动将一些数据插入引用的单元格来测试该理论。没有快乐。
      • With ActiveWorkbook.Sheets(Array((Sheet1.CmbSheet.Value), "ZON-DOCS")) .Copy ActiveWorkbook.SaveAs _ "C:\temp\" _ & .Cells(3, 2).Text _ & " " _ & Format(Now(), "DD-MM-YY") _ & ".xlsm", _ xlOpenXMLWorkbookMacroEnabled, , , , False End With
      猜你喜欢
      • 2017-10-27
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2021-04-30
      • 1970-01-01
      • 2018-09-13
      • 2021-11-17
      相关资源
      最近更新 更多