Как назначить значения переменных для ячеек, чтобы избежать ошибки времени выполнения VBA 5? - PullRequest
0 голосов
/ 26 января 2019

Я бы хотел присвоить значение некоторого пользовательского ввода (генерируемого с помощью форм) определенной ячейке. То есть, если моя переменная rowLocation = 4, я бы хотел, чтобы ячейка C4 (то, что я называю statusRng) имела значение CaseStatusBox.Text.

Когда я запускаю то, что у меня есть, я получаю ошибку 5 времени выполнения: «неверный вызов процедуры или аргумент» в строке, закомментированной в приведенном ниже коде. Есть идеи, где я ошибся? Спасибо!

rowLocation = Application.WorksheetFunction.Match(client, rng, 0)

statusRng = ("C" & rowLocation)
StaffRng = ("D" & rowLocation)
DateRng = ("G" & rowLocation)


OutputSheet.Cells("statusRng") = CaseStatusBox.Text 'debugger points to error on this line
OutputSheet.Cells("StaffRng") = StaffEntryBox.Text
OutputSheet.Cells("DateRng") = Date

Ответы [ 2 ]

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

Я предполагаю, statusRng это строка. Тогда я пропустил бы скобки в строке и пропустил кавычки в строках ниже. Как это:

rowLocation = Application.WorksheetFunction.Match(client, rng, 0)

statusRng = "C" & rowLocation
StaffRng = "D" & rowLocation
DateRng = "G" & rowLocation


OutputSheet.Range(statusRng) = CaseStatusBox.Text 'debugger points to error on this line
OutputSheet.Range(StaffRng) = StaffEntryBox.Text
OutputSheet.Range(DateRng) = Date

Редактировать: теперь я вижу, что Матье опередил меня на пару минут ;-)

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

Worksheet.Cells возвращает объект Range и не принимает никаких параметров;передаваемый аргумент ("statusRng") в итоге будет передан свойству Range.[_Default], которое принимает 2 необязательных аргумента.При заданных аргументах Range.[_Default] передает их Range.Item(RowIndex, ColumnIndex), что принимает целочисленные значения / Long, а не строки.

Как @ Коминтерн предложил , передав аргументы Worksheet.Range, будет работать как положено - Worksheet.Range принимает [cell1], [cell2] аргументы Variant и предоставляет несколько удобных способов извлечь Range из Worksheet объекта - один из которых заключается в предоставлении имени для именованногоrange.

Следовательно, они должны работать нормально, при условии, что указанные имена существуют:

OutputSheet.Range("statusRng").Value = CaseStatusBox.Text
OutputSheet.Range("StaffRng").Value = StaffEntryBox.Text
OutputSheet.Range("DateRng").Value = Date

Если имена не существуют, ожидать ошибку времени выполнения 1004.

Похоже, вы хотите передать строковые переменные, содержащие адреса рабочих листов, а не именованные диапазоны.В этом случае отбросьте двойные кавычки ", поскольку эти строковые литералы-разделители в VBA;строка "statusRng" передается, а ваша переменная statusRng не читается.

Dim statusRng As String
statusRng = "C" & rowLocation

Dim StaffRng As String
StaffRng = "D" & rowLocation

Dim DateRng As String
DateRng = "G" & rowLocation

OutputSheet.Range(statusRng).Value = CaseStatusBox.Text
OutputSheet.Range(StaffRng).Value = StaffEntryBox.Text
OutputSheet.Range(DateRng).Value = Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...