Hard Coding Range работает, но с использованием именованных диапазонов - Excel VBA - PullRequest
0 голосов
/ 22 марта 2019

У меня есть фрагмент кода, который я не могу понять, почему он не работает.Я получаю сообщение "Ошибка приложения или объекта".Я пытался жестко запрограммировать диапазон, и он работает, но я даже жестко закодировал «Именованный диапазон», и он все равно не удался.

Например: это не работает

If regexp.test(strInput) Then
    Set clloffset = rcell.Offset(0, 1)
    Call GetColLet(rcell)
      'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
      Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
      Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
      ActiveWorkbook.ActiveSheet.Range(FormulaCol).Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)

Но это работаети я не могу его получить!

If regexp.test(strInput) Then
    Set clloffset = rcell.Offset(0, 1)
    Call GetColLet(rcell)
      'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
      Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
      Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
      ActiveWorkbook.ActiveSheet.Range("L24:L39").Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)

Примечание: я пытался использовать оба параметра (FormulaCol) и ("FormulaCol"), я не уверен, когда следует использовать "" внутри именованного диапазона, чтобы быть честным,но ни одна из них не работаетТогда я попробовал жесткое кодирование ("L24:L39").и это сработало.Я признателен за любую помощь в устранении неполадок.

1 Ответ

1 голос
/ 23 марта 2019

Существует три основных метода доступа к диапазонам в Excel:

  1. Жестко закодированные значения
  2. Переменные
  3. Именованные диапазоны

Жестко закодированные значения

Я не буду тратить время на их объяснение, но вот несколько примеров:

ThisWorkbook.Sheets("Name").Range("A1:B2")
ActiveWorkbook.ActiveSheet.Range("C3:E50")
Sheet1.Cells(1,3)  'Range("C1")

Примечания

ThisWorkbook является ссылкой на рабочую книгу, в которой содержится код.Важное отличие от ActiveWorkbook, поскольку они не всегда являются одной и той же рабочей книгой (в основном, когда открыто более 2 рабочих книг).

Sheet1 - это кодовое имя листа.Кодовые названия листов могут использоваться только для листов, содержащихся в ThisWorkbook.Если вы ссылаетесь на лист из другой рабочей книги, вам придется использовать либо имя, либо индекс для доступа к нему.


Переменные

Это будет похоже на FormulaCol в вашеморигинальный кодПеременные либо объявляются в коде (Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")) на локальном или глобальном уровне области действия, либо передаются в подпрограммы как параметры (Function Sample(rangeVariable as Range) : End Function) .

Взаимодействие с переменной диапазона можно рассматривать как использование подстановки, например:

Set FormulaCol = Sheet1.Range("L24:L39")
FormulaCol.Formula = ""

вместо

Sheet1.Range("L24:L39").Formula = ""

Именованные диапазоны

Взаимодействие сименованный диапазон похож на взаимодействие с жестко закодированным диапазоном.Предполагая, что именованный диапазон «Test» ссылается на Range («B2: C3») на Sheet1, он будет взаимодействовать с помощью:

Sheet1.Range("Test")

Однако, прежде чем ссылаться на именованные диапазоны через VBA, они сначалабыть установленным в рабочей книге.Это можно сделать несколькими различными способами:

  1. Выберите все ячейки для именованного диапазона, затем в поле «Имя» (слева от строки формул) введите имя для этогоименованный диапазон и нажмите клавишу ввода (если вы забыли «ввести», имя не будет сохранено).

Naming range without manager

Откройте Диспетчер имен на вкладке Формулы и нажмите «Создать» (или «Редактировать», если редактируете существующий именованный диапазон). Примечание: при добавлении именованного диапазона с помощью менеджера вы можете выбрать область как рабочую книгу или любой из листов в рабочей книге.Это влияет на то, какие листы могут ссылаться на именованный диапазон.

Name Manager

, и откроется окно, где вы выбираете имя для именованногодиапазон и выберите диапазон, на который он ссылается.

Adding a named range

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