Все эти вызовы участников с завязанными глазами с поздним связыванием легко сбивают с толку: вы не получаете 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