Excel Vba复制方法的工作表失败

我想从一个工作簿复制到另一个Excel工作表没有用户看到任何东西,但我不断收到错误“复制工作表类失败”的错误。 看来你不能复制一张表到另一个工作簿,除非工作簿是可见的?

谢谢你的帮助。

她的代码是失败的:

Private Sub CommandButton1_Click() Dim xlapp As Excel.Application Dim wkBook As Excel.Workbook 'Connect to Excel Set xlapp = New Excel.Application 'Set workbook and open workbook in directory Set wkBook = xlapp.Workbooks.Open(sFileName, xlUpdateLinksNever, ReadOnly:=False) ThisWorkbook.Sheets("Logistics").Copy Before:=wkBook.Sheets(1) wkBook.Close True xlapp.Quit Set xlapp = Nothing End Sub 

但是我不希望用户看到工作簿打开和closures? 如果没有用户看到正在复制的工作簿,是否有任何方法可以从一个工作簿复制到另一个工作簿? 谢谢 – JC75

我需要将工作簿设置为visible = false,但是没有可见的工作簿属性。 如果我将应用程序窗口设置为visible = false,我会得到与“工作表类复制方法失败”相同的原始错误 – JC75

另一种方法来实现你想要的。

 '~~> From within excel Sub Sample() Dim wb1 As Workbook, wb2 As Workbook Dim ws1 As Worksheet Dim sFileName As String sFileName = "C:\Temp.xls" Set wb1 = ActiveWorkbook Set ws1 = wb1.Sheets("Logistics") Set wb2 = Workbooks.Open(sFileName) ActiveWindow.Visible = False wb2.Sheets.Add Before:=wb2.Sheets(1) ws1.Cells.Copy wb2.Sheets(1).Cells 'Windows(wb2.Name).Visible = True wb2.Close SaveChanges:=True Set wb1 = Nothing Set wb2 = Nothing End Sub 

如果你从Excel中做到这一点,你不需要调用Excel.Application,这应该工作:

 Private Sub CommandButton1_Click() Dim wkBook As Workbook 'Set workbook and open workbook in directory Set wkBook = Workbooks.Open(sFileName, xlUpdateLinksNever, ReadOnly:=False) ThisWorkbook.Sheets("Logistics").Copy Before:=wkBook.Sheets(1) wkBook.Close True End Sub 

如果您需要类似于您的代码的东西,则需要使用当前的Excel for WorkWorkbook指向正确的工作簿:

 Set xlapp = ThisWorkbook.Application 

如果您需要在用户看不到更改的情况下执行此操作,则可以使用:

 Application.ScreenUpdating = False 'Insert the rest of the code Application.ScreenUpdating = True 

如果您想在后台执行此操作,则应使用控制工作簿来自动执行这两个工作簿

再次运行它作为一个vbs而不是vba

  1. 将此代码复制到记事本中
  2. 更改源和目​​标工作簿的path以适应
  3. 将其保存为vbs文件,即“test.vbs”
  4. 点击vbs文件在后台执行拷贝

或者将此代码放入VBA中的Sub中,并从控制工作簿中运行它,同时closures源文件和目标文件(build议您在使用VBA时正确标注variables)

 Dim objExcel Dim Wb1 Dim Wb2 Dim ws Set objExcel = CreateObject("excel.application") On Error Resume Next Set Wb1 = objExcel.Workbooks.Open("c:\temp\source.xlsm") Set Wb2 = objExcel.Workbooks.Open("c:\temp\dest.xlsm") Set ws = Wb1.Sheets("logistics") If Not IsEmpty(ws) Then ws.Copy Wb2.Sheets(1) objExcel.DisplayAlerts = False Wb2.Save objExcel.DisplayAlerts = True wscript.echo "success" Else wscript.echo "copy failed" End If Wb2.Close False Wb1.Close False On Error GoTo 0 objExcel.Quit Set objExcel = Nothing 

尝试这个

 Sub CopyAcross() Workbooks("Model24.xls").Sheets("Custom").Copy Before:=Workbooks("Master.xls").Sheets(1) End Sub