+ Reply to Thread
Results 1 to 4 of 4

Thread: VBA - Add column (A) and in each cell list the file name

  1. #1
    Registered User
    Join Date
    01-06-2012
    Location
    phoenix, az
    MS-Off Ver
    Excel 2007
    Posts
    2

    VBA - Add column (A) and in each cell list the file name

    First, I am a beginner. I have VBA code that will take multiple workbooks in a file and consilidate them into one workbook. Each workbook has the same structure bud different data. Whe I run the VBA, i need to add some code that will add a column (where column a is and fill column b and the rest contains the workbook data). I have been working on this for a while and cant figure it out. Can someone please help. Thanks.

    Sub CombineSheetsFromAllFilesInADirectory()

    Dim Path As String 'string variable to hold the path to look through
    Dim FileName As String 'temporary filename string variable
    Dim tWB As Workbook 'temporary workbook (each in directory)
    Dim tWS As Worksheet 'temporary worksheet variable
    Dim mWB As Workbook 'master workbook
    Dim aWS As Worksheet 'active sheet in master workbook
    Dim RowCount As Long 'Rows used on master sheet
    Dim uRange As Range 'usedrange for each temporary sheet

    '***** Set folder to cycle through *****
    Path = "C:\Traffic Reports\2012\January 2012" 'Change as needed, ie "C:\"

    Application.EnableEvents = False 'turn off events
    Application.ScreenUpdating = False 'turn off screen updating
    Set mWB = Workbooks.Add(1) 'create a new one-worksheet workbook
    Set aWS = mWB.ActiveSheet 'set active sheet variable to only sheet in mWB
    If Right(Path, 1) <> Application.PathSeparator Then 'if path doesnt end in "\"
    Path = Path & Application.PathSeparator 'add "\"
    End If
    FileName = Dir(Path & "*.xls", vbNormal) 'set first file's name to filename variable
    Do Until FileName = "" 'loop until all files have been parsed
    If Path <> ThisWorkbook.Path Or FileName <> ThisWorkbook.Name Then
    Set tWB = Workbooks.Open(FileName:=Path & FileName) 'open file, set to tWB variable
    For Each tWS In tWB.Worksheets 'loop through each sheet
    Set uRange = tWS.Range("A1", tWS.Cells(tWS.UsedRange.Row + tWS.UsedRange.Rows _
    .Count - 1, tWS.UsedRange.Column + tWS.UsedRange.Columns.Count - 1)) 'set used range
    If RowCount + uRange.Rows.Count > 65536 Then 'if the used range wont fit on the sheet
    aWS.Columns.AutoFit 'autofit mostly-used worksheet's columns
    Set aWS = mWB.Sheets.Add(After:=aWS) 'add a new sheet that will accommodate data
    RowCount = 0 'reset RowCount variable
    End If
    If RowCount = 0 Then 'if working with a new sheet
    aWS.Range("A1", aWS.Cells(1, uRange.Columns.Count)).Value = _
    tWS.Range("A1", tWS.Cells(1, uRange.Columns.Count)).Value 'copy headers from tWS
    RowCount = 1 'add one to rowcount
    End If
    aWS.Range("A" & RowCount + 1).Resize(uRange.Rows.Count, uRange.Columns.Count).Value _
    = uRange.Value 'move data from temp sheet to data sheet
    RowCount = RowCount + uRange.Rows.Count 'increase rowcount accordingly
    Next 'tWS
    tWB.Close False 'close temporary workbook without saving
    End If
    FileName = Dir() 'set next file's name to FileName variable
    Loop
    aWS.Columns.AutoFit 'autofit columns on last data sheet
    mWB.Sheets(1).Select 'select first data sheet on master workbook
    Application.EnableEvents = True 're-enable events
    Application.ScreenUpdating = True 'turn screen updating back on

    'Clear memory of the object variables
    Set tWB = Nothing
    Set tWS = Nothing
    Set mWB = Nothing
    Set aWS = Nothing
    Set uRange = Nothing
    End Sub

  2. #2
    Forum Guru JBeaucaire's Avatar
    Join Date
    03-21-2008
    Location
    Bakersfield, CA
    MS-Off Ver
    2010
    Posts
    19,226

    Re: VBA - Add column (A) and in each cell list the file name

    Care to describe in words what all you need done?

    1) Create a new blank workbook, set a target worksheet for consolidation
    2) Open all the files in a specified directory one at a time
    3) Copy all data from all sheets into the target sheet starting at column C across, stack each set of data under the previous
    4) Put some information in column A and column B regarding the imported data ????


    Like that, but more specific...


    Also, edit that post above and put code tags around your posted code, as demonstrated below in my signature. (Forum Rules)
    _________________
    Microsoft MVP 2010 - Excel
    Visit: Jerry Beaucaire's Excel Files & Macros

    If you've been given good help, use the icon below to give reputation feedback, it is appreciated.
    Always put your code between code tags. [CODE] your code here [/CODE]

    “None of us is as good as all of us” - Ray Kroc
    “Actually, I *am* a rocket scientist.” - JB (little ones count!)

  3. #3
    Registered User
    Join Date
    01-06-2012
    Location
    phoenix, az
    MS-Off Ver
    Excel 2007
    Posts
    2

    Re: VBA - Add column (A) and in each cell list the file name

    Well I need it more automated. When I open a file, there are about 20 workbooks, each workbook has 2 sheets with 60 rows per sheet. The code I currently have appends the first sheet (from the 1st workbook) and then sheet2 (of the 1st workbook).... then appends sheet 1 of workbook 2 and then sheet 2 of workbook 2 and so on. Once I have a master workbook with all the data on one sheet because of the VBA, I want the 1st column in the work book to have the file name that the row is associated with. I have played with the following code:

    ' Copy the file name in column A.
    With SourceRange
    BaseWks.Cells(rnum, "A"). _
    Resize(.Rows.Count).Value = FileName(FNum)
    End With

    ' Set the destination range.
    Set destrange = BaseWks.Range("B" & rnum)

    ' Copy the values from the source range
    ' to the destination range.
    With SourceRange
    Set destrange = destrange. _
    Resize(.Rows.Count, .Columns.Count)
    End With

    But I can't get it to work properly.

    Again here is the origional VBA in a better format:

    Thank you!


    Sub CombineSheetsFromAllFilesInADirectory()


    Dim Path As String 'string variable to hold the path to look through
    Dim FileName As String 'temporary filename string variable
    Dim tWB As Workbook 'temporary workbook (each in directory)
    Dim tWS As Worksheet 'temporary worksheet variable
    Dim mWB As Workbook 'master workbook
    Dim aWS As Worksheet 'active sheet in master workbook
    Dim RowCount As Long 'Rows used on master sheet
    Dim uRange As Range 'usedrange for each temporary sheet

    '***** Set folder to cycle through *****
    Path = "C:\Traffic Reports\2011\12_2011\12-19-11" 'Change as needed, ie "C:\"

    Application.EnableEvents = False 'turn off events
    Application.ScreenUpdating = False 'turn off screen updating
    Set mWB = Workbooks.Add(1) 'create a new one-worksheet workbook
    Set aWS = mWB.ActiveSheet 'set active sheet variable to only sheet in mWB
    If Right(Path, 1) <> Application.PathSeparator Then 'if path doesnt end in "\"
    Path = Path & Application.PathSeparator 'add "\"
    End If
    FileName = Dir(Path & "*.xls", vbNormal) 'set first file's name to filename variable
    Do Until FileName = "" 'loop until all files have been parsed
    If Path <> ThisWorkbook.Path Or FileName <> ThisWorkbook.Name Then
    Set tWB = Workbooks.Open(FileName:=Path & FileName) 'open file, set to tWB variable
    For Each tWS In tWB.Worksheets 'loop through each sheet
    Set uRange = tWS.Range("A1", tWS.Cells(tWS.UsedRange.Row + tWS.UsedRange.Rows _
    .Count - 1, tWS.UsedRange.Column + tWS.UsedRange.Columns.Count - 1)) 'set used range
    If RowCount + uRange.Rows.Count > 65536 Then 'if the used range wont fit on the sheet
    aWS.Columns.AutoFit 'autofit mostly-used worksheet's columns
    Set aWS = mWB.Sheets.Add(After:=aWS) 'add a new sheet that will accommodate data
    RowCount = 0 'reset RowCount variable
    End If
    If RowCount = 0 Then 'if working with a new sheet
    aWS.Range("A1", aWS.Cells(1, uRange.Columns.Count)).Value = _
    tWS.Range("A1", tWS.Cells(1, uRange.Columns.Count)).Value 'copy headers from tWS
    RowCount = 1 'add one to rowcount
    End If
    aWS.Range("A" & RowCount + 1).Resize(uRange.Rows.Count, uRange.Columns.Count).Value _
    = uRange.Value 'move data from temp sheet to data sheet
    RowCount = RowCount + uRange.Rows.Count 'increase rowcount accordingly
    Next 'tWS
    tWB.Close False 'close temporary workbook without saving
    End If
    FileName = Dir() 'set next file's name to FileName variable
    Loop
    aWS.Columns.AutoFit 'autofit columns on last data sheet
    mWB.Sheets(1).Select 'select first data sheet on master workbook
    Application.EnableEvents = True 're-enable events
    Application.ScreenUpdating = True 'turn screen updating back on

    'Clear memory of the object variables
    Set tWB = Nothing
    Set tWS = Nothing
    Set mWB = Nothing
    Set aWS = Nothing
    Set uRange = Nothing
    End Sub









    Quote Originally Posted by JBeaucaire View Post
    Care to describe in words what all you need done?

    1) Create a new blank workbook, set a target worksheet for consolidation
    2) Open all the files in a specified directory one at a time
    3) Copy all data from all sheets into the target sheet starting at column C across, stack each set of data under the previous
    4) Put some information in column A and column B regarding the imported data ????


    Like that, but more specific...


    Also, edit that post above and put code tags around your posted code, as demonstrated below in my signature. (Forum Rules)

  4. #4
    Forum Guru pike's Avatar
    Join Date
    12-11-2005
    Location
    Alstonville, Australia
    MS-Off Ver
    2010
    Posts
    5,155

    Re: VBA - Add column (A) and in each cell list the file name

    Your post does not comply with Rule 3 of our Forum RULES. Use code tags around code. Posting code without them makes your code hard to read and difficult to be copied for testing. Highlight your code and click the # at the top of your post window. For more information about these and other tags, found here
    regards pike

    If the solution helped please donate
    here to the RSPCA

    Sites worth visiting;

    J&R Solutions - royUK

    AJP Excel Information - Andy Pope

    Spreadsheet Toolbox

    VBA for smarties - snb

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.2.0