Поделиться через


Using ActiveX Controls on Sheets

В этом разделе рассматриваются конкретные сведения об использовании элементов ActiveX на листах и листах диаграмм. Общие сведения о добавлении элементов управления и работе с ними см. в разделах Использование элементов ActiveX в документе и Создание настраиваемого диалогового окна.

При работе с элементами управления на листах учитывайте следующие моменты:

  • Помимо стандартных свойств, доступных для элементов ActiveX, с элементами ActiveX в Microsoft Excel можно использовать следующие свойства: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell и ZOrder.

    Эти свойства можно задать и вернуть с помощью имени элемента activeX. В следующем примере окно книги прокручивается, поэтому CommandButton1 находится в левом верхнем углу.

      Set t = Sheet1.CommandButton1.TopLeftCell
      With ActiveWindow
          .ScrollRow = t.Row
          .ScrollColumn = t.Column
      End With
    
    
  • Некоторые методы и свойства Microsoft Excel Visual Basic отключаются при активации элемента ActiveX. Например, метод Sort нельзя использовать, когда элемент управления активен, поэтому следующий код завершается ошибкой в процедуре события нажатия кнопки (так как элемент управления по-прежнему активен после его щелчка пользователем).

      Private Sub CommandButton1.Click 
          Range("a1:a10").Sort Key1:=Range("a1") 
      End Sub 
    

    Эту проблему можно обойти, активировав другой элемент на листе перед использованием свойства или метода, который завершился ошибкой. Например, следующий код сортирует диапазон:

      Private Sub CommandButton1.Click 
          Range("a1").Activate 
          Range("a1:a10").Sort Key1:=Range("a1") 
          CommandButton1.Activate 
      End Sub
    
  • Элементы управления книгой Microsoft Excel, внедренные в документ в другом приложении, не будут работать, если пользователь дважды щелкнет книгу, чтобы изменить ее. Элементы управления будут работать, если пользователь щелкнет книгу правой кнопкой мыши и выберет команду Открыть в контекстном меню.

  • При сохранении книги Microsoft Excel в формате файла книги Microsoft Excel 5.0/95 сведения об элементе управления ActiveX теряются.

  • Ключевое слово Me в процедуре события для элемента ActiveX на листе ссылается на лист, а не на элемент управления .

Добавление элементов управления с помощью Visual Basic

В Microsoft Excel элементы activeX представлены объектами OLEObject в коллекции OLEObjects (все объекты OLEObject также находятся в коллекции Shapes ). Чтобы программно добавить элемент ActiveX на лист, используйте метод Add коллекции OLEObjects . В следующем примере на лист 1 добавляется кнопка команды.

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _ 
    Left:=10, Top:=10, Height:=20, Width:=100

Использование свойств элемента управления с Visual Basic

Чаще всего код Visual Basic будет ссылаться на элементы ActiveX по имени. В следующем примере изменяется заголовок элемента управления с именем CommandButton1.

Sheet1.CommandButton1.Caption = "Run"

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

Чтобы изменить имя элемента управления, используемое в коде Visual Basic, выберите элемент управления и задайте свойство (Name) в окно свойств.

Так как элементы ActiveX также представлены объектами OLEObject в коллекции OLEObjects , можно задать свойства элемента управления с помощью объектов в коллекции. В следующем примере задается левое положение элемента управления с именем CommandButton1.

Worksheets(1).OLEObjects("CommandButton1").Left = 10

Свойства элемента управления, которые не отображаются как свойства объекта OLEObject , можно задать, возвращая фактический объект управления с помощью свойства Object . В следующем примере задается заголовок для CommandButton1.

Worksheets(1).OLEObjects("CommandButton1"). _ 
    Object.Caption = "run me"

Так как все объекты OLE также являются членами коллекции Shapes , можно использовать коллекцию для задания свойств для нескольких элементов управления. В следующем примере левая граница всех элементов управления выравнивается на листе 1.

For Each s In Worksheets(1).Shapes 
    If s.Type = msoOLEControlObject Then s.Left = 10 
Next

Использование имен элементов управления с коллекциями shapes и OLEObjects

Элемент ActiveX на листе имеет два имени: имя фигуры, содержащей элемент управления, которое отображается в поле Имя при просмотре листа, и кодового имени элемента управления, которое отображается в ячейке справа от (Имя) в окно свойств. При первом добавлении элемента управления на лист имя фигуры и код совпадают. Однако при изменении имени фигуры или кодового имени другое не будет автоматически изменено на соответствие.

Имя кода элемента управления используется в именах его процедур событий. Однако при возврате элемента управления из коллекции Shapes или OLEObjects для листа необходимо использовать имя фигуры, а не код, чтобы ссылаться на элемент управления по имени. Например, предположим, что вы добавили флажок на лист и что имя фигуры по умолчанию и код по умолчанию — CheckBox1. Если затем изменить имя кода элемента управления, введя chkFinished рядом с (Name) в окно свойств, необходимо использовать chkFinished в именах процедур событий, но вам все равно придется использовать CheckBox1 для возврата элемента управления из коллекции Shapes или OLEObject, как показано в следующем примере.

Private Sub chkFinished_Click() 
    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1 
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.