2015-04-07 3 views
0

Моя модель Excel позволяет пользователю рассчитать стоимость доставки для разных категорий товаров в разных странах. Выбор осуществляется с помощью опционных кнопок на пользовательской форме: Кадр 1: США, Великобритания или Германия Рамка 2: Книги, Мода или БакалеяКорректировка формулы автоматически на основе выбора OptionButton

Допустим, пользователь выбрал США как страны и книги в качестве категории продукта. Теперь я использую формулы, такие как pay_USA/365, тогда как «зарплата_USA» - это предопределенное имя диапазона. Я также копирую и вставляю определенные значения из листа предположений: Рабочие листы («Книги допущений»). Диапазон («E34: J34»). Копия

Если пользователь выбирает Великобританию, формула изменяется на зарплату_UK/365. Если Германия выбрана, формула изменяется на зарплату_Germany/365.

Аналогичным образом, если выбранная категория товара Fashion, то должны быть рабочие листы («Предположения моды»). Диапазон («E34: J34»). Копия и т. Д.

Как я могу сделать эти команды более гибкими, то есть реагировать на выбор пользователя?

Я хочу избежать писать саб для каждого в каждой комбинации (USA-Books, США-моды, США-Бакалея, UK-Books, UK-мода и т.д.)


Я думал об определении variabel следующим образом:

Public Country As String 

Private Sub optUSA_Click() 

If optUSA.Value = True Then 
Country = "USA" 

И затем, используя эту переменную в соответствующей формуле:

Sub CalculateCosts() 

"salary_" & Country/365 

Однако этот подход не работает.

ответ

0

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

'Procedure to display which button was pressed. 
    Sub WhichButton() 

    ' Assign the calling object to a variable. 
    ButtonName = Application.Caller 

    ' Display the name of the button that was clicked. 
    Select Case ButtonName 

     ' NOTE: When you type the name of the button, note that 
     ' Visual Basic is case and space sensitive when comparing             
     ' strings. For example, "Button 6" and "button6" are not the 
     ' same. 
     Case "Button 6" 
     MsgBox Application.Caller & " was Clicked" 

     Case "Button 7" 
     MsgBox Application.Caller & " was clicked." 

     Case "Button 8" 
     MsgBox Application.Caller & " was clicked." 

    End Select 

    End Sub 

Вы найдете код с полной информацией здесь: http://support.microsoft.com/en-us/kb/143345

Смежные вопросы