簡體   English   中英

將工作表從excel工作簿復制到另一個工作簿

[英]Copy sheet from excel workbook to another workbook

下面是我從一個工作簿復制到另一工作簿的代碼。 我查了很多類似的問題,但無法正常工作。 當我運行此文件時,將打開兩個文件,然后我得到一個名為book1的第三個文件,其中包含所有結果。 然后我得到一個錯誤“工作表類的復制方法失敗”。 我想做的是將一般報表從o.Book復制到xBook。 我想暫時將這些書保持打開狀態,直到這是正確的為止,但是稍后我將使用Xbook。 我可以幫忙嗎?

私有子Button1_Click(作為對象發送,作為EventArgs發送)處理Button1.Click

    Dim oExcel As Excel.ApplicationClass
    Dim oBook As Excel.WorkbookClass
    Dim oBooks As Excel.Workbooks

    Dim xExcel As Excel.ApplicationClass
    Dim xBook As Excel.WorkbookClass
    Dim xBooks As Excel.Workbooks

    Dim user As String
    Dim opath As String
    Dim opathS As String
    Dim timeStamp As DateTime = DateTime.Now
    Dim path2 As String


    Label1.Text = "Working..."

    'Get the current system user user and set path to file
    user = Environment.UserName
    opath = "C:\Users\" + user + "\Downloads\ADC Open.xls"
    path2 = "C:\Users\" + user + "\Downloads\Personal.xlsm"
    opathS = "C:\Users\" + user + "\Desktop\Report.xls"

    'Create first object
    oExcel = CreateObject("Excel.Application")
    oExcel.DisplayAlerts = False
    oExcel.Visible = True
    oBooks = oExcel.Workbooks

    'Create second object
    xExcel = CreateObject("Excel.Application")
    xExcel.DisplayAlerts = False
    xExcel.Visible = True
    xBooks = xExcel.Workbooks

     'open first book 
    oBook = oBooks.Open(opath)

    'open second book
    xBook = xBooks.Open(path2)

    oBook.Worksheets("general_report").Copy(After:=xBook.Worksheets("general_report"))
    'Run the subroutine.
    'xExcel.Run("Execute")

    'xExcel.DisplayAlerts = False

    'Delete sheet not needed any more
    'xBook.Sheets("general_report").Delete

    'xExcel.DisplayAlerts = False

    'Save results to new file
    xBook.SaveAs(opathS)

    Label1.Text = "File saved at: " + opathS
    'Close the workbook and quit Excel.
    oBook.Close(False)

    System.Runtime.InteropServices.Marshal.
       ReleaseComObject(oBook)
    oBook = Nothing
    System.Runtime.InteropServices.Marshal.
       ReleaseComObject(oBooks)
    oBooks = Nothing
    oExcel.Quit()
    System.Runtime.InteropServices.Marshal.
       ReleaseComObject(oExcel)
    oExcel = Nothing

    'Delete  original file after finished with it 
    'System.IO.File.Delete(opath)
End Sub

還不能添加注釋,但是如果在所有平台上VB都相同,那么是否應該在聲明變量后Set變量?

Set MyObject = YourObject ' Assign object reference. 
Set MyObject = Nothing ' Discontinue association. 

在所有答復之后,我開始研究這些對象設置並找到有助於解釋的代碼,然后重構了以前的版本,這就是我想出的。 現在它就像一種魅力。 感謝大家的幫助和評論。

私有子Button1_Click(作為對象發送,作為EventArgs發送)處理Button1.Click

    Dim xlApp As Excel.Application = New Excel.Application

    Dim user As String
    Dim sourcePath As String
    Dim targetPath As String
    Dim savePath As String


    Label1.Text = "Working..."
    user = Environment.UserName
    sourcePath = "C:\Users\" + user + "\Desktop\Report\ADC Open (Dell GTIE JIRA).xls"
    targetPath = "C:\Users\" + user + "\Desktop\Report\Personal1.xlsm"
    savePath = "C:\Users\" + user + "\Desktop\Report\Report" & Format(Now(), "DD-MMM-YYYY") & ".xlsm"

    Dim wbSourceBook As Excel.Workbook = xlApp.Workbooks.Open _
        (sourcePath, ReadOnly:=False)
    Dim wbTargetBook As Excel.Workbook = xlApp.Workbooks.Open _
        (targetPath, ReadOnly:=False)

    'Excel expects to receive an array of objects that
    'represent the worksheets to be copied or moved.
    Dim oSheetsList() As Object = {"general_report"}

    wbSourceBook.Sheets(oSheetsList).Copy(Before:=wbTargetBook.Worksheets(1))

    wbSourceBook.Close(True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM