1

Где-то в Листе под названием Лист 2 у меня есть следующее:Щелкните для изображения

Он использует функцию TEXTJOIN для объединения значений в столбце A. Строка в B100 является переменной S (см. Код).

Я пытаюсь использовать это в качестве входных данных для метода в моем макросе. Ниже приведен фрагмент кода из модуля:

Dim ListofSheets, WorkingSheet As Worksheet 
Dim C0, C1 As Range   
Dim S As String
Dim WholeRange As Range

Set ListofSheets = Sheets("Sheet2")
...

Set C0 = WorkingSheet.Range(PanelColumn & StartingRow & ":" & PanelColumn & lRow)
Set C1 = WorkingSheet.Range(LoadCaseColumn & StartingRow & ":" & LoadCaseColumn & lRow)

S = ListofSheets.Cells(100, 2).Value

Set WholeRange = Union(S)
    WholeRange.Copy

End Sub

C0 и C1 рассчитываются в коде и являются следующими диапазонами:

C0= C7:C310
C1= D7:D310

При запуске приведенного выше кода в строке Set WholeRange = Union(S) ошибка с сообщением «Ошибка компиляции: несоответствие типов»

Я пытался Set WholeRange = Union(C0, C1) который работает успешно, но я не хочу использовать это, поскольку на самом деле есть больше переменных, которые можно выбрать.

У меня вопрос, почему строка может быть передана в качестве параметра, и как я могу исправить проблему?

NB: у меня более 2 диапазонов в коде, который здесь не показан. Сценарий решает, какие диапазоны использовать. Поскольку необходимо ввести более 2 диапазонов, я использую метод Union вместо метода Range

1 ответ1

0

Таким образом, S - это строка, и хотя она читается так, как будто она указывает Range, для Union() требуется объект Range, поэтому вы получаете ошибку несоответствия типов. Вы передаете неправильный тип.

Так что, пока значение S указывает правильный диапазон, попробуйте что-то вроде:

Dim UnionRange as Range 'declare at top
...
Set UnionRange= WorkingSheet.Range(S) 'insert this after S is assigned
...
Set WholeRange = Union(UnionRange) 'change the range assignment to this

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .