Consulting

Results 1 to 8 of 8

Thread: When file is open Automatically run VBA

  1. #1

    When file is open Automatically run VBA

    How do I get my VBA to automatically run when the file where the program is wrote is opened? What I would like is when the monthly summary program is opened where this code is wrote I would like to have it automatically run the program instead of having to go and run it manually.

  2. #2
    VBAX Expert JP2112's Avatar
    Joined
    Oct 2008
    Location
    Astoria, NY
    Posts
    590
    Location
    If there is a procedure in the workbook that you are opening programmatically, call it from your code using the Application.Run method. Or call it from the Workbook_Open method.
    Regards,
    JP

    Read the FAQ
    Getting free help on the web
    My website
    Please use [vba][/vba] tags when posting code

  3. #3
    I should have included the code that I have. Here is the code of the program that I am running. So I Would add the coding to this or somewhere else. Sorry for the confusion I am quite new to this and basically self teaching myself.
    Attached Files Attached Files

  4. #4
    VBAX Expert JP2112's Avatar
    Joined
    Oct 2008
    Location
    Astoria, NY
    Posts
    590
    Location
    Sorry, for safety reasons I don't open other people's documents. Can you post the code inside the post editor (using VBA tags)?
    Regards,
    JP

    Read the FAQ
    Getting free help on the web
    My website
    Please use [vba][/vba] tags when posting code

  5. #5
    I hope I did this right

    [VBA]Sub MonthlySummary()
    Dim MyPath As String, FilesInPath As String
    Dim MyFiles() As String
    Dim SourceRcount As Long, Fnum As Long
    Dim mybook As Workbook, ShiftReport As Worksheet
    Dim sourceRange As Range, destrange As Range
    Dim rnum As Long, CalcMode As Long

    'Fill in the path\folder where the files are
    MyPath = "Y:\Corrugator\SHIFT DOWNTTIME REPORT\8----Aug"


    'Add a slash at the end if the user forget it
    If Right(MyPath, 1) <> "\" Then
    MyPath = MyPath & "\"
    End If

    'If there are no Excel files in the folder exit the sub
    FilesInPath = Dir(MyPath & "*.xl*")
    If FilesInPath = "" Then
    MsgBox "No files found"
    Exit Sub
    End If

    'Fill the array(myFiles)with the list of Excel files in the folder
    Fnum = 0
    Do While FilesInPath <> ""
    Fnum = Fnum + 1
    ReDim Preserve MyFiles(1 To Fnum)
    MyFiles(Fnum) = FilesInPath
    FilesInPath = Dir()
    Loop

    'Change ScreenUpdating, Calculation and EnableEvents
    With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
    End With

    'Add a new workbook with one sheet
    Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
    rnum = 1


    'Loop through all files in the array(myFiles)
    If Fnum > 0 Then
    For Fnum = LBound(MyFiles) To UBound(MyFiles)
    Set mybook = Nothing
    On Error Resume Next
    Set mybook = Workbooks.Open(MyPath & MyFiles(Fnum))
    On Error GoTo 0

    If Not mybook Is Nothing Then

    On Error Resume Next

    With mybook.Worksheets(1)
    Set sourceRange = .Range("A518")
    End With

    If Err.Number > 0 Then
    Err.Clear
    Set sourceRange = Nothing
    Else
    'if SourceRange use all columns then skip this file
    If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
    Set sourceRange = Nothing
    End If
    End If
    On Error GoTo 0

    If Not sourceRange Is Nothing Then

    SourceRcount = sourceRange.Rows.Count

    If rnum + SourceRcount >= BaseWks.Rows.Count Then
    MsgBox "Sorry there are not enough rows in the sheet"
    BaseWks.Columns.AutoFit
    mybook.Close savechanges:=False
    GoTo ExitTheSub
    Else

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

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

    'we copy the values from the sourceRange to the destrange
    With sourceRange
    Set destrange = destrange. _
    Resize(.Rows.Count, .Columns.Count)
    End With
    destrange.Value = sourceRange.Value

    rnum = rnum + SourceRcount
    End If
    End If
    mybook.Close savechanges:=False
    End If

    Next Fnum
    BaseWks.Columns.AutoFit
    End If

    ExitTheSub:
    'Restore ScreenUpdating, Calculation and EnableEvents
    With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = CalcMode
    End With
    End Sub

    [/VBA]

  6. #6
    Anyone have any ideas or suggestions for me?

  7. #7
    VBAX Regular
    Joined
    Aug 2011
    Posts
    11
    Location
    JP2112 has actually already given you your answer:

    Open your WorkBook and hit Alt+F11. On the left hand side under "Microsoft Excel Objects" you will see what looks like an excel file called "Workbook". Double click on this. This will open the Event Triggers for the Workbook. You will see two drop down menus. Click on the one called (General) and change it to "Workbook". Change the other dropdown menu to "Open". This creates a Private Subroutine Event Trigger for when the workbook is opened. Now put the following code in:

    [VBA]

    Call MonthlySummary

    [/VBA]

    Save the file. Now when you open the Workbook, the first thing to run is the Workbook Event Trigger which then calls your Macro and makes it run.

  8. #8
    Thank You very much. One other question I have with this then. instead of opening up a new workbook and copying the information to a new workbook can I just have the information load into this workbook?

Posting Permissions

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