Проверьте, содержит ли метка ActiveX часть строки - PullRequest
0 голосов
/ 04 декабря 2018

Я использую этот код, чтобы скрыть метку, если она содержит только знак% и ничего больше.

Это та часть кода, в которой он теперь ошибается при запуске.Ошибка: «OLEFormat.Object: Неверный запрос. Команда не может быть применена к диапазону фигур с несколькими фигурами»

Какой должен быть правильный код?

If InStr(1, myRange.OLEFormat.Object.Caption, "%", vbTextCompare) > 0 Then

Sub c_Three_RemovePercent()

For slideNumber = 1 To 11

Set mydocument = ActivePresentation.Slides(slideNumber)
mydocument.Select

Dim myArray() As Variant
Dim myRange As Object
myArray = Array("Lbl_V1", "Lbl_V2", "Lbl_V3", "Lbl_V4", "Lbl_V5")
Set myRange = ActivePresentation.Slides(1).Shapes.Range(myArray)



With mydocument.Shapes.Range(myArray)


 If InStr(1, myRange.OLEFormat.Object.Caption, "%", vbTextCompare) > 0 Then
    mydocument.Shapes(myRange).Visible = False
       Else: mydocument.Shapes(myRange).Visible = True
   End If


  End With


    Next slideNumber
End Sub

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Все эти вызовы участников с завязанными глазами с поздним связыванием легко сбивают с толку: вы не получаете IntelliSense для помощи в навигации по доступным участникам.

Вы ищете OLEObjectтак что объяви одно;назначьте его:

Dim oleLabel As Excel.OLEObject
Set oleLabel = ActivePresentation.Slides(1).Shapes("SomeShapeName").OLEFormat.Object

Теперь вам нужен элемент управления, который находится в этом свойстве OLEObject Object, и вы хотите привести этот элемент управления к его интерфейсу MSForms.Label:

Dim labelControl As MSForms.Label
Set labelControl = oleLabel.Object

Теперь у вас есть ранний MSForms.Label интерфейс для запроса, и IntelliSense поможет вам полностью:

If Contains(labelControl.Caption, "%") Then
    '...
Else
    '...
End If

Где Contains может выглядеть примерно так:

Public Function Contains(ByVal source As String, ByVal substring As String) As Boolean
    Contains = InStr(1, source, substring, vbTextCompare) > 0
End Function

У вас есть массив имен элементов управления метками, которые вы хотите перебрать - просто переберите его:

Dim labelNames As Variant
labelNames = Array("label1", "label2", "label3", ...)

Dim i As Long
For i = LBound(labelNames) To UBound(labelNames)
    Set oleLabel = currentSlide.Shapes(labelNames(i)).OLEObject
    oleLabel.Visible = Not Contains(labelControl.Caption, "%")
Next

Обратите внимание, как это:

If BooleanExpression Then
    Thing = True
Else
    Thing = False
End If

Может быть переписан как:

Thing = BooleanExpression
0 голосов
/ 04 декабря 2018

Для проверки, содержит ли строка функцию vba, INSTR обычно лучше.В основном в приведенном ниже примере ... Начиная с первой позиции, проверьте этот текст, ищите "%", без учета регистра.

  If InStr(1, myRange.OLEFormat.Object.Caption, "%", vbTextCompare) > 0 Then
       mydocument.Shapes(myRange).Visible = False
       Else: mydocument.Shapes(myRange).Visible = True
   End If
...