In the Workook_open Sub I want to define 2 global static Variables.
For some reason I can't get it to work.
Whenever I try to access these vars they have the value "0"
I use Excel 2000.
Here is what i did:
Dim i As Integer
Dim ws As Worksheet
Public Static GlobalStartX As Integer
Public Static GlobalStartY As Integer
i have a variable that will be the same in every module within a workbook. i have tried playing with Global, Public, Conts, etc. but get compile errors.
essentially this is what i want... i just want to set the dte globally so i dont have to set it in each module.
Code:
Global dte As Date If Weekday(Now()) = vbSunday Then dte = Date - 2 Else dte = Date - 1 End If
I understand the use of Global variables in the sense that they can be used throughout the project. However, I also understand (I think) that unless these variables (like any) are released from memory or the values changed by some other means they will retain their values when accessed inside a another procedure regardless of where the calling procedure is Public or Private. This seems to be a convenient way to access the values of these variables without having to make ByVal or ByRef declarations in the procedure calling process.
Firstly, is my understanding of this correct? (That the variables and associated values) can be accessed from within a calling procedure without formally passing them in?
Second, even if this is true is it considered to be bad practice because the variables will store the last known value which may or may not be correct if you aren't paying attention to how the variable was last set.
I have a spreadsheet with a real-time data link in cell A1 and I use Worksheet Calculate() to paste the new value, on any update,below cell A1. Once I have 10 values from A2 down to A11, I over-write the first one, so that I have the 10 most recent. From this I calculate the moving average.
Anyway, I would like to be able to do this without the pasting bit ie storing the most recent ten data points in a variable say x(i) and just averaging x(1) to x(10).
I'm guessing I need to use some kind of static variable or array, but I don't really know how to do this.
Is there a way that formula links in spreadsheets can use environment variables to reference formulas in other spreadsheets/addins?
For example, I have a spreadsheet that imports templates which call functions in an addin. The spreadsheet, templates and the addin could be installed into either the 'Program Files' or the 'Program Files (x86)' folders.
I am experiencing issues with the formula references when moved between 32 and 64 bit computers since Excel seems to store the full path of the addin in the Excel formula (even though it hides it when the reference resolves its path) in my templates. I would like to update the references in my templates so that they use an environment variable (set by my software installer) to always know the correct path of the addin.
In Excel 2003, spreadsheet links are edited via: 'Edit'->'Links' In Excel 2007 and higher,'Data'->'Edit Links'
I have "set .. with" blocks in some procedure. I want to make it global. How I do it? I have following:
Public cb As CommandBar Public ctrlClear As CommandBarControl Public ctrlInit As CommandBarControl Public ctrlGUI As CommandBarControl
Sub CreateToolbar() Set cb = Application.CommandBars.Add( Name:="auto", temporary:=True) With cb Set ctrlClr = .Controls.Add(Type:=msoControlButton, temporary:=True) Set ctrlInit = .Controls.Add(Type:=msoControlButton, temporary:=True) Set ctrlGUI = .Controls.Add(Type:=msoControlButton, temporary:=True) End With End Function
Sub ButStatus() ctrlClear.Enabled = True ctrlGUI.Enabled = False ctrlInit.Enabled = True End Sub
I want to use this command when I open every workbook.
How do I do that? I know you're supposed to put the macro in the thisworkbook module in the workbook, but I have 600 workbooks that needs to be changed. That is just not a good idea. I've tried to put the macro in the workbook called own.xls (I use a swedish version of excel, dont know what it is called in english) thisworkbook,
I script that on open would pop up asking if a sync was done with an option for yes or no. If yes is pressed then it would just open, if no selected it would give a message "must sync before use" and close the workbook.
I do not want this message to pop up when other spreadsheets are open when this one is still open so im guessing private workbook_open
I am using the following code in my Workbook_Open sub, located in the ThisWorkbook code module. I am enabling macros when opening. All other VBA code in the project is running correctly.
Private Sub Workbook_Open() Worksheets("Sheet1").init MsgBox "starting" End Sub
The init sub did not appear to be running so I inserted the MsgBox to confirm, but that doesn't come up either.
I have an Excel add-in file (stored .xla format) that is used by a lot of other spreadsheets on a network location because it is modified often, and all workbooks made from a template reference it. everything with that works fine, and any changes made to the add-in file are always reflected upon startup in the workbooks. So there isn't a problem with that. Recently I've had to add a Workbook_Open() sub into this add-in (which I wrote in 'ThisWorkbook'). However, this macro is never entered by any of the workbooks. Is it possible to have a workbook_open sub in another file? If so, what can be causing it to fail (there aren't any errors or anything like that in the sub)?
I have noticed this on more than one workbook with an Workbook_Open macro. When you open Excel, open Workbook1, do some work , save or don't save and close, then reOpen Workbook1 without having closed the Excel application, the Workbook_Open macro in Workbook1 doesn't run.
Closing Excel and reopening Workbook1 initiates the Workbook_Open macro. It's as if Excel remembers having previously opened Workbook1 and so it doesn't rerun the Workbook_Open macro the next time you open it.
Private Sub Workbook_Open() Dim x As Date x = InputBox("Enter End Date!") Range("B2") = x With Application. CommandBars("File") .Controls("Save").Enabled = False .Controls("Save").Visible = False .Controls("Save As...").Enabled = False .Controls("Save As...").Visible = False End With With Application.CommandBars("Standard") .Controls("Save").Enabled = False .................
from 1 sheet i am opening several other worksheets and read in the bits i want. i am finding that on occasions the workbook_open on these sheets is causing great performance issues because of the calc mode set to automatic in the open routine of the individual sheets. i dont need it to be set to auto but the sheet owners perfer it to be set like this and i cant turn it off their sheets. is ther a way of opening a workbook from a macro and then override its workbook_open routine?
Set wb = Workbooks.Open(sSourceFolder & "" & "mySheet.xls", False, True)
i cant find any other switches that i could use to disable this.
i have a workbook iam using as a template.(workbook "template") the user opens which then requests a job number which will then saves the workbook as the enterd job number. this workbook also contains all the material data. eg: price and type which is on sheet "data". I am hopin to get to the sheet "data" from another workbooks command button by bypassing the job enter request by the workbook_open sub. basically i need some code that disables a workbook_open sub
Private Sub Workbook_Open() If ActiveWorkbook. Name = "UserA.xls" Then Call PreviewList Else Cancel = True End If End Sub
After the macro auto-startup, UserA works on the worksheet and input some procedures and save as ClientA.xls. However, before save as ClientA.xls and close, UserA wants to change the worksheet name and Procedure name as below, how to do that?
Private Sub Workbook_Open() If ActiveWorkbook.Name = "ClientA.xls" Then Call RevisedList Else Cancel = True End If End Sub
the following workbook open event which repeats a macro called "Refresh" every 30 minutes. However, there is another macro "tame_blph" that i wanna call at 12 midnight everyday.
Private Sub Workbook_Open()
Call tame_blph
NextTick = Now + TimeValue("00:30:00")
Application .OnTime NextTick, "Refresh", , True
End Sub
Is it even possible to have multiple Workbook open events and/or multiple NextTick or something?
I have built a complex vba & multisheet spreadsheet that I am looking to secure against all the common attacks. So I have:A Workbook Open pw; VBA password (29 symbols/numbers/Caps/lower case) Very Hidden worksheets Hidden rows/columns Restricted scroll areas Workbook protection Code that auto protects all sheets upon opening Registry referencing in Workbook Open with timed closure if not matched Now I am on the last leg of implementing protection against Application.EnableEvents = False; force enabling of Macros and hiding of toolbars, scrollbars etc... Phew.
Soooo, in my research, I have learnt that if EnableEvents = False, Workbook_Open is essentially skipped and the security VBA routines are disabled. To get around, I have copied the entire contents of the Workbook_Open routine to a module under Auto_Open. The first line of both these scripts is: Application.EnableEvents = True.
Works! So far so good. However, I have a Msgbox prompt in the scripts that displays twice. So in essence, Excel is running Workbook Open first, then Auto Open second. If I open another instance of Excel and run Application.EnableEvents = False first before opening my spreadsheet, I only get one message. So only the Auto Open script runs.
i have this code which askes the user for a job number once the workbook is opened.
Private Sub Workbook_open()
' If sheet was named by original open routine, exit
If ActiveSheet.Name = "Main Roof" Then Exit Sub
' otherwise
Do Returnvalue = InputBox("Please Enter a New Job Number.", "Information")
' Allow changes by entering q as the Job Number If Returnvalue = "q" Then Exit Sub
' Delete the ' from the front of the following two lines and ' then when you enter q as the Job Number you will also be ' asked for a password. The default password is toe.
what iam trying to do is get it to open the userform "WorkSelection" after it has completed the above code.
i have been trying to hide the userform from the workbook open event with no luck
Private Sub Workbook_Open() ufmTheEstimator.Show Dim Worksheet As Excel.Worksheet If Me.Worksheets("Main Roof"). Name = True Then ufmTheEstimator.Hide End If End Sub
I've been setting the above property to TRUE after making some changes in the Workbook_open event in order to stop annoying messages if you haven't physically made changes.
Unfortunately, it doesn't seem to copy through to the workbook_beforeclose event and I'm being asked if I want to save changes even though the macro made the changes and then set the property. Here's my code for the open event :-
Private Sub Workbook_Open() Application.ScreenUpdating = False On Error Resume Next For counter = Worksheets.Count To 2 Step -1 Sheets(counter).Visible = xlVeryHidden Next Sheets("Desktop").Visible = True Sheets(1).Visible = xlVeryHidden.....
I have written a code for a function in VB editor in a sample excel sheet. The UDF is working fine, but I am not able to use it in every other worksheet. I need to give the code to my managers, so even they can use the function conviniently just from the formula bar. I had declared the function as a Public function, so I thought it will be accessible in other excel sheets as well but that doesn't seem to work.
If I want to set a global variable when I open my workbook which will be used in code on the individual spreadsheets, how would I do this? I want to set the time the workbook is opened to a variable (constant) and then compare that time to current time on each calculation in the worksheets.
I have a holiday chart which has a summary at the end which counts holidays and sickness etc. It is in a workbook with a worksheet for each month, how can I define a range name that i can use with all worksheets, at the moment I am having to define new range names for all of the sheets and this is taking some time?
When I am in the new worksheet I can click on the range names in the top left but when i select one it takes me to the worksheet where the range is.
I would like have a input box in which a user enter a number and then I would like to be able to use that number in other worksheets within the same workbook. How do I declare the variable for use with other sheets. I know I would first use
Dim intRows As Interger But now how do I make it global.
I am trying to match up two data sets that are composed of some not very clean data. Some of my match criteria is going to include text strings.
One data set often has abbreviations for words. Example:
Massachusetts General Hospital MASSACHUSETTS GENL HOSP Or St vs Street. Mt vs Mount.
The list of criteria of subs I want to do is quite extensive so it does not make sense to try and do this with embedded replace() and substitution() formulas.
Want I want to is to write some kind of case statement in VB where I can load a list of substituions into a worksheet with the word in the A column, and the sub in the B column.
A b GENL General
And then the code would find these words and sub them out whenever they are present.
Ideas on how to get started? Maybe there is a function out there already written that I can use? I searched a bit, but I am not familar with all of the resources out there. I don't need someone to write this for me, but just maybe a best practice on how you would, or point me to examples of similar functions.
Is there any way to select things like tools - options across all worksheets in a workbook? I often want to suppress display of zeroes in an entire workbook, but so far the only way I've found to do this is to go to eash worksheet in turn and go thru the procedure on each one.