Google 網路論壇不再支援新的 Usenet 貼文或訂閱項目,但過往內容仍可供查看。

call code for all sheets

瀏覽次數:1 次
跳到第一則未讀訊息

rwnelson

未讀,
2006年4月3日 下午3:41:232006/4/3
收件者:
Through browsing this group, I have been able to apply code to all the
sheets in my workbook with the following test code.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$E$2" Then Exit Sub

Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Activate
sh.Range("G2") = "test worked"
Next

End Sub
'--------------------------------------------------------------------------------------------

Is there any way to call a sub to all worksheets. I've tried
replaceing the SH.RANGE line with CALL TEST and it did not apply it to
all sheets. I've tried using WITH statements as follows:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$E$2" Then Exit Sub

Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Activate
with sh
call test
end with
Next

End Sub

This did not work either. Any suggestions?

Jim Thomlinson

未讀,
2006年4月3日 下午3:51:032006/4/3
收件者:
sh is your worksheet object, but call test needs to know which sheet. Try this

Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Activate
with sh

call test(sh)
end with
Next sh

Sub Test(sh as worksheet)
msgbox sh.name
end sub
--
HTH...

Jim Thomlinson

rwnelson

未讀,
2006年4月3日 下午6:35:592006/4/3
收件者:
Thank you for your response. I put in the code and got the message box
on each sheet that stated the sheet name but when I tried to put in
something like range("G2") = "test worked" - only sheet 1 received the
changes, sheets 2 and 3 did not. Am I missing something? I tried the
two codes below.

Sub Test(sh As Worksheet)
MsgBox sh.Name


Range("G2") = "test worked"

End Sub
'__________________________

Sub Test(sh As Worksheet)


Range("G2") = "test worked"

End Sub

dok112

未讀,
2006年4月3日 晚上7:00:052006/4/3
收件者:

You need to tell it to run it on each sheet. your current macro is only
set for the active sheet.

Yours:


Sub Test(sh As Worksheet)
Range("G2") = "test worked"
End Sub

Correct:
Sub test()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Range("G2") = "test worked"
Next
End Sub


--
dok112
------------------------------------------------------------------------
dok112's Profile: http://www.excelforum.com/member.php?action=getinfo&userid=10581
View this thread: http://www.excelforum.com/showthread.php?threadid=529351

Jim Thomlinson

未讀,
2006年4月3日 晚上7:13:012006/4/3
收件者:
Unless otherwise specified code always executes on the active sheet. That
being the case, the only thing you are missing is a reference to sh. Try
this...

Sub Test(sh As Worksheet)
sh.Range("G2") = "test worked"
End Sub

--
HTH...

Jim Thomlinson

rwnelson

未讀,
2006年4月3日 晚上7:19:332006/4/3
收件者:
Thank you all. Worked perfectly.

0 則新訊息