VBScript Event Sink Not Firing

A

Alex Turner

Anyone knows why this does not work - i.e. the even sink
excel_SheetChange never fires?

Dim myExcel,myWorkbook,mySheet

Set myExcel=WScript.CreateObject("Excel.Application","excel_")

Set myWorkbook=myExcel.Workbooks.Add()
Set mySheet=myWorkbook.Sheets(1)
myExcel.Visible=TRUE

myExcel.EnableEvents=TRUE

While myExcel.Visible
WScript.Sleep(100)
Wend

Sub excel_SheetChange(ByVal Sh, ByVal Target)
WScript.Echo "Sheet Change: Sheet=" & Sh.Name & ", Range=" &
Target.Row & "," & Target.Column
End Sub

Any help welcome. If I get this to work I'll be posting about it on my
blog. I've been wanting to sink Excel events to vbscript for ages and
just don't seem to be able to manage :(

Thanks!

AJ
 
J

Joel

1) Make sure the worksheet_change function is on the VBA sheet where you want
it to work. Work_sheet change fucntion only works on one sheet
2) Worksheet_change get only one parameter, not two
3) To get the sheetname use activesheet

Sub worksheet_Change(ByVal Target As Range)
MsgBox "Sheet Change: Sheet=" & ActiveSheet.Name & _
", Range=" & Target.Row & "," & Target.Column
End Sub
 
R

Robert Bruce

Yn newyddion: (e-mail address removed),
Roedd Alex Turner said:
Anyone knows why this does not work - i.e. the even sink
excel_SheetChange never fires?

VBScript supports only late binding. In order to sink COM events you need to
early bind and use the WithEvents declaration in a class module.

Rob
 
A

Alex Turner

1) Make sure the worksheet_change function is on the VBA sheet where you
want it to work. Work_sheet change fucntion only works on one sheet 2)
Worksheet_change get only one parameter, not two 3) To get the sheetname
use activesheet

Sub worksheet_Change(ByVal Target As Range)
MsgBox "Sheet Change: Sheet=" & ActiveSheet.Name & _
", Range=" & Target.Row & "," & Target.Column
End Sub


Thanks - but I am vbscript not VBA. You're right though - that is how to
do it in VBA.

Cheers - AJ
 
A

Alex Turner

Yn newyddion: (e-mail address removed), Roedd Alex Turner

VBScript supports only late binding. In order to sink COM events you
need to early bind and use the WithEvents declaration in a class module.

Rob

Thanks Rob for taking the time to reply.

I think you'll find that what you've said is not actually try. See
WScript.CreateObject and WScript.ConnectObject. There seems something
different about Excel it is definitely possible to sink events to
VBScript with other objects, like IE etc.

Cheers - AJ
 
R

Robert Bruce

Yn newyddion: (e-mail address removed),
Roedd Alex Turner said:
I think you'll find that what you've said is not actually try. See
WScript.CreateObject and WScript.ConnectObject. There seems something
different about Excel it is definitely possible to sink events to
VBScript with other objects, like IE etc.

Sorry Alex. You're right and I;m wrong.

Rob
 
P

papou

Hello Alex

Not a VBScript expert and probably not to be considered as an excel "guru".
Nevertheless I would suggest that you can hardly fire your sub to run a
workbook event procedure (Workbook_SheetChange in your case) from an Excel
application object, since no event procedure is present in the workbook
(remember you are creating a new workbook).
The only possible alternative I can see is to create, via your script, the
event procedure in the new workbook.

HTH
Cordially
Pascal
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top