Долго пытался сам решить возникшую проблему, но все-таки не смог .
Итак, в незаполненный файл (в котором есть и формы пользователя и макросы и чуть-чуть формул) переношу данные из старого файла, переношу копированием только данных через спец-вставку, все ОК, файл сохраняю, проверяю открытием и вижу сообщение о повреждении файла с предложением восстановить файл. При согласии с предложением файл восстанавливался, но при этом все листы в Microsoft Excel Objects оказывались задвоенными, при этом "копии" имели другой ярлык (такой как на объекта "Эта книга"), при этом код с "основных" листов бесследно исчезал, как и форматирование ячеек (ширина и высота становились стандартными). Проверив все описанное несколько раз с одинаковым результатом я стал копировать данные по 1 листу, каждый раз после этого проверяя на открытие и как казалось нашел "проблемный" лист, при копировании которого начиналась проблема. Ладно, лист удалил, создал заново чистый, перенес на него только форматирование ячеек, заполнил текст, вставил код на кнопку и пр. и до кучи пересохранился как .xlsb. Проверил на открытие, все нормально, проверяю на работу макросов, нахожу и исправляю пару ошибок, сохраняю и ... при открытии вновь вижу сообщение о повреждении, но немного не такое. Во первых файл восстановился нормально, без задвоения листов, во вторых после восстановления было сообщение:Восстановленные записи: Формула из части /xl/worksheets/sheet6.bin
Отсюда наконец мои вопросы по теме: - что это за мистика с файлом и о каком sheet6 идет речь, если такого листа просто нет (просмотрел тщательно и даже проверил кодом) - как это исправить, чтобы эта ошибка не проявилась у пользователя?
Заранее спасибо всем откликнувшимся.
P.S. Приношу извинения за некоторую "многобуквеннность", но этот полтергейст в 2 словах не опишешь. P.S.2 Файл приложить не могу: исходный открывается нормально, но и то "весит" больше разрешенного на форуме, а уж заполненный даже в .xlsb "весит" более 1,5 Мб, но при этом он ни разу не секретный, так что если надо...
Нет таких игрушек в наших палестинах. Нет файл никак не мог попасть в лапы МАКа, это гарантированно. Да и старый файл я же делал (с которого информация копировалась и копировалась она именно так как я написал). Да это не столь важно, объясните как может быть сообщение об ошибках на листе6 ,если такого листа нет изначально?
Наверное Вы на правильном пути. Действительно, если открыть winrar-ом, то в папке worksheets из папки Копия 111.xlsb\xl есть sheet6.bin. И что дальше надо сделать, удалить? Чем его кстати открыть можно? Пробовал блокнотом или Excel, только крякозябры отображаются
Откроете - и что? Если нет навыков работы с внутренностями, какой толк от то, что Вы там увиите? Да и смысл? Ведь этот лист УЖЕ создан, причина в другом месте. Можете попробовать удалять, но не повторится ли снова?
Цитата
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
...
во всяком случае, сделав несколько проверок я вижу, что если эти 2 строки закомментированны и прошла активация листа, то ошибки нет, стоит раскомментировать - ошибка (при последующем ОТКРЫТИИ файла, а не по ходу выполнения кода (тут все нормально)) проявляется. НО почему? Что в коде не так, как такое может быть, что код выполняется нормально, а при последующем открытии файла он вызывает ошибку, подскажите, пожалуйста, кто знает