Страницы: 1
RSS
onAction - передача параметра в процедуру, xml Ribbon onAction
 
Добрый день. Подскажите как прописать в onAction параметр для передачи в процедуру

Код
 <ribbon>
    <tabs>
      <tab id="testTub" label="test tub" >
        <group id="tstGroup" label="test group" >
          <button id="usedRange" visible="true" size="large" 
                  label="test func" keytip="C" 
                  screentip="push me" 
                  onAction="customUI.xlsm!Module1.foo" image="usedRange"/>
        </group>
      </tab>
    </tabs>
  </ribbon>

Код
Public Sub foo(control As IRibbonControl, Optional j As Integer)
    MsgBox "hi there " & j
End Sub
 
Вы хотите задавать значения переменной j через интерфейс Надстройки?
 
Да. У меня перед вызовом конкретного Sub идет поиск листов, над которыми необходимо выполнять различные действия, поэтому я бы хотел из рибона вызывать одну и туже процедуру и затем перенаправлять на другие процедуры...
Код
Sub SetFilterAdr(j As Intager)
    Dim TxtForFind As String
    Dim RngForFind As Range
    Dim CurAdr As String, i As Integer
    
    Dim criteria As String
    Dim columNum As Integer
    
    criteria = ActiveCell.Text
    columNum = ActiveCell.Column
    'MsgBox columNum & " " & vbNewLine & " " & criteria
    
    TxtForFind = ""
    
       For i = 1 To Sheets.Count
      
           With Sheets(i).Range("a2:a15")

               Set RngForFind = .Find(TxtForFind, LookIn:=xlValues, LookAt:=xlWhole)
               If Not RngForFind Is Nothing Then
                
                  CurAdr = RngForFind.Address
                   Row = Split(CurAdr, "$")(2)
                   Debug.Print CurAdr & " " & Sheets(i).Name & "Row = " & Row + 1
                   
                   ///////////////////////////////
                    Тут перенаправление 
                    if(j == 1){

                    }else if (j == 2) {

                    }

                  ' Sheets(Sheets(i).Name).Range("a" & Row + 2 & ":" & "ah" & Row + 2).AutoFilter Field:=columNum, Criteria1:=criteria

               End If
           End With
       Next
End Sub
Изменено: az - 11.07.2017 12:32:39
 
Доброе время суток.
Цитата
az написал:
onAction параметр для передачи в процедуру
А каким образом Ribbon догадается что нужно помещать в этот параметр, как бы о дополнительных параметрах он ничего не знает? Проще в xml для control прописать tag некоторое значение идентификатор, нужное при обработке события, либо ориентироваться на Id control - и тот и другой через интерфейс IRibbonControl.
 
Цитата
Андрей VG написал:
А каким образом Ribbon догадается что нужно помещать в этот параметр
Мне просто нужно правильно прописать вот эту строку
Код
onAction="customUI.xlsm!Module1.foo(25)"

Параметр 25 передается и отображается в alert. Но идет тройной вызов + ошибка 400 (см. attach)

Чтобы не шел многократный вызов процедуры из рибона, как я понял, нужно в VBA процедуре дописывать аргумент
Код
control As IRibbonControl
Но скомбинировать эти два решения я не смог. У меня получается либо передавать аргумент (тогда тройной вызов + ошибка 400) либо обычный вызов, но без передачи аргумента...
Изменено: az - 11.07.2017 14:38:39
 
Цитата
az написал:
onAction="customUI.xlsm!Module1.foo(25)"
Отсутствует в определении, увы. Используете tag
Код
          <button id="usedRange" visible="true" size="large"
                  label="test func" keytip="C"
                  screentip="push me"
                  tag="25"
                  onAction="customUI.xlsm!Module1.foo" image="usedRange"/>

Код
Public Sub foo(control As IRibbonControl)
    MsgBox "hi there " & control.tag
End Sub

Успехов
 
Андрей VG, именно это я и хотел узнать. Передача параметра через тэг.  Спасибо.  :)  
Страницы: 1
Читают тему
Наверх