2011-01-03 2 views
1

Я изучаю VBA, используя комбинацию VBA для чайников и вышеупомянутую книгу. Последний, представляет собой простой вызов (вызов 2, глава 2), о котором я хотел бы попросить некоторых о некоторых отзывах.Задача: MS Excel Программирование VBA для абсолютного новичка

Задача заключается в следующем:

Поместите элемент управления Кнопка Команда на листе и написать программу в Щелк) процедуру события (который увеличивает переменную на 5 с каждым щелчком мыши. Вывести значение этой переменной в поле сообщения.

Я соединил следующий фрагмент кода в ответ:

Sub CommandButton1_Click() 
Dim AddClick As Integer 

AddClick = Range("A1").Value 
AddClick = AddClick + 5 
Range("A1").Value = AddClick 

MsgBox AddClick 

End Sub 

Хотя код работает, я уверен, что есть способ, чтобы исключить использование «Range („A1“) .Value ', чтобы включить переменную AddClick. Как мне это сделать?

* Обновление: благодаря предложению Коди Грея (http://articles.techrepublic.com.com/5100-10878_11-5854605.html), я пересмотрел код на следующий, который теперь работает просто отлично (отредактировано для дальнейшего упрощения): *

Sub CommandButton1_Click() 
Static AddClick As Integer 

AddClick = AddClick + 5 

MsgBox AddClick 

End Sub 

Simples. Еще раз спасибо Коди.

+0

Вы столкнулись с разделом или разделом о масштабах и времени жизни переменных? Если это так, я подозреваю, что это упражнение. – Fionnuala

+0

Полностью не имеет значения для вашего вопроса: вам не нужна скобка вокруг параметра «AddClick» в вызове 'MsgBox'. Если вы хотите использовать скобки, вы можете вместо этого использовать синтаксис 'Call':' Call MsgBox (AddClick) '. См. Запись в блоге Эрика Липперта по этому вопросу (http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx) для всех деталей gory. –

+0

Отредактировано, отмечено для дальнейшего использования и очень благодарен. Благодарю. – Kurt

ответ

4

Оба предыдущих образца ошибочны, я думаю. Правильная версия приведена ниже:

Sub CommandButton1_Click() 
    Static AddClick As Integer 
    AddClick = AddClick + 5 
    MsgBox AddClick 
End Sub 
+0

Просто примечание: Static позволяет избежать сброса переменной в конце Sub. Здесь нет необходимости указывать начальное значение, так как целое число ВСЕГДА инициализируется до 0. –

1

Определите переменную на уровне модуля.
Выполнение этого увеличит область действия переменной от процедуры к модулю.

Замените существующий код на этот.

Option Explicit 
Dim AddClick As Integer 

Sub CommandButton1_Click() 
    AddClick = 0 
    AddClick = AddClick + 5 

    MsgBox (AddClick) 
End Sub 

Примечание: Определение переменной на уровне процедуры ограничит ее срок службы.
Т.е. переменная не будет доступна за пределами процедуры.

+0

Хотя это совершенно правильно и, вероятно, дает вам лучшее представление о том, что происходит на самом деле за кулисами, у меня есть подозрение, что любая книга/учебник, которые читает читатель, ввел переменные Static и ожидает, что вы попытаетесь использовать их в этот пример. Ниже приведен пример их использования в VB 6 (который должен быть очень простым для применения к VBA): http://articles.techrepublic.com.com/5100-10878_11-5854605.html –

+0

@ Коди Серый - большое спасибо много. Я знал, что было что-то простое, что я бы забыл. Я опубликую исправленный фрагмент кода в интересах закрытия. Еще раз спасибо. – Kurt

+0

Не более вероятно, что переменная область будет преподаваться до статики? – Jay

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