Не работает метод Copy (Worksheets), но всё очень странно. - VB
Формулировка задачи:
Написал программу в Ексель 2007.
Проверил работает.
Выяснилось позже, что программа будет работать на Ексель 2010.
Поставил у себя Ексель 2010 (т.е. на компьютере 2010 и 2007 Ексель), проверил - работает.
Поставил на другой чистый компьютер Ексель 2010 (т.е. тут только Ексель 2010 и больше ничего) - проверил работает.
Привез программу к заказчику - не работает. единственная разница - у меня русский Виндоус 8, у него немецкий Windows 7
ошибки идут просто ужасно странные, например:
Public Function IsFilePresent(FullPathName As String) As Boolean
If Dir(FullPathName) <> "" Then тут ошибка
говорит, что Bad file name на "E:\macro\macro_2014.xlsm" и вызывает Debug
опытным путем установил, что именно комбинация E: (такого диска нет) вызывает ошибку, остальное без проблем.
на верный путь "C:\macro\macro_2014.xlsm" отрабатывает нормально
и на неверный путь (такого диска нет) "F:\macro\macro_2014.xlsm" отрабатывает нормально - выдает моё сообщение о неверном пути.
Но это же стринг. какая ему разница какие буквы внутри?
ок, пока поставил верный путь и пошли дальше.....
потом эта часть кода (мне необходимо из одной книги в другую скопировать полностью лист, включая все свойства и макросы листа):
Dim Source As Excel.Workbook
Dim Target As Excel.Worksheet
Dim SourceL As Excel.Worksheet
Set Source = Workbooks.Open(MacroPath, , True, , "111")
Set SourceL = Source.Worksheets(SheetName)
ОШИБКА ТУТ
говорит - Run time error 1004
method copy of object _worksheet failed
проверяю синтаксис, проверяю параметры - всё отлично.
согласно всем интернет ресурсам синтаксис верный и других вариантов нет.
Как тут переписать - не знаю. тем более на моих двух ПК всё работает.
Что было сделано для поиска проблемы:
1) отрубил антивирус
2) поставил одинаковый Ексель 2010
3) убрал кириллицу из программы - только английский язык
4) запустил у него Ексель с правами администратора
идей больше нет, а программа не работает.
Буду рад помощи.
Проверил работает.
Выяснилось позже, что программа будет работать на Ексель 2010.
Поставил у себя Ексель 2010 (т.е. на компьютере 2010 и 2007 Ексель), проверил - работает.
Поставил на другой чистый компьютер Ексель 2010 (т.е. тут только Ексель 2010 и больше ничего) - проверил работает.
Привез программу к заказчику - не работает. единственная разница - у меня русский Виндоус 8, у него немецкий Windows 7
ошибки идут просто ужасно странные, например:
Public Function IsFilePresent(FullPathName As String) As Boolean
If Dir(FullPathName) <> "" Then тут ошибка
говорит, что Bad file name на "E:\macro\macro_2014.xlsm" и вызывает Debug
опытным путем установил, что именно комбинация E: (такого диска нет) вызывает ошибку, остальное без проблем.
на верный путь "C:\macro\macro_2014.xlsm" отрабатывает нормально
и на неверный путь (такого диска нет) "F:\macro\macro_2014.xlsm" отрабатывает нормально - выдает моё сообщение о неверном пути.
Но это же стринг. какая ему разница какие буквы внутри?
ок, пока поставил верный путь и пошли дальше.....
потом эта часть кода (мне необходимо из одной книги в другую скопировать полностью лист, включая все свойства и макросы листа):
Dim Source As Excel.Workbook
Dim Target As Excel.Worksheet
Dim SourceL As Excel.Worksheet
Set Source = Workbooks.Open(MacroPath, , True, , "111")
Set SourceL = Source.Worksheets(SheetName)
ОШИБКА ТУТ
говорит - Run time error 1004
method copy of object _worksheet failed
проверяю синтаксис, проверяю параметры - всё отлично.
согласно всем интернет ресурсам синтаксис верный и других вариантов нет.
Как тут переписать - не знаю. тем более на моих двух ПК всё работает.
Что было сделано для поиска проблемы:
1) отрубил антивирус
2) поставил одинаковый Ексель 2010
3) убрал кириллицу из программы - только английский язык
4) запустил у него Ексель с правами администратора
идей больше нет, а программа не работает.
Буду рад помощи.
Решение задачи: «Не работает метод Copy (Worksheets), но всё очень странно.»
textual
Листинг программы
Public Function CopySheet(SheetName As String) As Boolean Dim Source As Excel.Workbook Dim Target As Excel.Worksheet Dim SourceL As Excel.Worksheet 'проверить наличие листа If IsSheetPresent(SheetName) Then 'лист есть - остановить копирование CopySheet = True Else CopySheet = False 'листа нет - создать новый 'создать лист Set Sh = Sheets.Add Sh.Name = SheetName 'куда копировать Set Target = Workbooks(ClientName).Worksheets(SheetName) 'сохраняем порядковый номер листа IndexTarget = Target.Index 'открываем файл Set Source = Workbooks.Open(MacroPath, , True, , "111") Set SourceL = Source.Worksheets(SheetName) 'Копирование листа Клиент из книги макроса в книгу Клиент SourceL.Copy After:=Target 'Чтобы не появлялись предупреждающие сообщения об удалении листа. Application.DisplayAlerts = False 'удалить лист Клиент Target.Delete 'Чтобы появлялись предупреждающие сообщения тогда, 'когда они должны появляться. Application.DisplayAlerts = True 'переименовать лист Клиент2 в Клиент Worksheets(IndexTarget).Name = SheetName 'закрываем книгу Application.DisplayAlerts = False Source.Close Application.DisplayAlerts = True End If End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д