Может ли макрос записи автоматически использовать определенные имена вместо имен ячеек?

avatar
Krissa
1 июля 2021 в 19:09
32
1
0

Я использую макрос записи для простого копирования и вставки кода VBA:

Range("F12").Select 
Selection.Copy 
Range("F10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False 

Но я определил ячейки F12 и F10 (поэтому, если я добавлю строки/столбцы, это не испортит формулу), и мне интересно, есть ли способ записать макрос, чтобы он использовал определенные имена автоматически. Это возможно? Или есть строка, которую я мог бы добавить в код после записи, которая легко заменит ячейки с определенными именами? Прямо сейчас я обновляю код вручную с определенными именами. Я хотел бы продолжать использовать макрос записи, потому что на этот раз я все равно копирую и вставляю вручную, но я надеюсь использовать VBA в будущем.

Источник
BigBen
1 июля 2021 в 19:15
0

Сомнительно. Но вам, вероятно, следует просто использовать Range("name1").Value = Range("name2").Value.

T.M.
1 июля 2021 в 19:16
0

... и старайтесь избегать использования Select в Excel VBA @Krissa

P.b
1 июля 2021 в 19:37
0

Или еще короче: [name1].value = [name2].value

Ответы (1)

avatar
JB-007
6 июля 2021 в 18:31
0

В зависимости от объема данных/ячеек в действительности (в отличие от вашего вопроса, который, как я предполагаю, может быть "уменьшен" по практическим причинам), вы обнаружите, что выполнение VB намного быстрее, просто "установив" ячейки назначения равными исходные значения:

Sub Demo()

Application.ScreenUpdating = False
[named_cell_destination].Value = [named_cell_source].Value
Application.ScreenUpdating = False

End Sub

где: 'named_cell_source' и 'named_cell_destination' — это имена, которые вы присвоили из самого Excel.

В качестве альтернативы, если вы хотите присвоить/добавить именованные диапазоны из Excel, а затем применить аналогичный подход, описанный выше, вы можете сделать что-то вроде этого:

Sub Demo2()

Dim Rng, Rng2 As Range



  Set Rng = Range("A1:B8")
  Set Rng2 = Range("A12:B19")
  
  ThisWorkbook.Names.Add Name:="Range_1", RefersTo:=Rng
  ThisWorkbook.Names.Add Name:="Range_2", RefersTo:=Rng2
  
  [Range_2].Value = [Range_1].Value

End Sub

см. wallstreetmojo для получения дополнительной информации по этому вопросу.