2016-04-04 2 views
0

У меня есть книга со многими (переменными томами), все из которых имеют одинаковые заголовки столбцов и переменное количество строк. На главном листе («Лист1») есть большой блок формул, который мне нужно скопировать вместе с форматированием на все остальные листы. Листы уже имеют уникальные названия, поэтому они не будут работать, чтобы основывать их на листах.Копирование блока формул во все листы Excel VBA

Я знаю, что легче форматировать формулы, но это большая задача для другого дня (это очень, очень много формул).

В основном я должен скопировать и вставить блок формул из полностью отдельной книги в «Лист1», а затем скопировать его из этого. Вот то, что я до сих пор:

Windows("Step Formula Base.xlsx").Activate 
Columns("AK:BP").Select 
Application.CutCopyMode = False 
Selection.Copy 
Windows("NA - Sourcing - HR-IT-SLS Candidate Data %28All Candidates%29.xlsx"). _ 
    Activate 
Range("AK1").Select 
ActiveSheet.Paste 
Dim ws As Worksheet 
Set ws = ThisWorkbook.Sheets("Sheet1") 
Sheets.FillAcrossSheets_ 
    ws.Range ("AK:BP") 

Я не совсем получать FillAcrossSheets - думал, что это было бы легко исправить, но он ломает на этой линии. Любые мысли или помощь?

Спасибо!

+0

вы читали статью [MSDN по методу FillAcrossSheets] (https://msdn.microsoft.com/en-us/library/office/ff840684.aspx) –

+0

Да, у меня есть идея, но проблема в том, что я хочу, чтобы это был гибкий код, который работает, если общее число листов меняется. Я также не хочу писать в заголовках каждого листа, потому что они могут меняться (поэтому я не могу заполнить массив с указанным заголовком). – TwoHeartedKale

+1

Если вы выберете все листы, они сделают одно и то же действие для всех из них, так что сделайте это перед тем, как вставить? Не требуется кодирование. – findwindow

ответ

0

Вот рабочий код:

Windows("Step Formula Base.xlsx").Activate 
Columns("AK:BP").Select 
Application.CutCopyMode = False 
Selection.Copy 
Windows("NA - Sourcing - HR-IT-SLS Candidate Data %28All Candidates%29.xlsx"). _ 
    Activate 
Sheets.Select 
Range("AK1").Select 
ActiveSheet.Paste 
+0

вам может быть даже лучше всего копировать соответствующие строки с формулами. Выполнение экстенсионального копирования и вставки целых столбцов (особенно на нескольких листах) будет очень ресурсоемким и медленным (и даже может привести к сбою Excel). Например, просто скопируйте 'Range (« AK1: BP100 »)' или всюду, где находится последняя строка формул. –

+0

Отличная идея; проблема заключается в том, что у меня есть формула DateValue как часть блока; Я хочу убедиться, что он распространяется только до строк с текстом, которые различаются по листу. Есть ли код VBA, который я мог бы использовать, чтобы вставить это и разбить его из блока формулы? Это, вероятно, очень просто, но я не нашел на нем четкого ответа. – TwoHeartedKale

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