Passing Variables And Values Between Sheet Code And Module Code
May 13, 2009
I have some buttons in different sheets in an excel file, each button has its own code, that is the reason I can not move the code related to each object to another location (sheet or module).
And I have one piece of code in Module1 (Auto_load) in order to execute automatically this routine every time file is opened. Inside "auto_load" routine I initialize some values of some check buttons,options buttons and positions of some objects in diferent sheets, but I can not pass the value of variables between Module and Sheet's code even when I declare as public variables and/or function.
I have a workbook that imports sheets from other workbooks. Each of these sheets need to have the following in the sheet module...
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If ActiveCell.Address = "$P$1" Then Range("P11:V250,Q10:V10").Select Selection.Clear Range("P10").Select End If End Sub
How do I accomplish that through a module in the original workbook?
I've used the following code to export macros from one workbook to another but I was wondering how you export macros from the ' Sheet' code module to the 'Sheet' code module of another workbook.
Sub Import_Macro()
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
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 implemented the code for the FuzzyPercent code as a module and Excel will not recognize the function for the cell (=fuzzypercent($C$3,$B5,D$2)). I am using Excel XP.
I want the buttons to run a seperate piece of code to start, but then all buttons run a similar piece of code at the end. I am hoping to be able to pass a variable from the first piece of code each button runs into the section of code that all share (which I have done as a seperate macro)
I have made a macro that displays a textbox containing the contents of a cell once the cell is clicked. The macro is written in the 'ThisWorkbook' module in the Sub 'Worksheet_SelectionChange'.
Now I want to convert this macro into an add-in so that it works on all the Excel workbooks I open. Is it possible to do this? Or is there a way in which we can automatically put the code in the 'ThisWorkbook' module of any open worksheet (doesn't seem feasible).
I am trying to add code to a module that is already working. however when trying to add new code i keep on getting error messages. It doesnt like the "next i" see attachment.
all else works except for the WEEK1 tab. I am trying to get it so if the "Date Submitted" colum on the MAIN tab is between 5/3/09 - 5/9/09 it will go to tab "WEEK1"
5/10/09 - 5/16/09 to WEEK2 5/17/09 - 5/23/09 to WEEK3 5/24/09 - 5/30/09 to WEEK4
I am looking for a code to create a new vba module. then cope all the code from 1 vba module(without empty line) to the newly created module. then delete the old vba module. does such a code exist?
I have a spreadsheet with two modules. In an effort to reduce the file size of an archive, I’d like to remove some of the code (i.e., Module1). I have a macro that attempts to do this.
There are three parts to the operation. The first removes Module1; the second Quits the application; the third saves the changes. If I run each of these operations separately, it works fine. However, I’d like to do this with only one macro (SKK4). For some reason, it does not remove the Module. Here is my test Sub skk1() ThisWorkbook.VBProject.VBComponents.Remove_ ThisWorkbook.VBProject.VBComponents("Module1") End Sub
Sub skk2() Application.Quit End Sub
Sub skk3() ThisWorkbook.Close SaveChanges:=True End Sub
Somehow, from a fresh instal of Excel (to try and cure the same problem), and Insert Module, the box is green. Viewing a macro, the background is green, some of the code is black on green, but most is black or blue in white boxes cut out of the green. The code appears normal on another computer.
I have a problem deleting Module1 then saving the worksheet and keeping the module1 deleted. Without the rem'd code (shown below) a popup asks if you wish to save the changes; if you say "No" the module reappears in the file, and "Yes" the module stays deleted. Even with any of the Rem'd out code below the workbook is saved and closed, but on reopening the code module is still there. My problem is I don't want the user to have the choice, the workbook must be saved without the module. As this is a price quote program, with the module still in the Project, reopening and closing the saved workbook causes an error as the macro cannot find the deleted worksheets to delete! This is a very small test program for a much bigger one that has quite a bit of security in it.
Sub deletetest()
Dim x As Object Application.DisplayAlerts = False
Sheets("Sheet2").Delete Sheets("Sheet3").Delete
e = Sheets("Sheet1"). Range("B4") ' account name f = Format(Sheets("Sheet1").Range("B3"), "ddmmyy") ' date quote saved, cell = NOW() thisfile = e & "-" & "-" & f 'changed to name, Acc No, dat
I have a vba process that develops statistics/graphical output via SQL queries of pretty large datasets. This usually takes about 2min, so I run it via a form I've build, and then go do other work or play on the net, checking and rechecking if it has completed. I do have a msgbox once the process is complete, but if i am not actively in an Excel window, I will not see it. Is there a way to force the windows taskbar to flash or something so i can see that my process is complete if i am not in an Excel window?
I am trying to create code that I can use to to update a macro module automatically so I don;t have to keep having my users manually import when we have update to the module.
Here is the code I have so far.
Private Sub Workbook_Open() Call UpdateTJMacros 'This is in the module we are replacing Call MyOpenWorkbookMacro
how to write a procedure to delete macro code that is in the worksheet property? I created a and excel model for a colleague which had many macro procedures including "Worksheet_Activate". The problem is now this individual moves the worksheets into new workbooks and this is cause many runtime errors. Is there a way I can write a copy/move procedure that also deletes the Worksheet Activate macro so that error does not appear?
way to save user-settings at runtime, preferably in the same or another module. For example: how can I save a bundle of variables such that the next time excel is started and the workbook is opened, the user can continue to work with his personal settings?
Background: Using the macro, I am writing on atm, a user will be able to adjust the macro according to his input-samples. Here the columns and rows of an input can be varied to fit the macros requirements. It would be great if those settings could be stored, irrespectively of where the file currently resides. That is, best it would be, if the source-code itself could be changed ... maybe by adding another module?
One of the several ws is a form; when the user saves it, all other ws are deleted and the wb is saved as a new file name. (Need to retain other macros for future functionality, seems easiest to just delete the unneeded sheets).
Is their a way to modify the sheet reference from "menu" to "sheet-name" (will be a constant). Because it is likely that additional sheets will be added in the future to this new wb, I'd like for it to open to a specific ws.
As my VBA skills are "in development" (basement level, just now), please provide a complete answer (assuming this can be done).
I am trying to create a new sheet from an existing sheet. I only need to copy the sheets and not the code from the original sheet. But, when I copy the first sheet the code module also gets copied to this new sheet.
What i have at the moment is a module that contains code where i call a different module that i use as a procedure.
Module1
Code: If Sheet1.Range("C4").Value < Sheet1.Range("A2").Value Then If Sheet1.Range("K4") = "" Then MsgBox "Please check 06:00 tasks not done yet!" Cell = "Range(" & Chr(34) & "F4" & Chr(34) & ")" If Sheet1.Range("C4") + 0.042 < Sheet1.Range("A2") Then Run "EmailProSheet" End If End If End If
EmailProSheet is what i call but now i want to use the variable "Cell" in the procedure as well?
Module3
Code: MsgBox Cell Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) On Error Resume Next
[Code]........
As it is now everything is working fine but does not return a value in "Cell" if the procedure is called. Is there another way?
I have a workbook which I regularly upload that cannot have macros within it; however, to update and process the data, I must utilize VBA Code.
I tried to work around this by storing my macros in a module in another workbook. My process is to have the VBA Code Module from the other workbook open and have the active workbook be the one I want to change, then I run the VBA Code from the other workbook.
This used to work. However, I am recently getting problems with the Code not running correctly. Sometimes it only runs the code if the affected cells are not hidden; other times it will not run the code at all!
I have written some code to search through excel sheets and return the values it finds. The code is written in a module, and when I run it by clicking the play button at the top of the VB editor it works perfectly.
However I have noticed that I need to link it to a button (on_Click) in sheet1, I have tried copying the code into the button sub, it throws up an error:
"Activate method of Range class failed"
Can anyone tell me why this code would work from its module and not when placed in the worksheet (the cells being activated are not empty).
I have some code in which I need to pass the value of "j" from one module to another. "j" is declared in Sheet1 (Data) under the Microsoft Excel Objects.
I am trying to pass a variable called "Filter" from a Private Sub to a Module but keeping coming up with a zero value in the Module. I tried to make the variable Global but that didn't seem to work.
I have been struggling with a problem passing a small array to be used in a form and I hope that somebody can help me. I cannot get the array into the form.
In the main module code I have an array containing information on a book reference:
Private Function PresentForm1(ByRef iID() As String, sBookRef() As String) As Boolean Dim iCounter As Integer For iCounter = LBound(iID) To UBound(iID) Form1.ListBox1.AddItem iID(iCounter) Next Form1.ListBox1.Selected(0) = True
For iCounter = 0 To 2 MsgBox sBookRef(iCounter) ' This bit works fine Next iCounter
I recorded a macro that finds a non-blank cell in a table (always in A25:H39), populates it with values from another tab, prints it, copies it into another worksheet and clears the contents of the form but it's painfully slow. take a look at it to see if it could be modified to run faster?
VB: Sheets("Cash Form").Select Dim lastrow As Long, nextrow As Long lastrow = Sheet12.Cells(Rows.Count, "A").End(xlUp).Row
I want to delete the contents of every cell without deleting any code from my module. The reason I ask is, I'm reading from a text file into excel.
I want to run my code to read text into excel one time through. Then i want to delete all the text, make some alterations to my code, and run the code again. That way each time the worksheet is fresh and clear before i run the code.
Can I place userform event handling within the code module where the rest of my program resides or does it have to go in the code module that is attached to the userform?