Выделение и отмена выделения определенных диапазонов при щелчке окна - PullRequest
1 голос
/ 02 февраля 2009

Я начинаю в Visual Basic. То, что я пытаюсь сделать, это то, что при каждом щелчке по блоку выделяется определенный диапазон. Затем, если после этого щелкнуть другое поле, предыдущий диапазон будет не выделен, а другой диапазон будет выделен. Вот мой код, но сейчас он не работает.

Dim FSelect As Boolean
Dim myRange As Range

Sub Rectangle18_Click()

   If FSelect Then
        UnhighlightBox (myRange) <---error - runtime error "424" object required
   End If

   Range("C9:D9").Select
   HighlightBox

   FSelect = True

   Set myRange = Range("C9:D9")
   End Sub

Sub Rectangle19_Click()

   If FSelect Then
        UnhighlightBox (myRange)
   End If

   Range("C11:D11").Select
   HighlightBox

   FSelect = True

   Set myRange = Range("C11:D11")

End Sub    

Sub HighlightBox()
   Selection.Interior.ColorIndex = 36
End Sub

Sub UnhighlightBox(cellRng As Range)
   cellRng.Interior.ColorIndex = 2
End Sub

Ответы [ 3 ]

1 голос
/ 03 февраля 2009

Неправильно ставить скобки вокруг аргумента при вызове процедуры UnhighlightBox.

Две возможные правильные формы:

UnhighlightBox myRange

Call UnhighlightBox(myRange)

Я считаю, что первая форма (без ключевого слова Call) предпочтительнее

Для справки Excel 2003:

Вы не обязаны использовать Звонок ключевое слово при вызове процедуры. Однако, если вы используете ключевое слово Call вызвать процедуру, которая требует аргументы, список аргументов должен быть в скобках. Если вы опустите ключевое слово Call, вы также должны опустить круглые скобки вокруг списка аргументов.

Обратите внимание, что это не относится к функции, которая возвращает значение. Функция должна вызываться как часть присваивания (например, a = f(x)), а аргументы должны быть заключены в скобки

Использование логического значения FSelect (которое инициализируется как false) должно предотвратить проблему с вызовом UnhighlightBox до установки myRange.

1 голос
/ 02 февраля 2009

Когда я бросаю этот код в Excel, он жалуется на Select. Я не думаю, что вы можете использовать Select в качестве переменной ...

РЕДАКТИРОВАТЬ: Select является зарезервированным ключевым словом в VB / A, он начинает блок Select Case.

0 голосов
/ 04 февраля 2009

При использовании подпрограммы UnhighlightBox вам нужно либо поставить оператор Call перед рукой, либо удалить скобки.

Например:

Call UnhighlightBox (myRange)

или

UnhighlightBox myRange

Для получения дополнительной информации о том, почему использовать Call и т. Д., Смотрите одно из следующих:

, что-ли-The-колл-ключевое слово-Do-в-VB6

* MSDN 1016 *

...