Страницы: 1
RSS
Поломка после копирования данных: задвоение листов в редакторе VBA.
 
Доброго времени суток, уважаемые форумчане.

Долго пытался сам решить возникшую проблему, но все-таки не смог .

Итак, в незаполненный файл (в котором есть и формы пользователя и макросы и чуть-чуть формул) переношу данные из старого файла, переношу копированием только данных через спец-вставку, все ОК, файл сохраняю, проверяю открытием и вижу сообщение о повреждении файла с предложением восстановить файл. При согласии с предложением файл восстанавливался, но при этом все листы в Microsoft Excel Objects оказывались задвоенными, при этом "копии" имели другой ярлык (такой как на объекта "Эта книга"), при этом код с "основных" листов бесследно исчезал, как и форматирование ячеек (ширина и высота становились стандартными). Проверив все описанное несколько раз с одинаковым результатом я стал копировать данные по 1 листу, каждый раз после этого проверяя на открытие и как казалось нашел "проблемный" лист, при копировании которого начиналась проблема.
Ладно, лист удалил, создал заново чистый, перенес на него только форматирование ячеек, заполнил текст, вставил код на кнопку и пр. и до кучи пересохранился как .xlsb.
Проверил на открытие, все нормально, проверяю на работу макросов, нахожу и исправляю пару ошибок, сохраняю и ...  при открытии вновь вижу сообщение о повреждении, но немного не такое. Во первых файл восстановился нормально, без задвоения листов, во вторых после восстановления было сообщение: Восстановленные записи: Формула из части /xl/worksheets/sheet6.bin

Отсюда наконец мои вопросы по теме:
- что это за мистика с файлом и о каком sheet6 идет речь, если такого листа просто нет (просмотрел тщательно и даже проверил кодом)
- как это исправить, чтобы эта ошибка не проявилась у пользователя?

Заранее спасибо всем откликнувшимся.

P.S. Приношу извинения за некоторую "многобуквеннность", но этот полтергейст в 2 словах не опишешь.
P.S.2 Файл приложить не могу: исходный открывается нормально, но и то "весит" больше разрешенного на форуме, а уж заполненный даже в .xlsb "весит" более 1,5 Мб, но при этом он ни разу не секретный, так что если надо...
Изменено: OlegO - 21.01.2020 09:39:20
 
Цитата
OlegO написал: при этом все листы в Microsoft Excel Objects оказывались задвоенными, при этом "копии" имели другой ярлык
То ли копировали не только данные, то ли файл до копирования уже "был готов" к поломке.
Файл в объятиях MAC'а не бывал?
 
Цитата
vikttur написал:
Файл в объятиях MAC'а не бывал?
Нет таких игрушек в наших палестинах. Нет файл никак не мог попасть в лапы МАКа, это гарантированно. Да и старый файл я же делал (с которого информация копировалась и копировалась она именно так как я написал). Да это не столь важно, объясните как может быть сообщение об ошибках на листе6 ,если такого листа нет изначально?
 
Цитата
OlegO написал: на листе6 ,если такого листа нет изначально?
Есть такое, это Вы еще внутрь никогда не заходили. Правый клик на книге, открыть с помощью архиватора. Там много интересного :)

Похоже, sheet6 -  это та копия, которую Вы видите в редакторе
 
Наверное Вы на правильном пути. Действительно, если открыть winrar-ом, то в папке worksheets из папки Копия 111.xlsb\xl есть sheet6.bin. И что дальше надо сделать, удалить? Чем его кстати открыть можно? Пробовал блокнотом или Excel, только крякозябры отображаются
Изменено: OlegO - 21.01.2020 10:10:56
 
Откроете - и что? Если нет навыков работы с внутренностями, какой толк от то, что Вы там увиите? Да и смысл? Ведь этот лист УЖЕ создан, причина в другом месте. Можете попробовать удалять, но не повторится ли снова?
Цитата
vikttur написал:...то ли файл до копирования уже "был готов" к поломке.
И если это так, то нужно создать новенькую книгу и перенести аккуратно в нее данные, форматировать уже на новом месте.

А не здесь ли причина?
Цитата
OlegO написал:  проверяю на работу макросов, нахожу и исправляю пару ошибок, сохраняю и ...  при открытии вновь вижу сообщение о повреждении
Перед копированием данных закомментируйте ВСЕ макросы в книге, проверьте, нет ли копий листов в проекте. Далее копируете, исправляете ошибки, сохраняете, закрываете, открываете...
Потом раскомментируйте код. Поиграйтесь, сохраните,закройте, откройте...
 
Спасибо за помощь, буду думать-проверять
 
Ну что же, проверил. Выяснил, комментируя участки кода на активацию листа, что ошибку (которая восстанавливается нормально и, тем не менее, не хочет проходить), вызывают следующие строки кода:
Код
Private Sub Worksheet_Activate()
    Dim i As Long, j As Long, Arr_podr(), xDir()
...
 On Error Resume Next
         ReDim Arr_podr(1 To UBound(xDir))               
                For i = 1 To UBound(xDir)
                    Arr_podr(i) = Join(Array(xDir(i, 1), xDir(i, 2)), Space(1))
                Next i

                With Range("B14")
                    .Validation.Delete
                    .Validation.Add Type:=xlValidateList, Formula1:=Join(Application.Index(Arr_podr, 1, 0), ",")

                    For i = 1 To Len(.Value) + 1
                        If Mid(.Value & " ", i, 1) = " " Then j = j + 1
                    Next i
                        Section = Split(.Value)(j - 2) & " " & Split(.Value)(j - 1)
                End With 
...
проблемные строки:
Код
.Validation.Delete                   
.Validation.Add Type:=xlValidateList, Formula1:=Join(Application.Index(Arr_podr, 1, 0), ",")
во всяком случае, сделав несколько проверок я вижу, что если эти 2 строки закомментированны и прошла активация листа, то ошибки нет, стоит раскомментировать - ошибка (при последующем ОТКРЫТИИ файла, а не по ходу выполнения кода (тут все нормально)) проявляется. НО почему? Что в коде не так, как такое может быть, что код выполняется нормально, а при последующем открытии файла он вызывает ошибку, подскажите, пожалуйста, кто знает
Изменено: OlegO - 21.01.2020 19:05:21
 
Здравствуйте! По фрагменту кода что-то сказать сложно. Выложите ссылку на файл и описание действий, приводящих к ошибке.
Владимир
Страницы: 1
Наверх