Search code examples
excelfilenamesvba

How to Insert workbook name in all worksheets in first column of all rows (used rows) in a folder


I have a task to add workbook name into all worksheet's first column hence i need to have a macro and below is a draft of the same

Sub InsertWorkbookName()
Path = "C:\Users\mechee69\Download\"
Filename = Dir(Path & "*.xls")

Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Application.Goto Range("A" & ActiveCell.Row), True
ActiveCell.Select
ActiveCell.FormulaR1C1 = _
    "=RIGHT(LEFT(CELL(""filename""),FIND(""."",CELL(""filename""),FIND(""["",CELL(""filename""),1))-1),FIND(""."",CELL(""filename""),FIND(""["",CELL(""filename""),1))-FIND(""["",CELL(""filename""),1)-1)"
Application.Goto Range("A" & ActiveCell.Row), True
ActiveCell.Select
Selection.Copy
Range(Selection, Selection.End(xlUp)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
End Sub

Solution

  • So this Macro will open Excel Files in a Folder with a specific format, then it prints the workbookname in A1 in every sheet of that file. It ignores the master, if its in the same folder.

    Sub WorkbookName()
    Dim wbk As Workbook
    Dim Filename As String
    Dim Path As String
    Dim lastRow As Long
    Dim lSecurity As Long
    
    On Error Resume Next
    
    Path = "C:\Users\User\Desktop\Files\" 'Folder of your Files
    Filename = Dir(Path & "*.xlsx") 'Format of your files
    
    Do While Filename <> "" And Filename <> "Master.xlsm" 'Dont Open MasterFile
        Set wbk = Workbooks.Open(Path & Filename)
        lSecurity = Application.AutomationSecurity
        Application.AutomationSecurity = msoAutomationSecurityLow
    
        For Each ws In wbk.Worksheets
            With ws
                .Range("A1").EntireColumn.Insert
                lastRow = .Cells(Rows.Count, 2).End(xlUp).Row
                .Range(Cells(1, 1), Cells(lastRow, 1)).Value = ActiveWorkbook.Name
    
            End With
        Application.AutomationSecurity = lSecurity
        Next ws
    wbk.Close True
    Filename = Dir
    Loop
    End Sub