プロが教える店舗&オフィスのセキュリティ対策術

よろしくお願いします。
IEにエクセルファイルを表示して、それを拡大、縮小ができるようにしたいです。
私が考えたのは、VB Scriptを使う方法で、
まずHTMLファイルを起動するとエクセルファイルをIEで表示させ、
次にそれを拡大縮小させようとしたのですがうまくいかず、
次にやってみたのは、
同様にエクセルファイルをIEで表示させた後、
さらに別のエクセルファイルを非表示で読み込み、
そのファイルにあるマクロを呼び、そのマクロで拡大や縮小をする方法です。
しかしそれもどうもうまくいきません。
VB Scriptでマクロを呼ぶことは出来ているのですが、
オブジェクトの指定がうまくいってないのでしょうか、
正常に動作しません。


マクロは以下のとおりです。
'-----------------------------------------------
Public Sub zoomzoom(b As Long)
ActiveWindow.zoom = b

End Sub
'-----------------------------------------------
Public Sub protect()
ActiveSheet.protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
'-----------------------------------------------
Public Sub message()
MsgBox "OK"
End Sub
'-----------------------------------------------


最終的に、エクセルのファイルを、外部から値を渡してその倍率でブラウザに表示させる、ということができれば別にVB Scriptでなくてもかまいません。
なにか良い方法がありましたら教えてください。

A 回答 (1件)

ZOOMはWINDOWオブジェクトに行わなければならいない事は、わかっていると思いますが、、、



EXCEL内部ではなく、IE内部に派生させたBOOKに対しては制限が発生します。
IE内部のBOOKがEXCELとのパイプがつながっている時に、WINDOWオブジェクトを取得しなければなりません。
そのタイミングは、BOOKを持ったIEがアクティブな時だけです。
なのでその瞬間にActiveWindowを取得し、変数に保持しておくことで、WINDOWに対するメソッドが有効になります。

サンプルの注意事項として、、、
>  objExplorer.Visible = True
>  DoEvents
>  Set objWin = objBook.Parent.ActiveWindow
の部分をステップ実行で行うと、IEでなくVBがアクティブになってしまい、アクティブウィンドウを取得できません。

VBサンプルです
Sub Main()
  Dim objExplorer As Object
  Dim objBook   As Object
  Dim objWin   As Object
  
  Set objExplorer = CreateObject("InternetExplorer.Application")
  objExplorer.Navigate "c:\Test.xls"
  
  Do
    DoEvents
  Loop While objExplorer.busy
  
  Set objBook = objExplorer.Document
  
  objExplorer.Visible = True
  DoEvents
  Set objWin = objBook.Parent.ActiveWindow
  
  On Error GoTo PGMEND
  Do
    objWin.Zoom = InputBox("倍率指定 エラーになるような入力をすると終われます。", "開いたIE内のEXCEL倍率変更サンプル")
  Loop
  
PGMEND:
  On Error Resume Next
  objExplorer.Quit
  Set objBook = Nothing
  Set objWin = Nothing
  Set objExplorer = Nothing
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!