SQLの窓

2013年12月10日


IE11 でVBScript が動作しないので、x-ua-compatible を使用して Excel(Excel.Application) の処理を検証

結構重要な情報のはずなのですが、IE11 関連の正式ドキュメントに詳しい記載は無く、検索しても Stack Overflow の記事しか手に入りません。でも、内容は単純で試せば良いし、Microsoft としてはあやふやにしたい部分が多い、あるいはできるだけ話題を避けたいタブーなのかもしれません。

現実問題、イントラネットで VBScript を使う場面はかなりあるはずで、特に Excel を使った連携プレイは多くの業務を円滑に進める基盤となっている可能性もあります。それと、IE11 は完全に VBScript を拒絶していますが、IE10 だからいいというわけでも無く、JavaScript や HTML での動作を確認したい場合は IE9 として使う事をお勧めします。

実際 IE10 になったとたん動かなくなったシステムの為、IE9 に戻した経緯があります。とは言え、それは10年前に作られたシステムなので、最近のものであれば、IE10 として動作はすると思います。

いずれにしても、XP が終わり、IE11 が発進した事によって、イントラネットシステムの管理者または担当者はとても頭が痛いと思います。

以下のコードは、イントラネットで、安全だとマークされていない ActiveX コントロールを使用可能にした Excel の処理のテストコードです。Windows7 + IE11 + Office2012 で動作しました。おもしろいのは、VBScript で オブジェクトを console.dir できるところですが、あまり有用な情報は表示されませんでした。なんだか『とりあえず』感が満載でした。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="IE=9">
<script language="VBScript">

Const xlMaximized = -4137

Function test() 

	alert("OK")
	console.log( "OK" )

	Dim MyExcel

	Set MyExcel = new CExcel
	Set Workbook = MyExcel.Create("c:\test.xlsx")
	Workbook.ActiveSheet.Cells(2, 1) = "IE11+Excelです"
	Workbook.Save

	console.dir( MyExcel )
	console.dir( Workbook )

	MyExcel.Quit
	MyExcel.Load( "c:\test.xlsx" )

	Set MyExcel = Nothing

End Function

Class CExcel

	Public App
	Public WshShell
	Public ErrDescription
	Private WorkBook
	Public CurBook

' ************************************************
' インスタンスが作成されたときの処理
' ************************************************
	Private Sub Class_Initialize()

		Call InitSetting()
		console.log( "Class_Initialize" )

	End Sub

' ************************************************
' インスタンスが終了したときの処理
' ( Set インタンス変数 = Nothing で発生 )
' ************************************************
	Private Sub Class_Terminate()

		Call Quit()
		console.log( "Class_Terminate" )

	End Sub

' ************************************************
' 初期処理
' ************************************************
	Public Default Function InitSetting()

		if IsEmpty( App ) then
			Set App = CreateObject("Excel.Application")
		end if 
		if IsEmpty( WshShell ) then
			Set WshShell = CreateObject("WScript.Shell")
		end if 

		' ユーザーに入力を促すメッセージを表示させないようにする
		App.DisplayAlerts = False

		Set CurBook = Nothing

	end function

' ************************************************
' 終了
' ************************************************
	Public Function Quit()

		If not IsEmpty( App ) Then
			For Each Workbook In App.Workbooks
				' 全てのブックを保存した事にする
				WorkBook.Saved = True
			Next
			App.Quit
			Set App = Nothing
			App = Empty
			Set CurBook = Nothing
		End If

	End Function

' ************************************************
' 表示・非表示
' ************************************************
	Public Property Let Visible( bFlg )
		App.Visible = bFlg
	End Property 
	Public Property Get Visible
		Visible = App.Visible
	End Property

' ************************************************
' 開く
' ************************************************
	Public Function Open( strPath )

		on error resume next
		Set Open = App.Workbooks.Open(strPath)
		if Err.Number <> 0 then
			Set Open = Nothing
			ErrDescription = Err.Description
			Exit Function
		end if
		on error goto 0
		Set CurBook = Open

		' アクティブなウィンドウを最大化
		App.ActiveWindow.WindowState = xlMaximized

	End Function

' ************************************************
' 新規ブック作成
' ************************************************
	Public Function Create( strPath )

		Dim nBooks

		App.Workbooks.Add
		nBooks = App.Workbooks.Count
		Set Create = App.Workbooks( nBooks )
		Set CurBook = Create
		CurBook.Activate

		' アクティブなウィンドウを最大化
		App.ActiveWindow.WindowState = xlMaximized

		if strPath <> "" then
			on error resume next
			CurBook.SaveAs( strPath )
			if Err.Number <> 0 then
				MsgBox( Err.Description )
				Exit Function
			end if
			on error goto 0
		end if

	End Function

' ************************************************
' 閉じる
' ************************************************
	Public Function Close( MyBook )

		if IsObject( MyBook ) then
			MyBook.Saved = True
			MyBook.Close
			Set MyBook = Nothing
			MyBook = Empty
		else
			if CurBook is Nothing then
			else
				CurBook.Saved = True
				CurBook.Close
				Set CurBook = Nothing
			end if
		end if

	End Function

' ******************************************************
' 上書き保存
' ******************************************************
	Function Save( MyBook )

		if IsObject( MyBook ) then
			MyBook.Save
		else
			CurBook.Save
		end if

	End Function

' ******************************************************
' 名前を付けて保存
' ******************************************************
	Function SaveAs( MyBook, strPath )

		if IsObject( MyBook ) then
			MyBook.SaveAs strPath
		else
			CurBook.SaveAs strPath
		end if

	End Function

' ******************************************************
' LOAD
' ******************************************************
	Function Load( strPath )

		if not IsEmpty( App ) then
			MsgBox( "Excel をロードする前に、Quitを実行して下さい   " )
			Exit Function
		end if

		Call WshShell.Run( _
			"RunDLL32.EXE shell32.dll,ShellExec_RunDLL " & _
			strPath _
		)

	End Function

End Class

</script>
</head>
<body>

<input type="button" value="実行" onclick="Call test()" language="VBScript">

</body>
</html>



【IEの最新記事】
posted by lightbox at 2013-12-10 17:23 | IE | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり