Как настроить таргетинг метки ActiveX для изменения заднего цвета и скрытия текста в метке - PullRequest
0 голосов
/ 16 апреля 2020

Я только что нашел этот код на веб-сайте, который работает с элементом управления текстовым полем ActiveX. Мне бы хотелось, чтобы он работал с элементом управления ActiveX метки, когда при отправке командного элемента управления в метке происходят две вещи: метка меняется с красного на белый и .caption = "". (моя цель - скрыть метку).

Код, который я пытаюсь использовать, работает с элементом управления textbox, но не с меткой, потому что я думаю, что это разные типы данных? (Я получаю ошибку несоответствия). Можете ли вы помочь - и спасибо вперед?

Вот что я пробовал, но получаю ошибку:

    Dim ils As Word.InlineShape
Dim olef As Word.OLEFormat
Dim tb As MSForms.Label
Set ils = ActiveDocument.InlineShapes(1)
Set olef = ils.OLEFormat
Set tb = olef.Object
tb = lbl_test
lbl_test.Caption = ""
lbl_test.BackColor = RGB(255, 255, 255)

1 Ответ

0 голосов
/ 16 апреля 2020

Вы получите ошибку несоответствия типов в строке «Set ils», если InlineShape, на который ссылается InlineShapes (1), равен , а не MSForms.Label. Так что, возможно, ваш код работает с неправильной формой. Если InlineShapes (1) является MSForms.Label, это должно работать:

Dim ils As Word.InlineShape
Dim olef As Word.OLEFormat
Dim tb As MSForms.Label
Set ils = ActiveDocument.InlineShapes(1)
Set olef = ils.OLEFormat
Set tb = olef.Object
tb.Caption = ""
tb.BackColor = RGB(255, 255, 255)

Эта строка

tb = lbl_test

может делать что-то несколько отличное от того, что вы считать. Помещение

lbl_test.Caption = ""

после того, как оно предполагает, что вы пытаетесь создать ссылку на объект MSForms.Label, но я бы предположил, что lbl_test является строковой переменной (мы можем не вижу из предоставленного вами фрагмента). Если это так, попытка установить

lbl_test.Caption

также приведет к ошибке.

Что на самом деле делает

tb = lbl_test

, так это присвоение значению lbl_test значения по умолчанию член "объекта ТБ. Для объекта MSForms.Label членом по умолчанию является .Caption (вы можете посмотреть его в средстве просмотра объектов редактора VB), так что на самом деле эта строка должна устанавливать заголовок метки. Но лучше не полагаться на элементы по умолчанию и указывать их как

tb.Caption = lbl_test

Существует несколько способов получить доступ к элементам управления ActiveX на поверхности документа. Он есть, но вы также можете получить доступ к элементу управления непосредственно из ThisDocument, если вам известно его имя, например, через ThisDocument.Label1. Тогда вам на самом деле не нужно знать тип элемента управления.

Но в противном случае вам придется обращаться к InlineShape или Shape, как вы делаете. Поскольку разные элементы управления ActiveX имеют разные элементы (например, метка имеет заголовок, а TextBox - нет), вам лучше проверить тип объекта перед работой с ним, возможно, вот так ...

    Dim ils As Word.InlineShape
    Set ils = ActiveDocument.InlineShapes(1)
    If Not (ils.OLEFormat Is Nothing) Then
      With ils.OLEFormat
        Select Case .ClassType
        Case "Forms.Label.1"
          ' You don't even need to assign to an object variable
          With .Object
            .Caption = ""
            .BackColor = RGB(255, 255, 255)
          End With
        Case "Forms.TextBox.1"
          ' do the appropriate thing
        Case "Forms.CheckBox.1"
          ' do the appropriate thing
        Case Else
          ' e.g. it might not be an ActiveX control
          ' perhaps do nothing
      End Select
    End With
  End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...