[Решено] Draw и удаление страницы с кириллическим именем

Автор spyAndrey, 27 мая 2016, 21:52

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

spyAndrey

Задача: на первой странице я разместил кнопки и т.п.
На второй буду рисовать из макроса. Периодически я эту страницу должен очищать.
Сейчас иду по пути удаляем, затем добавляем страницу.
Есть такой код:
Sub  delPageByName ' удаление страницы
Dim oDrawPages As Variant

sPName = "Page 2"
   oDrawPages = ThisComponent.getDrawPages()
   If oDrawPages.hasByName(sPName) Then oDrawPages.remove(oDrawPages.getByName(sPName))

End Sub
Но вот не задача: если я переименую имя страницы "Page 2", то код работает.
А создаётся страница с именем "Страница 2" (офис её так создаёт) её я не могу удалить, не видит макрос этого имени.
Если ставлю такую строчку oDrawPages.remove(oDrawPages.getByIndex(1))
то сначала страницу удаляет но потом на несовместимость типов ругается.

Или этот код привести в чувство или какой либо метод просто очистки (типа ClearPage), без удаления
Или как страницу переименовать что ли, не могу понять как к её имени подобраться из макроса?

spyAndrey

#1
странно  :-\ но вот такой код, после ковыряний не ругается ни на что, и удаляет
sub delpage ' удаление страницы
Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
   oDrawPages.remove(oDrawPages.getByIndex(1))
end sub

rami

Цитата: spyAndrey от 27 мая 2016, 19:52Но вот не задача: если я переименую имя страницы "Page 2", то код работает.
А создаётся страница с именем "Страница 2" (офис её так создаёт) её я не могу удалить, не видит макрос этого имени.
Настоящее имя страницы Page N, где N — число, а то что вы видите в боковом меню — это всего лишь перевод.

JohnSUN

#3

Sub ClearPage(Optional numPage As Long)
Dim oDrawPages As Variant
Dim oDrawPage As Variant
Dim nCount As Long
Dim oShape As Variant
Dim i As Long
Dim j As Long
If IsMissing(numPage) Then numPage = 1
oDrawPages = ThisComponent.getDrawPages()
For i = oDrawPages.getCount()-1 To 0 Step -1
If Not IsMissing(numPage) And (numPage<>i) Then
oDrawPage = oDrawPages.getByIndex(i)
For j = oDrawPage.getCount()-1 To 0 Step -1
oShape = oDrawPage.getByIndex(j)
oDrawPage.remove(oShape)
Next j
EndIf
Next i
End Sub

Sub tstClearPage()
ClearPage(1)   ' Не стирать страницу Page 2
ClearPage()    ' Стереть всё
End Sub
Если человеческим языком, то:
Получить все страницы текущего документа
В цикле перебрать их все
Если процедура запущена с параметром и номер обрабатываемой страницы не равен этому параметру, в цикле перебрать все элементы на текущей странице и дать команду этой самой текущей странице "Удали элемент с таким-то номером"

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

spyAndrey

Спасибо, но вот какой код зделал и работает:
sub delpage ' удаление страницы

Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
    oDrawPages.remove(oDrawPages.getByIndex(1))

end sub

sub addpage ' добавление страницы

Dim oDrawPages As Variant
   oDrawPages = ThisComponent.getDrawPages()
oDrawPages.insertNewByIndex(1)

end sub
поскольку на первой странице у меня формы, добавлять удалять приходится только вторую

spyAndrey