Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Метод Copy из класса Worksheet завершен неверно / 19 сообщений из 19, страница 1 из 1
13.04.2005, 12:48
    #33013078
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Добрый день.
Есть одна проблемка, никак не могу найти причину.
Есть некие данные и необходимо разложить их по отдельным листам Excel, по принципу (в данном случае) один лист – одна кассета.
Что делаем: Копируем данные на следующий лист, удаляем все лишнее с текущего листа оставляя нужную кассету, со следующего листа убираем нужную кассету. И далее по циклу.
Но когда доходит до 56 листа (+- 2 в зависимости от данных) появляется ошибка:
Run-time error ‘1004’
Метод Copy из класса Worksheet завершен неверно.

После этого в документе нельзя скопировать (даже вручную) не одной страницы, новые же создаются.


Public Function Start()
Dim j_ As Integer
Dim sheetNo_ As Integer
Dim CassetaNo_ As String

j_beg = 2
sheetNo_ = 2
Cells(1.1).Select

CassetaNo_ = Sheets(2).Cells(2, 6) 'Первая кассета

Do Until IsEmpty(Sheets(sheetNo_).Cells(j_beg, 6))

On Error GoTo Err_Copy

Sheets(sheetNo_).Copy After:=Sheets(sheetNo_) 'копируем лист

j_ = j_beg + 1 'чистим текущий лист
Do Until IsEmpty(Sheets(sheetNo_).Cells(j_, 6))
If Sheets(sheetNo_).Cells(j_, 6) <> CassetaNo_ Then
Sheets(sheetNo_).Rows(j_).Delete
Else
j_ = j_ + 1
End If
Loop
If Sheets(sheetNo_).Cells(j_beg, 6) <> "" Then
Sheets(sheetNo_).Name = Sheets(sheetNo_).Cells(j_beg, 6)
Else
Sheets(sheetNo_).Name = "Null"
End If

j_ = j_beg 'чистим следущий лист от предыдущей кассеты
Do Until IsEmpty(Sheets(sheetNo_ + 1).Cells(j_, 6))
If Sheets(sheetNo_ + 1).Cells(j_, 6) = CassetaNo_ Then
Sheets(sheetNo_ + 1).Rows(j_).Delete
Else
j_ = j_ + 1
End If
Loop

sheetNo_ = sheetNo_ + 1
CassetaNo_ = Sheets(sheetNo_).Cells(j_beg, 6)

Loop
End Function
...
Рейтинг: 0 / 0
13.04.2005, 14:07
    #33013367
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
...
Рейтинг: 0 / 0
13.04.2005, 15:51
    #33013746
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Да… Жаль.
Мысль о переполнении буфера родилась одной из первых.
Переделывать будет затруднительно т.к. логика работы затачивалась по пользователей: Все отчеты в одной книге, поиск нужной (несмотря на количество страниц 3-4 секунды) и печать одной кнопкой.
Спасибо, по крайней мере, дальнейшие поиски прекращаю. Буде думать, как вылечить причину, а не следствие.
...
Рейтинг: 0 / 0
13.04.2005, 17:14
    #33014109
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
VovaNaДа… Жаль.
Мысль о переполнении буфера родилась одной из первых.
Переделывать будет затруднительно т.к. логика работы затачивалась по пользователей: Все отчеты в одной книге, поиск нужной (несмотря на количество страниц 3-4 секунды) и печать одной кнопкой.
Спасибо, по крайней мере, дальнейшие поиски прекращаю. Буде думать, как вылечить причину, а не следствие.
в тот раз я вылечил так : создал базу ассекс и листы excel хранил как двоичный объект
зы
щас правда как-то стыдно про это вспоминать, но прога года 3 работала.
...
Рейтинг: 0 / 0
14.04.2005, 09:57
    #33014985
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
А если срахзу создать пару сотен путсых скрытых листов? И затем только их форматировать? Пройдет?
...
Рейтинг: 0 / 0
14.04.2005, 09:59
    #33014996
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Senin ViktorА если срахзу создать пару сотен путсых скрытых листов? И затем только их форматировать? Пройдет?
Мб, но у меня не прошло - глюки начались при их заполнении.
...
Рейтинг: 0 / 0
14.04.2005, 15:24
    #33016221
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Ура!
В процессе модернизации перевел программу на коннект через ADO. И, о чудо, программа заработала. С ходу обработала все страницы (63, больше данных пока нет). Никогда бы не подумал…
...
Рейтинг: 0 / 0
14.04.2005, 16:33
    #33016539
MX-ALEX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
VovaNaУра!
В процессе модернизации перевел программу на коннект через ADO. И, о чудо, программа заработала. С ходу обработала все страницы (63, больше данных пока нет). Никогда бы не подумал…
интересно..
Не могли бы Вы немножно раскрыть -у нас тоже проблемы с копированием.
Спасибо.
...
Рейтинг: 0 / 0
14.04.2005, 17:54
    #33016806
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Собственно, выше приведенный код я не менял ни на один символ.
Изначально я использовал соединение с сервером через ODBC, сейчас поменял его на ADO. Запрос и данные те же.
Поэтому и не понимаю, как это могло повлиять.
Хотя гипотеза есть, возможно, ODBC сам забивал буфер и поэтому остальные данные туда не входили.
Варианты кода ODBC-ADO нужны?
...
Рейтинг: 0 / 0
15.04.2005, 08:45
    #33017345
MX-ALEX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
VovaNaСобственно, выше приведенный код я не менял ни на один символ.
Изначально я использовал соединение с сервером через ODBC, сейчас поменял его на ADO. Запрос и данные те же.
Поэтому и не понимаю, как это могло повлиять.
Хотя гипотеза есть, возможно, ODBC сам забивал буфер и поэтому остальные данные туда не входили.
Варианты кода ODBC-ADO нужны?
да - пожалуйста напишите ...
...
Рейтинг: 0 / 0
15.04.2005, 15:20
    #33018382
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
'Запрос через ODBC

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DRIVER=SQL Server;SERVER=СЕРВЕР;UID=ЛОГИН;APP=Microsoft Office 2003;WSID=IT;DATABASE=БД;Trusted_Connection" _
), Array("=Yes")), Destination:=Range("A1"))
.Name = "Chenge"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.CommandText = "ЗАПРОС"
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With


'Запрос через ADO

Option Explicit
Const strConnect = "Provider=SQLOLEDB;Data Source=СЕРВЕР;database=БД;uid=ЛОГИН;pwd="
Dim cn1 As Object
Dim rst1 As Object
Public Function Change_Pro()
Dim strSQL As String

Set cn1 = CreateObject("ADODB.Connection") 'подключаемся к БД
cn1.Open strConnect
Set rst1 = CreateObject("ADODB.Recordset") 'рабочий рекордсет

strSQL = "ЗАПРОС"

Dim cmd1 As ADODB.Command
Set cmd1 = New ADODB.Command
Set cmd1.ActiveConnection = cn1
cmd1.CommandText = strSQL
cmd1.CommandTimeout = 600
Set rst1 = cmd1.Execute

With Range("A1")
.Borders.LineStyle = 1
.CopyFromRecordset rst1
End With
End Function
...
Рейтинг: 0 / 0
15.04.2005, 17:33
    #33018827
MX-ALEX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
VovaNa'Запрос через ODBC


Спасибо .
может поможет
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
14.01.2013, 10:02
    #38108808
tema-n
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
че то я не понял, в начале разговор был про эксель, в конце какие то БД появились. у меня анологичная пробема в экцеле, после 51-го листа выдается таже самая ошибка (( если кто знает, подскажите как можно устранить данную ошибку, пожалуйста
...
Рейтинг: 0 / 0
14.01.2013, 10:50
    #38108857
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
...
Рейтинг: 0 / 0
14.01.2013, 14:03
    #38109189
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Казанский http://support.microsoft.com/kb/210684/ru
Оно?

Эту проблему микрософт увидел - точнее ему показали - в 2007 году

Но валится до сих пор

==========
...
Рейтинг: 0 / 0
08.04.2013, 20:06
    #38217888
Bagir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Та же шляпа уже давно и у меня. Микрософт советует почаще сохранять или переоткрывать книгу. Мне это не подходит. Книги открыты только для чтения и работают с файлами данных. И повсюду, где по ходу работы есть операции копирования листа, рано или поздно книга валится с подобной ошибкой. Листов в книге храниться не много; копий за раз делается тоже не много, но общее их количество за период работы книги может достигать больших количеств.
Второе решение от Микрософта заинтересовало более. У меня копии всегда идут спецально созданного и пустого листа - шаблона, который хранится в этой же книге. Микрософт советует сохранить этот лист в файл как шаблон, и в последствии не делать копию листа, а вставлять свой шаблон методом .add
Не знаю где будет валяться у меня эта свалка шаблонов, которые придется вырвать из книг, но для обхода этой ошибки придется попробовать сделать так.
А может кто в курсе, есть ли способы заблаговременного оповещения о возможности этой ошибки? Ну например если это переполнение буфера, то периодически или перед копированием посмотреть его, и если там "кисло", то сказать в виде сообщения о прогнозируемом печальном финале.
...
Рейтинг: 0 / 0
08.04.2013, 20:16
    #38217899
Bagir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
К стати, мысль тут пришла. Оставить лист-шаблон в книге, если так очень хочется, а при ее открытии программно сохранять этот лист как шаблон например в TEMP каталог. Чтобы вся эта кухня работала отменно, нужно написать небольшую процедуру добавления листа. Думаю логика может быть такой:
1. при открытии книги эта процедура получит параметр и просто скопирует лист-шаблон в TEMP и запомнит его временное имя.
2. при получении параметра на вставку шаблона:
- попробует вставить шаблон.
- при неудаче выполнит повторное копирование и попробует вставить еще раз.

А вообще будет полезно обкатать способ вставки шаблона. Если кто так уже обходил зловредную ошибку, и это на самом деле работает, то пожалуйста отпишитесь.
...
Рейтинг: 0 / 0
09.04.2013, 09:41
    #38218214
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
Bagir,

какая версия EXCEL ?

как будто в 2010 копирование листов работауе нормально
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.06.2014, 18:37
    #38680232
RyanDM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Copy из класса Worksheet завершен неверно
если кому-то еще интересно
столкнулась с этой же проблемой, при массовом копировании листов в цикле в районе 50-го листа вылет с ошибкой 1004 метод копи класса воркшит завершен неверно.
ковыряния интернета особых плодов не дало, огороды воротить с шаблонами, разбиванием книг на части, копированием значений и последующем форматировании (это очень долго, рисовательные функции экселя умертвляют даже самый быстрый код, поэтому всяческие форматирования делаю тока при необходимости и за один ход по возможности) это как-то слишком сложно (не в плане реализации, а в плане, проще все должно быть, бритва оккама))

короче, решение элементарнейшее.
в начале кода сунуть :

Код: vbnet
1.
On Error GoTo errorhandler



перед копированием листа вставить метку :

Код: vbnet
1.
2.
nextpop:
            Workbooks(file_name).Sheets(i).Copy after:=Workbooks(tf).Sheets(Workbooks(tf).Sheets.Count)



перед end sub :

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Exit Sub 'выход без захода в еррорхендлер (если все хорошо)
errorhandler:
    Select Case Err.Number 'определяем ошибку
    Case 1004
        Workbooks(file_name).Sheets(i).Copy 
'копируем заартачившийся лист в новую пустую ненужную нам книгу, 
'закрываем эту новую книгу без сохранения (так как она нам не нужна), 
'и с чистой совестью делаем новую попытку скопировать проблемный лист куда нужно (ссылка на некстпоп).
        ActiveWorkbook.Close (0)
        GoTo nextpop
    End Select

End Sub



после этого ошибка возникает, решается, и код выполняется дальше без каких-либо затыков и вылетов.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Метод Copy из класса Worksheet завершен неверно / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]