Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
13.04.2005, 12:48
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Добрый день. Есть одна проблемка, никак не могу найти причину. Есть некие данные и необходимо разложить их по отдельным листам 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.04.2005, 14:07
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.04.2005, 15:51
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Да… Жаль. Мысль о переполнении буфера родилась одной из первых. Переделывать будет затруднительно т.к. логика работы затачивалась по пользователей: Все отчеты в одной книге, поиск нужной (несмотря на количество страниц 3-4 секунды) и печать одной кнопкой. Спасибо, по крайней мере, дальнейшие поиски прекращаю. Буде думать, как вылечить причину, а не следствие. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
13.04.2005, 17:14
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
VovaNaДа… Жаль. Мысль о переполнении буфера родилась одной из первых. Переделывать будет затруднительно т.к. логика работы затачивалась по пользователей: Все отчеты в одной книге, поиск нужной (несмотря на количество страниц 3-4 секунды) и печать одной кнопкой. Спасибо, по крайней мере, дальнейшие поиски прекращаю. Буде думать, как вылечить причину, а не следствие. в тот раз я вылечил так : создал базу ассекс и листы excel хранил как двоичный объект зы щас правда как-то стыдно про это вспоминать, но прога года 3 работала. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.04.2005, 09:57
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
А если срахзу создать пару сотен путсых скрытых листов? И затем только их форматировать? Пройдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.04.2005, 09:59
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Senin ViktorА если срахзу создать пару сотен путсых скрытых листов? И затем только их форматировать? Пройдет? Мб, но у меня не прошло - глюки начались при их заполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.04.2005, 15:24
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Ура! В процессе модернизации перевел программу на коннект через ADO. И, о чудо, программа заработала. С ходу обработала все страницы (63, больше данных пока нет). Никогда бы не подумал… ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.04.2005, 16:33
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
VovaNaУра! В процессе модернизации перевел программу на коннект через ADO. И, о чудо, программа заработала. С ходу обработала все страницы (63, больше данных пока нет). Никогда бы не подумал… интересно.. Не могли бы Вы немножно раскрыть -у нас тоже проблемы с копированием. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.04.2005, 17:54
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Собственно, выше приведенный код я не менял ни на один символ. Изначально я использовал соединение с сервером через ODBC, сейчас поменял его на ADO. Запрос и данные те же. Поэтому и не понимаю, как это могло повлиять. Хотя гипотеза есть, возможно, ODBC сам забивал буфер и поэтому остальные данные туда не входили. Варианты кода ODBC-ADO нужны? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.04.2005, 08:45
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
VovaNaСобственно, выше приведенный код я не менял ни на один символ. Изначально я использовал соединение с сервером через ODBC, сейчас поменял его на ADO. Запрос и данные те же. Поэтому и не понимаю, как это могло повлиять. Хотя гипотеза есть, возможно, ODBC сам забивал буфер и поэтому остальные данные туда не входили. Варианты кода ODBC-ADO нужны? да - пожалуйста напишите ... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.04.2005, 15:20
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
'Запрос через 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.04.2005, 17:33
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
VovaNa'Запрос через ODBC Спасибо . может поможет ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 10:02
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
че то я не понял, в начале разговор был про эксель, в конце какие то БД появились. у меня анологичная пробема в экцеле, после 51-го листа выдается таже самая ошибка (( если кто знает, подскажите как можно устранить данную ошибку, пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 10:50
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2013, 14:03
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Казанский http://support.microsoft.com/kb/210684/ru Оно? Эту проблему микрософт увидел - точнее ему показали - в 2007 году Но валится до сих пор ========== ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.04.2013, 20:06
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Та же шляпа уже давно и у меня. Микрософт советует почаще сохранять или переоткрывать книгу. Мне это не подходит. Книги открыты только для чтения и работают с файлами данных. И повсюду, где по ходу работы есть операции копирования листа, рано или поздно книга валится с подобной ошибкой. Листов в книге храниться не много; копий за раз делается тоже не много, но общее их количество за период работы книги может достигать больших количеств. Второе решение от Микрософта заинтересовало более. У меня копии всегда идут спецально созданного и пустого листа - шаблона, который хранится в этой же книге. Микрософт советует сохранить этот лист в файл как шаблон, и в последствии не делать копию листа, а вставлять свой шаблон методом .add Не знаю где будет валяться у меня эта свалка шаблонов, которые придется вырвать из книг, но для обхода этой ошибки придется попробовать сделать так. А может кто в курсе, есть ли способы заблаговременного оповещения о возможности этой ошибки? Ну например если это переполнение буфера, то периодически или перед копированием посмотреть его, и если там "кисло", то сказать в виде сообщения о прогнозируемом печальном финале. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.04.2013, 20:16
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
К стати, мысль тут пришла. Оставить лист-шаблон в книге, если так очень хочется, а при ее открытии программно сохранять этот лист как шаблон например в TEMP каталог. Чтобы вся эта кухня работала отменно, нужно написать небольшую процедуру добавления листа. Думаю логика может быть такой: 1. при открытии книги эта процедура получит параметр и просто скопирует лист-шаблон в TEMP и запомнит его временное имя. 2. при получении параметра на вставку шаблона: - попробует вставить шаблон. - при неудаче выполнит повторное копирование и попробует вставить еще раз. А вообще будет полезно обкатать способ вставки шаблона. Если кто так уже обходил зловредную ошибку, и это на самом деле работает, то пожалуйста отпишитесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2013, 09:41
|
|||
---|---|---|---|
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
Bagir, какая версия EXCEL ? как будто в 2010 копирование листов работауе нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.06.2014, 18:37
|
|||
---|---|---|---|
|
|||
Метод Copy из класса Worksheet завершен неверно |
|||
#18+
если кому-то еще интересно столкнулась с этой же проблемой, при массовом копировании листов в цикле в районе 50-го листа вылет с ошибкой 1004 метод копи класса воркшит завершен неверно. ковыряния интернета особых плодов не дало, огороды воротить с шаблонами, разбиванием книг на части, копированием значений и последующем форматировании (это очень долго, рисовательные функции экселя умертвляют даже самый быстрый код, поэтому всяческие форматирования делаю тока при необходимости и за один ход по возможности) это как-то слишком сложно (не в плане реализации, а в плане, проще все должно быть, бритва оккама)) короче, решение элементарнейшее. в начале кода сунуть : Код: vbnet 1.
перед копированием листа вставить метку : Код: vbnet 1. 2.
перед end sub : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
после этого ошибка возникает, решается, и код выполняется дальше без каких-либо затыков и вылетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=60&mobile=1&tid=2156295]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 284ms |
0 / 0 |