Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
工作表的Excel Vba复制方法失败_Excel_Vba_Vbs - Fatal编程技术网

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

工作表的Excel Vba复制方法失败,excel,vba,vbs,Excel,Vba,Vbs,我试图将excel工作表从一个工作簿复制到另一个工作簿,但用户看不到任何内容,但我不断收到错误“工作表类的复制方法失败”。除非工作簿可见,否则您似乎无法将一张工作表复制到另一个工作簿 谢谢你的帮助 她的代码失败了: Private Sub CommandButton1_Click() Dim xlapp As Excel.Application Dim wkBook As Excel.Workbook 'Connect to Excel Set xlapp = New Excel.Appli

我试图将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

如果您是从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应用程序指向正确的工作簿:

Set xlapp = ThisWorkbook.Application
如果需要在用户看不到更改的情况下执行此操作,可以使用:

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

如果您是从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应用程序指向正确的工作簿:

Set xlapp = ThisWorkbook.Application
如果需要在用户看不到更改的情况下执行此操作,可以使用:

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

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

最好再次将其作为一个整体运行,而不是

将此代码复制到记事本中 更改源工作簿和目标工作簿的路径以适应 将其另存为vbs文件,即test.vbs 单击vbs文件以在后台执行复制 或者,将此代码放在VBA中的子文件中,并在源文件和目标文件都关闭的情况下从控制工作簿运行它。如果使用VBA,建议您正确标注变量

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

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

最好再次将其作为一个整体运行,而不是

将此代码复制到记事本中 更改源工作簿和目标工作簿的路径以适应 将其另存为vbs文件,即test.vbs 单击vbs文件以在后台执行复制 或者,将此代码放在VBA中的子文件中,并在源文件和目标文件都关闭的情况下从控制工作簿运行它。如果使用VBA,建议您正确标注变量

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

但是我不想让用户看到工作簿的打开和关闭?是否有任何方法可以在用户看不到要复制到的工作簿的情况下从一个工作簿复制到另一个工作簿?谢谢–JC75


我需要将工作簿设置为visible=false,但工作簿没有visible属性。如果我将应用程序窗口设置为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

但是我不想让用户看到工作簿的打开和关闭?是否有任何方法可以在用户看不到要复制到的工作簿的情况下从一个工作簿复制到另一个工作簿?谢谢–JC75


我需要将工作簿设置为visible=false,但工作簿没有visible属性。如果我将应用程序窗口设置为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
试试这个

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

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

这不是你的问题。您正在创建一个单独的Excel实例,该实例无法与包含代码的当前实例通信。这不是您的问题。您正在创建一个单独的Excel实例,该实例无法与包含代码的当前实例通信。此代码应能正常工作,因为它使用相同的Excel实例。但是,应该清楚的是,原来的代码无法工作,因此需要在上面运行它,而不是这样做,但是我不想让用户看到工作簿的打开和关闭?是否有任何方法可以在用户看不到要复制到的工作簿的情况下从一个工作簿复制到另一个工作簿?感谢这没有任何区别,工作表仍然打开并且可见。我需要将工作簿设置为visible=false,但工作簿没有visible属性。如果我将应用程序窗口设置为visible=false,则会得到与“工作表类的复制方法失败”相同的原始错误。此代码应该可以工作,因为它使用了相同的Excel实例。但是,应该清楚的是,原来的代码无法工作,因此需要在上面运行它,而不是这样做,但是我不想让用户看到工作簿的打开和关闭?是否有任何方法可以在用户看不到要复制到的工作簿的情况下从一个工作簿复制到另一个工作簿?感谢这没有任何区别,工作表仍然打开并且可见。我需要将工作簿设置为visible=false,但工作簿没有visible属性。如果我将应用程序窗口设置为visible=false,我会得到与“工作表类的复制方法失败”相同的原始错误,谢谢。这是可行的,只是我必须在关闭前使窗口再次可见,否则下次打开电子表格时,窗口将保持可见=false。@JC75:是的,只需取消通信即可
在我的代码中删除这行。用户将不会看到工作簿显示,因为它将立即关闭。您好,谢谢。这是可行的,只是我必须在关闭前使窗口再次可见,否则下次打开电子表格时,窗口将保持可见=false。@JC75:是,只需在我的代码中取消对该行的注释即可。用户将不会看到工作簿显示,因为它将立即关闭。