【发布时间】:2018-03-27 16:25:35
【问题描述】:
下面是我从一个工作簿复制到另一个工作簿的代码。 我查找了很多类似的问题,但无法正常工作。 当我运行它时,这两个文件打开,然后我得到第三个名为 book1 的所有结果。然后我得到一个错误“工作表类的复制方法失败”。 我想要做的是将一般报告表从 o.Book 复制到 xBook。 我想暂时让这些书保持打开状态,直到这是正确的,但我稍后会使用 Xbook。 请问我可以得到帮助吗?
Private Sub Button1_Click(sender As Object, e As 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
【问题讨论】:
-
乍一看,您正在创建两个 Excel 实例,打开每个实例中的工作簿(因此每个实例都有一个打开的工作簿),然后在第一个实例中您打算将工作表复制到另一个工作簿,在该实例中 已关闭 并标记为只读,因为它已在其他位置(在 Excel 的另一个实例中)打开。对吗?
-
没错,不幸的是我不明白如何解决这个实例问题。
-
合并
oExcel和xExcel? -
我想将工作表从 oExcel 复制到 xExcel 中,然后想删除 oExcel
-
还想在 xExcel 中复制的数据上运行宏
标签: excel visual-studio-2017 vba