2015-04-16 5 views
0

У меня есть 2 разных файлов первенствовать, как указано ниже:Копирование и вставка листа от одного к другому

  1. Report.csv
  2. Report.Xlsm

Оба файла имеет имя рабочего листа «Отчет "

Мне нужен сценарий vba для этого с MsAccess.

Мне нужно скопировать лист «Отчет» из Report.csv и заменить его на лист «Отчет» в Report.xlsm и сохранить файл xlsm. Также необходимо закрыть приложение. Код ниже выполняет задание, за исключением того, что он не заменяет лист «Отчет».

Private Sub CopyPaste() 

Dim CopyFrom As Object 
Dim CopyTo As Object ' Workbook 
Dim CopyThis As Object 
Dim xl As Object 'New Excel.Application 


Set xl = CreateObject("Excel.Application") 
xl.Visible = True 


Set CopyFrom = xl.Workbooks.Open("C:\Users\me\desktop\report.csv") 
Set CopyThis = CopyFrom.Sheets(1) ''Sheet number 1 

Set CopyTo = xl.Workbooks.Open("C:\users\me\desktop\Report.xlsm") 
CopyThis.Copy After:=CopyTo.Sheets(CopyTo.Sheets.Count) 

CopyFrom.Close True 
CopyTo.Save 
CopyTo.Close True 
xl.Quit 

End Sub 

ответ

1

Здесь вы идете. Вставить это и увидеть:

Sub CopyPaste() 

Dim CopyFrom As Object 
Dim CopyTo As Object ' Workbook 
Dim CopyThis As Object 
Dim xl As Object 'New Excel.Application 


Set xl = CreateObject("Excel.Application") 
xl.Visible = True 


Set CopyFrom = xl.Workbooks.Open("C:\Users\me\desktop\report.csv") 
Set CopyThis = CopyFrom.Sheets(1) ''Sheet number 1 

Set CopyTo = xl.Workbooks.Open("C:\users\me\desktop\Report.xlsm") 

CopyThis.Copy After:=CopyTo.Sheets(CopyTo.Sheets.Count) 

'Start of new code added 
xl.DisplayAlerts = False 
CopyTo.Sheets(1).Delete 'deletes the sheet that was initially there 
xl.DisplayAlerts = True 
CopyTo.Sheets(1).Name = "report" 'now the copied sheet has the index of 1 
'End of new code added 

CopyFrom.Close True 
CopyTo.Save 
CopyTo.Close True 
xl.Quit 

End Sub 
+0

Он все еще висит на «Application.DisplayAlerts = False». Просто чтобы вы знали, что я запускаю это из Access Vba. – user3323922

+1

Пожалуйста, используйте 'xl.DisplayAlerts = False' и' xl.DisplayAlerts = False' в соответствии с обновленным ответом. Спасибо – slayernoah

+0

Удивительный! работает. Большое спасибо. – user3323922

0

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

Private Sub CopyPaste() 

Dim CopyFrom As Object 
Dim CopyTo As Object ' Workbook 
Dim CopyThis As Object 
Dim xl As Object 'New Excel.Application 


Set xl = CreateObject("Excel.Application") 
xl.Visible = True 


Set CopyFrom = xl.Workbooks.Open("C:\Users\me\desktop\report.csv") 
Set CopyThis = CopyFrom.Sheets("Report") ''Sheet number is ok if it never move, name may be safer 

Set CopyTo = xl.Workbooks.Open("C:\users\me\desktop\Report.xlsm") 

xl.Application.DisplayAlerts = False 
CopyTo.sheets("Report").Delete 
xl.Application.DisplayAlerts = True 

CopyThis.Copy After:=CopyTo.Sheets(CopyTo.Sheets.Count) 

CopyFrom.Close True 
CopyTo.Save 
CopyTo.Close True 
xl.Quit 

End Sub 
+0

Ошибка «Метод или данные член не найден» на «Application.DisplayAlerts = False» – user3323922

+0

Действительно, как в Access, необходимо указать, что приложение Excel! Посмотрите на редактирование! ;) – R3uK

+1

Код не будет работать с обновленным ответом. Перед копированием листа вы пытаетесь удалить единственный лист в рабочей книге. Он вернет ошибку времени выполнения 1004. Книга должна содержать по крайней мере один видимый лист. – slayernoah

Смежные вопросы