Hello,
this is a very basic question, I am sorry to ask. I have created a macro in excel that I want to run in the current worksheet that is selected. How do I do this? For example, I have a sortZip Macro that I want to run on several worksheets when I hit the RUN button but it only works on the worksheet that I originally created the macro on.
I would really appreciate your advice on this!!! - Please :D
Code is:
Sub SortZip()
'
' SortZip Macro
'
'
ActiveWorkbook.Worksheets("GilbertApril09").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("GilbertApril09").Sort.SortFields.Add Key:=Range( _
"H2:H390"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("GilbertApril09").Sort.SortFields.Add Key:=Range( _
"L2:L390"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("GilbertApril09").Sort
.SetRange Range("A1:L390")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
System Configuration: Windows Vista Internet Explorer 7.0
One thing I noticed is you may have to have ActiveSheet proceed each method.
As an example, here's a short macro that saves the data from each cell in row H into a word document.
The macro is saved in an empty Excel file and it works for any Excel file loaded (assuming the empty Excel file with the macro is also loaded).
Without ActiveSheet preceeding things like Range("H" & i).Copy, the macro will try to do stuff with the Empty Excel file that has the macro.
Sub saveToWord
Dim I As Integer
Dim finalRow as Integer
Dim appWD As Object
Dim myString as String
Dim numberOne as String
Dim numberTwo as Strng
Dim myFilename As String
' Create a new instance of Word & make it visible
Set appWD = CreateObject("Word.Application")
appWD.Visible = True
'Find the last row with data in the database
finalRow = ActiveSheet.Range("A9999").End(xlUp).Row
For I = 2 To finalRow
myString = ActiveSheet.Range("a" & i).Value
' these two cells are both alphanumeric cells; first two characters are always numbers
numberOne = Left(ActiveSheet.Range("b" & i).Value, 2)
numberTwo = Left(ActiveSheet.Range("c" & i).Value, 2)
' Build the unique filename.
' In my Excel file these three elements are sufficient to make the filename unique
myFilename = myString & " " & numberOne & " " & numberTwo
' We want to put the data from cell H into a word doc
ActiveSheet.Range("H" & i).Copy
' Tell Word to create a new document
appWD.Documents.Add
' Tell Word to paste the contents of the clipboard into the new document
appWD.Selection.Paste
' Save the new document with the filename and close the word document
appWD.ActiveDocument.SaveAs filename:= myFilename
appWD.ActiveDocument.Close
Next i
' Close the Word application
appWD.Quit
End Sub
Thanks for your reply but this doesn't help me to run the macro on ANY future sheets. I don't want to copy the module each time, if that's what you are implying. The names of the worksheets will change frequently so I want to be able to click on any worksheet and run the Macro. Thanks again.
aquarelle
Posts7181Registration dateSaturday April 7, 2007StatusModeratorLast seenFebruary 14, 2026491 Jul 13, 2009 at 07:14 AM
Hi,
You have to put the macro into the personal.xls Workbook after that this wil run on any workbooks and worksheets.
Best regards
Oct 21, 2015 at 06:07 PM
May 18, 2016 at 03:31 PM