Inserir Cabeçalhos de Nome de Arquivo em Numerosos Arquivos XLSX

1

Sou muito novo no mundo do VBA, mas preciso de um script VBA para inserir o nome do arquivo como um rodapé no Excel. Idealmente, gostaria de inserir os primeiros 7 caracteres do nome do arquivo no rodapé de cada guia em um arquivos do Excel.

Eu tenho cerca de 5000 arquivos do Excel que precisam dessa macro. Eu só tenho sido capaz de inserir cabeçalhos / rodapés em cada planilha e todas as guias (não vários arquivos) usando o seguinte código:

Sub InsertHeaderFooter()    
' inserts the same header/footer in all worksheets

  Dim ws As Worksheet   
  Application.ScreenUpdating = False

  For Each ws In ActiveWorkbook.Worksheets

    Application.StatusBar = "Changing header/footer in " & ws.Name    
    With ws.PageSetup    
      .RightFooter = "&"    
    End With

  Next ws

  Set ws = Nothing    
  Application.StatusBar = False

End Sub
    
por Jessica Gray 18.11.2014 / 19:06

1 resposta

1

O & simples não funciona para mim no Excel 2007; talvez você quis dizer &[File] ou talvez & seja uma abreviação em versões mais recentes?

Com relação aos 5000 arquivos, você provavelmente desejará ter certeza de que eles estão todos no mesmo local e, em seguida, percorrer todos os arquivos .xlsx nesse local. (Você precisa filtrar com base no nome do arquivo também?)

Se você google multiple files excel vba , achará que o terceiro hit e o seguinte serão relevantes. Alguns elementos-chave do artigo do MSDN:

' Modify this folder path to point to the files you want to use.
FolderPath = "C:\Users\Peter\invoices\"

' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")

' Loop until Dir returns an empty string.
Do While FileName <> ""

    ' Open a workbook in the folder
    Set WorkBk = Workbooks.Open(FolderPath & FileName)

    ' DO WORK

    ' DO SAVE CHANGES
    WorkBk.Close savechanges:=True

    ' Use Dir to get the next file name.
    FileName = Dir()
Loop

Se você precisar fazer drill down em subdiretórios, considere dividir todo o loop Do While em um Sub que se chame recursivamente (e passando o local da pasta como um parâmetro). Pesquisando vba loop through folder tree ... Ver a resposta recursiva em esta página

    
por 19.11.2014 / 00:00