Определяемая пользователем буква столбца в вызове Range - PullRequest
0 голосов
/ 26 апреля 2019

запрашивая у пользователя письмо, ссылающееся на столбец; затем используя ответ, чтобы получить диапазон этой ячейки в этом столбце в некоторой строке. Но «Диапазон» отказывается распознавать ввод букв.

Чего мне не хватает в следующих двух простых строках?

UserCol = Application.InputBox(" Please enter the column...", Type:=0)
Set Z = Range(UserCol & 5)

Ответы [ 4 ]

2 голосов
/ 26 апреля 2019

Попробуйте это:

UserCol = Application.InputBox(" Please enter the column...", Type:=2)
Set Z = Range((UserCol & 5))

Я установил Type на 2 , чтобы вернуть строку из ввода вашего пользователя ( смотрите ее подробнее )

Кроме того, я добавил скобку к Range, потому что (UserCol & 5) становится, например, A5, а вам нужно Range(A5).

2 голосов
/ 26 апреля 2019

Вам нужно использовать Type:=2.

Использование Type:=0 вернет ="<input string>", а не просто <input string>.

Итак, после:

Dim UserCol As String
UserCol = Application.InputBox(" Please enter the column...", Type:=2)

Вы можете сделать:

Set Z = Cells(5, UserCol)

OR

Set Z = Range(UserCol & "5")

Я бы также предложил использовать Option Explicit, а также полностью квалифицировать ссылки на диапазон. например вместо Set Z = Range(UserCol & "5") используйте Set Z = Thisworkbook.sheets("MySheetName").Range(UserCol & "5")

0 голосов
/ 26 апреля 2019

Это действительно простая ошибка, которую нужно исправить: Set Z = Range(UserCol & "5")

Почему? Потому что, когда вы используете неявное преобразование, набирая UserCol & 5, VBA включает пробел между UserCol и 5 (а также после 5).

Вот тест:

MsgBox "A" & 5 'Outputs "A 5 "
MsgBox "A" & "5" 'Outputs "A5"

(Как указывает Gravitate, Application.InputBox(" Please enter the column...", Type:=0) - это формула, поэтому ввод "A" даст вам "=""A"", а не "A", поскольку "=""A""5" также не является допустимой ссылкой на ячейку, используйте Type:=2 для текста или InputBox(" Please enter the column...") без Application. или фильтрации типов)

0 голосов
/ 26 апреля 2019

Этот способ проще:

Dim UserCol As String
UserCol = Application.InputBox(" Please enter the column...")
Set Z = Cells(5, UserCol)

Я не знаю, как вы объявили свой UserCol или даже если вы его объявили. Если вы этого не сделали, и чтобы избежать проблем, всегда используйте Option Explicit в верхней части вашего модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...