Calc сваливается при копировании листа с примечанием

Автор sergeyvg, 30 сентября 2014, 11:22

0 Пользователи и 1 гость просматривают эту тему.

sergeyvg

Если открыть файл, на листе которого есть примечание, и запустить процедуру, то Calc валится. Для возникновения ошибки важно, чтобы файл именно загружался с диска, если в новом файле на листе добавить примечание, вставить процедуру и выполнить, то сваливания не происходит. Приложил файл, чтобы не проделывать вышеизложенное.
Sub Test1
Dim oSheets As Object, I As Long
  oSheets = ThisComponent.getSheets
  For I = 1 To 100
    oSheets.copyByName("List1", "List99", 0)
    oSheets.removeByName("List99")
  Next I
End Sub 'Test1

rami


sergeyvg

Windows 7 Профессиональная Service Pack 1
Libre Office Версия: 4.3.1.2
Apache OpenOffice 4.1.1
Запускаю Office, открываю файл, запускаю процедуру, где-то на 35 цикле сваливается.
Был момент, но сейчас не могу воспроизвести, что примечание на листе копии ссылалось на лист оригинала.

JohnSUN

Только что попробовал Windows 7 Максимальная Service Pack 1 Libre Office Версия: 4.3.1.2
Отмигал-отработал полностью и остался живым.

Apache OpenOffice 4.1.1 действительно упал. Но видоизмененный макрос
Sub Test1
Dim oSheets As Object, I As Long
  oSheets = ThisComponent.getSheets
  For I = 1 To 100
    oSheets.copyByName("List1", "List"+Format(i,"00"), 0)
  Next I
  print "O!"
  For I = 1 To 100
    oSheets.removeByName("List"+Format(i,"00"))
  Next I
  print "A-a-a!.."
End Sub 'Test1
отработал нормально...
Может, не в примечании дело, а в слишком быстром создании-удалении листа?.. Wait между .copyByName() и .removeByName() ситуацию не улучшат?

(Между нами: если бы меня попытались заставить сто раз создать и тут же удалить - наверное, тоже психанул бы и дверью хлопнул)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 30 сентября 2014, 12:18Может, не в примечании дело, а в слишком быстром создании-удалении листа?
Я думаю дело в примечании: если открыть документ "как есть", то вылетает на 35 цикле(и вручную и автоматически), но если поставить меньше циклов чем 35, то не вылетает. Если в примечании написать что-нибудь, то потом не вылетает. LibreOffice4.3.2 и Apache OpenOffice4.1.1 ведут себя одинаково.
Цитата: JohnSUN от 30 сентября 2014, 12:18(Между нами: если бы меня попытались заставить сто раз создать и тут же удалить - наверное, тоже психанул бы и дверью хлопнул)
Тихо!!! Если макросы услышат, то Офис останется без дверей :o

sergeyvg

Вот пример, что ссылка на примечание указывает на уже несуществующий лист (List100). Главное в тестировании, это соблюсти порядок: сохранить файл, переоткрыть Calc, открыть файл и не внося изменений запустить макрос.
Sub Test1
Dim oSheets As Object, I As Long
  oSheets = ThisComponent.getSheets
  For I = 1 To 100
    oSheets.copyByName("List1", "List"+Format(i,"00"), 0)
  Next I
  print "O!"
  For I = 1 To 100
oSheet = oSheets.getByName("List"+Format(i,"00"))
msgbox "I=" & I & "Name=" & oSheet.GetAnnotations.getByIndex(0).Parent.AbsoluteName 
    oSheets.removeByName("List"+Format(i,"00"))
  Next I
  print "A-a-a!.."
End Sub 'Test1

sergeyvg

Описался "на уже несуществующий лист (List100)", List100 существует, но примечания должны относиться к своим листам, а они относятся все к List100. Это на LibreOffice, на OpenOffice нормальные ссылки показывает, но при закрытии его окна все равно сваливается.