PDA

View Full Version : When file is open Automatically run VBA



ebrabender
09-12-2011, 08:56 AM
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.

JP2112
09-12-2011, 09:07 AM
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.

ebrabender
09-12-2011, 09:11 AM
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.

JP2112
09-12-2011, 10:55 AM
Sorry, for safety reasons I don't open other people's documents. Can you post the code inside the post editor (using VBA tags)?

ebrabender
09-13-2011, 09:20 AM
I hope I did this right

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("A5:D18")
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

ebrabender
09-14-2011, 09:15 AM
Anyone have any ideas or suggestions for me?

JWest
09-14-2011, 10:47 AM
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:



Call MonthlySummary



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.

ebrabender
09-14-2011, 01:56 PM
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?