Excel Vba метод копирования листа не работает - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь скопировать лист Excel из одной рабочей книги в другую, чтобы пользователь ничего не видел, но у меня постоянно появляется ошибка «Метод копирования класса рабочего листа завершился ошибкой». Кажется, вы не можете скопировать один лист в другую книгу, если книга не видна?

Спасибо за любую помощь.

Hers - код, который не работает:

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

Ответы [ 4 ]

2 голосов
/ 17 февраля 2012

Если вы хотите сделать это в фоновом режиме, то вам следует использовать управляющую рабочую книгу для автоматизации обеих рабочих книг

Лучше снова запустить ее как , а не как

  1. Скопируйте этот код в Блокнот
  2. Измените путь к исходной и целевой книгам в соответствии с
  3. Сохраните его как vbs file, то есть "test.vbs"
  4. Щелкните файл vbs, чтобы выполнить копию в фоновом режиме

Либо поместите этот код в Sub в 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
2 голосов
/ 17 февраля 2012

Но я не хочу, чтобы пользователь видел открытие и закрытие книги?Есть ли способ скопировать из одной книги в другую, чтобы пользователь не увидел книгу, в которую копируется?Спасибо - 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
2 голосов
/ 17 февраля 2012

Если вы делаете это из 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Приложение для ThisWorkbook, указывающее на нужную книгу:

Set xlapp = ThisWorkbook.Application

Если вам нужно сделать это, пока пользователь не увидит изменения, вы можете использовать:

Application.ScreenUpdating = False
'Insert the rest of the code
Application.ScreenUpdating = True
1 голос
/ 11 сентября 2014

Попробуйте это

Sub CopyAcross()
  Workbooks("Model24.xls").Sheets("Custom").Copy Before:=Workbooks("Master.xls").Sheets(1)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...