Report

How To Specify Macro for Current Active Sheet [Solved]

Ask a question seo5906 - Latest answer on Sep 16, 2016 03:05AM
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
See more 
Helpful
+48
moins plus
Very Easy!

Make a "find and replace" in your module, change every

Set shtJT = ActiveWorkbook.Sheets("xxxxx")

to the following:

Set shtJT = ActiveWorkbook.ActiveSheet

done.

Tony
Carol D- Oct 21, 2015 06:07PM
thank you!! As usual, the simple solution is the best solution.
Reply
Chris- May 18, 2016 03:31PM
This is perfect. Thank you so much!!
Reply
DOn2- Jul 24, 2016 03:24PM
Thanks alot
Reply
Add comment
Helpful
+15
moins plus
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
Add comment
Helpful
+9
moins plus
There's no need for the .name part, just ActiveSheet works fine in Excel 2007.
Add comment
Helpful
+8
moins plus
Hi,
Insert a module, cut and past your macro in it.
Best regards
Add comment
Helpful
+5
moins plus
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 7168Posts dimanche 8 avril 2007Registration date ModeratorStatus April 16, 2016 Last seen - Jul 13, 2009 07:14AM
Hi,
You have to put the macro into the personal.xls Workbook after that this wil run on any workbooks and worksheets.
Best regards
Reply
Add comment
Helpful
+5
moins plus
Maybe ActiveSheet.Name
Add comment
Helpful
+0
moins plus
Hi seo5906, did you find any solution to this? I am facing the same issue. I have to copy data from one fixed specified sheet and paste them to different current sheets every time I run the macro.

e.g.
Copy from sheet 1 (fixed sheet) and paste to sheet 2 (current sheet)
Copy from sheet 1 (fixed sheet) and paste to sheet 3 (current sheet)
Copy from sheet 1 (fixed sheet) and paste to sheet 4 (current sheet)

The issue that I am facing is - if I create the macro on sheet 2, running the macro pastes the data to sheet 2 everytime, no matter whatever be the current sheet.

Thnx
Add comment
Helpful
+0
moins plus
This is an example of a macro I created using the active sheet and active cell properties. It copies the date from the previous cell.

Sub copySameDate()
Debug.Print ActiveCell.Column
Debug.Print ActiveCell.Row

Dim activeRow As Integer
Dim activeColumn As Integer
Dim previousRow As Integer
Dim nextColumn As Integer
Dim wksheet As Worksheet

Set wksheet = ActiveWorkbook.ActiveSheet

activeRow = ActiveCell.Row
activeColumn = ActiveCell.Column
previousRow = activeRow - 1
nextColumn = activeColumn + 1

wksheet.Range(ActiveCell.Address) = wksheet.Cells(previousRow, activeColumn)
wksheet.Cells(activeRow, nextColumn).Select

End Sub

This works on every sheet of my workbook. I use it for data entry.
vcoolio 785Posts Thursday July 24, 2014Registration date ModeratorStatus September 19, 2016 Last seen - Sep 16, 2016 03:05AM
Thanks for sharing this with us Heather.
Reply
Add comment

Members get more answers than anonymous users.

Being a member gives you detailed monitoring of your requests.

Being a member gives you additional options.

Not a member yet?

sign-up, it takes less than a minute and it's free!