VBA .range («Может ли формула идти сюда?»)

Моя конечная цель состоит в том, чтобы пользователи выбирали диапазон, который они хотели бы дублировать, из раскрывающегося списка, а затем, нажав кнопку «добавить», он будет вставляться на лист.

Мои диапазоны называются в стиле WorkSheet_RangeName, поэтому, например, раздел «Нефтяная печь» будет иметь названный диапазон «DataInput_OilFurnace». Таким образом, все мои диапазоны начнутся с «DataInput_», и пробелы должны быть удалены.

Sub AddExtraSection() Dim copySheet As Worksheet Dim pasteSheet As Worksheet Dim addSection As Range Set copySheet = Worksheets("Data Input") Set pasteSheet = Worksheets("Add Extra Section") Set addSection = Worksheets("Add Extra Section").Range("C3").Formula = _ "=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" copySheet.range(addSection).Copy pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial End Sub 

Если я не могу использовать формулу, могу ли я иметь название диапазона как определенную ячейку (например, у меня есть формула под моим выпадающим списком, которая заполняется именем диапазона)?

 Set addSection = Worksheets("Add Extra Section").ActiveCell.Offset(1, 0).Formula = "=INDIRECT($C$4)" 

Я очень новичок в VBA, поэтому, если все это похоже на мощные полупустыни … это потому, что это так! Спасибо за любую помощь!

РЕДАКТИРОВАТЬ – РЕШЕНИЕ

aka Диапазон не может иметь формулу внутри него, и мне нужно было исправить свой набор addSection

 Sub AddExtraSection() Dim copySheet As Worksheet Dim pasteSheet As Worksheet Dim addSection As range Set copySheet = Worksheets("Data Input") Set pasteSheet = Worksheets("Add Extra Section") Set addSection = copySheet.range("C3") addSection.Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!C3,"" "","""")" copySheet.range(addSection).Copy pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial End Sub 

Вы получаете сообщение об ошибке? Я бы подумал, что ваша pasteSheet.Cells(... может pasteSheet.Cells(... ошибку). Посмотрите, как вы добавили имя листа раньше .Cells() ? Вы всегда должны делать это с помощью Rows() и Columns() , так что строка будет : pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial .

Кроме того, вы не можете выполнить mySheet.Range([formula]) . Это нужно разбить. Вместо этого вы захотите сделать

 Set addSection = Worksheets("Add Extra Section").Range("C3") addSection.Formula = "=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" 

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

Range([destination range]).Value = Range([range to copy]).Value

Итак, попробуйте следующее:

 Sub AddExtraSection() Dim copySheet As Worksheet Dim pasteSheet As Worksheet Dim addSection As Range Set copySheet = Worksheets("Data Input") Set pasteSheet = Worksheets("Add Extra Section") Set addSection = pasteSheet.Range("C3") addSection.Formula = "=""DataInput_""&SUBSTITUTE($C$3, "" "", """")" pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = addSection.Value End Sub 

Изменить. В комментариях ниже мы можем затянуть код и сделать его более понятным.

 Sub AddExtraSection() Dim pasteSheet As Worksheet Set pasteSheet = Worksheets("Add Extra Section") 'Next line will put "DataInput_[RANGE NAME]" in cell C3 of "Data Input" worksheet Worksheets("Data Input").Range("C3").Formula = "=""DataInput_""&SUBSTITUTE('Add Extra Section'!$C$3, "" "", """")" pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = _ Worksheets("Data Input").Range("C3").Value End Sub 

Мы никогда не использовали copySheet , поэтому я удалил это. Кроме того, если вы не планируете расширять этот макрос, с помощью pasteSheet и addSection добавляется путаница, поэтому я старался держать его простым.

На листе ввода данных мы хотим получить именованный диапазон, указанный в ячейке C3.

Именованный диапазон указан в листе «Добавить дополнительную секцию», ячейка C3. Возьмите эту строку и удалите пробелы. Затем добавьте «DataInput_» в начало. Это то, что ...Formula = линия. (Посмотрите на формулу назад, Excel сначала заменит пробелы, а затем объединит это с «DataInput_»).

Затем, наконец, возьмите строку «DataInput_ [NAMED RANGE]» и поместите ее в последнюю строку «Добавить дополнительную секцию» +1.

Edit2: Извините, но, думая об этом, лучший способ – избежать использования рабочего листа и выполнить работу в VBA:

 Sub updateNamedRange() Dim destinationCell As Range, inputCell As Range Set destinationCell = Worksheets("Add Extra Section").Cells(Worksheets("Add Extra Section").Rows.Count, 1).End(xlUp).Offset(1, 0) Set inputCell = Worksheets("Add Extra Section").Cells(3, 3) destinationCell.Value = "DataInput_" & WorksheetFunction.Substitute(inputCell, " ", "") End Sub 
  • VBA | Как скопировать значение из ячейки в ячейку в Excel
  • Кнопка формы в excel изменяет свое местоположение при копировании данных из другого листа
  • VBA - копировать строки - если он обнаружил ошибку, а затем продолжить в ячейках копирования
  • Скопируйте ряд строк в зависимости от критериев в столбце и вставьте в другой лист, названный в качестве критериев
  • Удалить возможные отношения объектов внутри изображений? Попытка xlCopy с ограничениями памяти
  • Автоматическое переименование нескольких листов и копирование содержимого основного списка во все вновь созданные листы
  • Excel VBA Debug: Loop не выполняет поиск по всему диапазону
  • Скопировать Excel RangeSelection в массив в приложении Windows
  • Копирование определенных столбцов условно на другой рабочий лист
  • Как я могу сканировать свой код по моим данным и скопировать определенные выбранные строки данных и вставить их на другой лист?
  • Скопируйте блоки строк на основе определенного правила
  • Interesting Posts

    Excel VBA для замены символов – char-by-char vs regex (?)

    Добавить данные в ручной фильтр в сводной таблице без редактирования источника

    Использовать переменную для имени приложения

    C # – Убить EXCEL.exe процесс, ссылающийся на конкретный файл

    Изменить расположение столбца оператора SQL в Excel

    Как получить CustomDocumentProperties с помощью Excel Interop?

    Excel для соответствия отрицательного значения положительному и удаления точно совпадающей строки

    Я не могу добавить апостроф в строку при импорте файла Excel в базу данных MySQL

    Параметры синтаксиса, создающие ошибки в макросе VBA для Excel

    Кнопка VBA создает новые листы для новой книги

    Excel UDF взвешенный RANDBETWEEN ()

    VBA Autofilter Несколько столбцов (Союз вместо пересечения критериев)

    Open XML: как добавить строки и значение ячейки после добавления нового листа в существующий файл Excel с помощью c #

    импорт данных из excel для доступа с использованием форм доступа ms

    Альтернатива пользовательской форме Excel в листах google

    Давайте будем гением компьютера.