2012-05-31 3 views
1

Я пытаюсь написать макрос, который вставляет над формулами внутри определенных имен рабочие листы с их значениями, тем самым делая их экспортируемыми. Я успешно получил макрос, чтобы обмануть и переименовать листы, но не могу заставить copy/paste работать на них, как хотелось бы.Запуск макроса на листах с указанным именем

В настоящее время мой макрос копирует все видимые листы, кроме одного указанного («Панель управления»), а затем переименовывает их, заменяя «(2)» на «_VARIABLES». Все идет нормально. Затем предполагается перезаписать формулы во вновь созданных листах со значениями; эта часть не работает.

Вот весь код:

Private Sub testestssss() 

Dim ws As Worksheet 

'Copy all visible worksheets except "Dashboard" to the end 

For Each ws In Sheets 

If ws.Name = "Dashboard" Then 
Else 
If ws.Visible Then ws.Copy after:=Worksheets(Worksheets.Count) 
End If 

Next 

'Rename all "wk * (2)" sheets to "wk *_VARIABLES" 

For Each ws In Sheets 
If ws.Name Like "* (2)" Then 
ws.Name = Replace(ws.Name, " (2)", "_VARIABLES") 
End If 
Next 

'Overwrite all "wk *_VARIABLES" formulae with values 

For Each ws In Sheets 
If ws.Name Like "*_VARIABLES" Then 
Columns("A:B").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
End If 
Next 

End Sub 

Таким образом, все выше, не работает до до «перезаписать все„WK * _VARIABLES“формулы со значениями» части. Это кажется неэффективным.

Любая помощь будет с благодарностью оценена!

спасибо.

ответ

1

Вы продолжаете выбирать столбец активного листа. Это должно делать то, что вы ожидаете:

For Each ws In Sheets 
    If ws.Name Like "*_VARIABLES" Then 
     ws.Select 
     Columns("A:B").Select 
     Selection.Copy 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
            :=False, Transpose:=False 
    End If 
Next 

В качестве альтернативы, вы можете просто написать это (не нужно выбирать, и она работает немного быстрее и без них):

For Each ws In Sheets 
    If ws.Name Like "*_VARIABLES" Then 
     ws.Columns("A:B").Copy 
     ws.Columns("A:B").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
             SkipBlanks:=False, Transpose:=False 
    End If 
Next 

И, наконец, чтобы сэкономить несколько нажатий клавиш :

For Each ws In Sheets 
    If ws.Name Like "*_VARIABLES" Then 
     With ws.Columns("A:B") 
      .Copy 
      .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
          SkipBlanks:=False, Transpose:=False 
     End With 
    End If 
Next 

И не забудьте добавить следующее заявление после секции копирования/вставки:

Application.CutCopyMode = False 

чтобы сохранить чистоту.

+0

+ 1 избили меня до него. Пришлось прервать проект LOL –

+0

@SiddharthRout Извините, что ;-) Так как вы получили выше меня, я должен работать все сильнее и быстрее! – assylias

+0

@assylias Это работает _perfectly_ - спасибо за ваш быстрый ответ! Похоже, у меня все еще есть много уроков для оптимизации. Ура! – seegoon

Смежные вопросы