[Решено] Удалить проверку данных макросом

Автор Sirius34, 6 сентября 2024, 09:38

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

Sirius34

Всем доброго времени суток!

Подскажите, пжлста, как макросом удалить / отключить проверку данных у ячейки (группы) ячеек (привязан выпадающий список)?
Как установить - я знаю.
oValidation.Type=com.sun.star.sheet.ValidationType.LIST
и т.д.
А вот сбросить аналогичным образом у меня не получилось...
Строка
oTstRng.Validation.Type = com.sun.star.sheet.ValidationType.ANYошибку не вызывает.
.getFormula1() и .getOperator() выдают нули.
Но выпадающий список никуда не пропадает :(

Я что-то делаю не так?

mikekaganski

Не проверял, предполагаю: я бы попробовал

oTstRng.Validation = Nothing
С уважением,
Михаил Каганский

Sirius34

увы, не прокатило...

mikekaganski

С уважением,
Михаил Каганский

Sirius34

Цитата: mikekaganski от  6 сентября 2024, 11:16См. After the data validation settings have been changed the validation has to be reinserted into the property set
Получается, что сначала считываем, потом меняем нужное, после чего обратно записываем...
Не совсем логично, на мой взгляд, но работает.

Спасибо большое!

sokol92

Цитата: Sirius34 от  6 сентября 2024, 11:33Получается, что сначала считываем, потом меняем нужное, после чего обратно записываем...
Такую последовательность действий мы всегда применяем для свойств, возвращающих структуры UNO.
Вот цитата из Книги Питоньяка:

ЦитироватьMany of the properties in Table 129 are structures; they require special care if you want to modify them, because a structure is copied by value rather than by reference. For example, the ParaLineSpacing property is a structure. Although the code in Listing 341 looks correct, it fails; this usage is a very common error committed by Basic programmers.
Listing 341. This code fails because ParaLineSpacing is a structure.
oPar.ParaLineSpacing.Mode = com.sun.star.style.LineSpacing.LEADING
The code in Listing 341 fails because the code "oPar.ParaLineSpacing" made a copy of the structure.

Для случаев, когда свойство возвращает UNO объект, не являющийся структурой, мне не известно правило, позволяющее определить, возвращается ли копия (клон) объекта, как в нашем случае (Validation), или ссылка на исходный объект, который мы можем модифицировать непосредственно.
Владимир.

mikekaganski

Цитата: sokol92 от  6 сентября 2024, 14:24мне не известно правило, позволяющее определить, возвращается ли копия (клон) объекта, как в нашем случае (Validation), или ссылка на исходный объект, который мы можем модифицировать непосредственно

Правило:
1. См. документацию
2. Если в документации баг:
2.1. Исправь документацию.
2.2. См. п.1.

:)
С уважением,
Михаил Каганский

sokol92

#7
Проверить документацию можно попробовать так (на примере свойств ячейки):

Option Explicit
' Поиск свойств, возвращающих копии объектов (кроме структур).
Sub Test
  Dim arr(9999), ind As Long, oCell As Object, prop, propVal
  oCell=ThisComponent.CurrentSelection
  
  ind=-1 
  For Each prop In oCell.PropertySetInfo.Properties
     propVal=oCell.getPropertyValue(prop.Name)
     If IsObject(propVal) Then
       If Not IsUnoStruct(propVal) Then
         If Not EqualUnoObjects(propVal, oCell.getPropertyValue(prop.Name)) And _
            (prop.attributes And com.sun.star.beans.PropertyAttribute.READONLY)=0 Then
           ind=ind+1
           arr(ind)=prop.Name
         End If
       End If
     End If     
  Next prop
 
  If ind>=0 Then
    ReDim Preserve arr(ind)
    MsgBox Join(arr, Chr(10))
  End If 
End Sub

В списке выданных свойств я пометил:
  • (-) свойства нет в документации
  • (+) в описании свойства отмечено, что его следует корректировать через промежуточный объект
  • (!) в описании свойства не отмечено, что его следует корректировать через промежуточный объект

  • (-) CellBackgroundComplexColor
  • (-) CharComplexColor
  • (+) ConditionalFormat
  • (+) ConditionalFormatLocal
  • (-) ConditionalFormatXML
  •     NumberingRules
  • (!) UserDefinedAttributes
  • (+) Validation
  • (+) ValidationLocal
  • (-) ValidationXML

Владимир.