Передача диапазона в качестве необязательного параметра подпрограммы

Когда при вызове подпрограммы передается диапазон, диапазон теряется в процессе.

У меня есть два модуля:

  • Эл. адрес
  • Финал

В модуле электронной почты у меня есть этот подраздел:

Sub Send_Email(Type, MSG, operation, Optional RangeB As Range, Optional txtpath)

Параметр «Тип» имеет значение 1 или 2.

Если я поставлю 1, подпрограмма отправит электронное письмо с файлом .txt в качестве вложения. И если я поставлю 2, подпрограмма поместит диапазон в тело электронной почты. Вот почему и RangeB, и txtpath являются необязательными параметрами.

Приставка работает нормально.

Но когда я помещаю диапазон в качестве параметра, RangeB не может быть выбран.

«RangeB.Select» -> ОШИБКА (не удалось выбрать метод класса диапазона)

Я пробовал вызывать сабвуфер двумя разными способами:

Call Send_Email(2, var_MSG, var_Op, Range("RangeBalko"))

Call Send_Email(2, var_MSG, var_Op, Templates.Range("RangeBalko"))

Шаблоны -> ThisWorkbook.Sheets("Шаблоны")

Кто-то знает, как решить эту проблему?

С уважением!!

для выбора диапазона лист должен быть активен. Возможно, вам придется сначала активировать его, но в 99% случаев .Select не требуется, и простое использование правильных ссылок устраняет необходимость. См.: stackoverflow.com/questions/10714251/…

Scott Craner 09.12.2022 00:15

Спасибо, чувак, я проверю эту ссылку.

Matheus Assumpção Solinho 09.12.2022 15:34
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это помогает? Диапазон с одной ячейкой получает «MsgBox», а диапазоны с несколькими ячейками выбираются.

Sub test()
  Cells(1, 1) = "Hello"
  ActiveWorkbook.Names.Add "rng1", "=$C$3:$D$4"
  Call SendEmail(Range("a1"), Range("a1:b2"), Range("rng1"))
End Sub

Sub SendEmail(Optional rangeA As Range, Optional rangeB As Range, Optional rangeC As Range)
  MsgBox rangeA.Value
  rangeB.Select ' this can be done without "selecting": rangeB.delete
  Selection.Delete
  rangeC.Select ' if you must select
End Sub

Я переключил Range("RangeBalko") на Range("A1:b15"). И работал.

Matheus Assumpção Solinho 09.12.2022 15:32

Другие вопросы по теме