
お世話になります
親ウインドのHTAアプリケーション内にボタンを設置し、そのボタンを押すと”新たにHTAファイルを作成し”別ウインドとして生成したHTAアプリケーション画面を表示するようにしたいのです。(表示後は生成したHTAアプリケーションは削除する)
これ自体は、実現できたのですが、いくつか疑問点がありましたので、教えていただきたいです。
長くなるので、先に質問だけ記載します。1つでも良いので教えていただけると嬉しいです。
コード①の質問、終了していない文字列型の定数と表示されるのはなぜか?
コード②の質問、scriptの文字列が入らないように分割して変数に入れるとエラーが出ないのはなぜか?
コード③の質問、タグを記載したsample2.htaを生成し、runメソッドで起動したが、runメソッドの後にdeletefileメソッドを行なうと、inputタグを記載したにもかかわらず、テキストボックスが表示されないのはなぜか?
コード④の質問、sample2.htaを削除する手順を別プロシージャに分けたが、Callメソッドではテキストボックスが生成されず、SetTimeOutメソッドでは生成されるのは何故か?
(※④のコードで1秒後にdelfileプロシージャが呼び出されるわけではないのはわかっていますので、SetTimeOutメソッドの誤用は指摘しないで頂きたいです。)
以下、ボタンを押しonclickイベントで呼び出されるプロシージャのみ記載します。
①最初に書いたコード、「終了していない文字列型の定数」エラーが出るのは何故?
sub sample
set fso = CreateObject("Scripting.FileSystemObject")
set sh = CreateObject("Wscript.Shell")
set Mhta = fso.opentextfile("C:\sample2.hta",2,true)
Mhta.Writeline "<body><script type=""text/vbscript""></script><input type=""text""></body>"
Mhta.close
sh.run "mshta.exe C:\sample2.hta"
End sub
②Writelineの内容を試行錯誤した結果、scriptと記載が入っているとNGなようなので、scriptという文字列が入らないように変数に分割して結合。エラーが出ないので上の理論は合ってる?
sub sample
set fso = CreateObject("Scripting.FileSystemObject")
set sh = CreateObject("Wscript.Shell")
set Mhta = fso.opentextfile("C:\sample2.hta",2,true)
a = "<body><scrip"
b = "t type=""text/vbscrip"
c = "t""></scrip"
d = "t><input type=""text""></body>"
Mhta.Writeline a&b&c&d
Mhta.close
sh.run "mshta.exe C:\sample2.hta"
end sub
③ボタンクリックにてsample2.htaを表示後、生成したsample2.htaファイルを削除したいので、 end subの1行前に以下のコードを追記、何故かsample2.htaにテキストボックスが表示されない
fso.deletefile "C:\sample2.hta"
④起動前にファイルが削除されてしまっているのかと思い、削除を別プロシージャに分けたところ、callメソッドではテキストボックスが生成されないが、SetTimeOutでは生成されるのはなぜか
fso.deletefile "C:\sample2.hta" の代わりに、delfileプロシージャを呼び出す2例
(ⅰ) Callメソッドを用いた場合(sample2.htaウインドにはテキストボックスは表示されない)
Call delfile
end sub
sub delfile
set fso = CreateObject("Scripting.FileSystemObject")
fso.deletefile "C:\sample2.hta"
set fso = nothing
end sub
(ⅱ)setTimeOutを用いた場合(sample2.htaウインドにはテキストボックスが表示される)
setTimeOut "delfile",1000
end sub
sub delfile
set fso = CreateObject("Scripting.FileSystemObject")
fso.deletefile "C:\sample2.hta"
set fso = nothing
end sub
以上です、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
①②について、
</script>という文字があるとダメみたいですね。たぶんsample1.htaの冒頭の<script ~>に対応する閉じタグと誤認識されるではないかと。
スクリプトを書くエリアの部分を以下にしたらOKでした。
-------------------
<html>
<head>
<script language="vbscript"> ' ここは元のままでも良いかも
<!-- ' htmlのコメント開始の記号を追加する
ここにvbscriptを書く
--> ' htmlのコメント終了の記号を追加する
</script>
</head>
<body>
以下略
-----------------------------
③④について
sh.runの第三引数をtrueにすると起動したプログラム(mshta.exe)が終了するまで、スクリプトの実行が停止するので、その直後でファイル削除してもイケます。
詳細はMSDNを参照してくだい(https://msdn.microsoft.com/ja-jp/library/cc36442 …)
-----------------------------
sh.run "mshta.exe C:\sample2.hta", 1, true
fso.deletefile "C:\sample2.hta"
-----------------------------
ご回答有り難うございます。
HTAは寛容性が高い分、<!-- -->のように明示的に記載しないといけないのですね。
これで見栄えの悪いコードを書かずに済みそうです、ありがとうございました。
③④については、やはり実行速度の差というところでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBからhtaファイルを開くには?
Visual Basic(VBA)
-
HTAのウィンドウを閉じるには・・。
ホームページ作成・プログラミング
-
HTAで、こんなボタンが作りたい。
その他(プログラミング・Web制作)
-
-
4
HTA + VBScript (+ Javascript)でコントロールボックスを制御できますか?
Visual Basic(VBA)
-
5
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
6
DoEvents
その他(Microsoft Office)
-
7
vbscriptで時計を作りたい
Visual Basic(VBA)
-
8
vbscriptで、ファイル選択ダイアログを前面に出したい。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
【マクロ】並び替えの範囲が、...
-
vba textboxへの入力について教...
-
ワードの図形にマクロを登録で...
-
エクエルのVBAコードについて教...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Excel VBA 選択範囲の罫線色の...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】開いているブックの...
-
えくせるのVBAコードについて教...
-
VBAの「To」という語句について
-
VB.net 文字列から日付型へ変更...
-
【ExcelVBA】5万行以上のデー...
-
VBA ユーザーフォーム ボタンク...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プロシージャまたは関数の引数...
-
PL/SQLのプロシージャ間でカー...
-
【HTML、VBScript】HTAアプリケ...
-
【VB6.0】 あるフォームから他...
-
パーソナルXLSBのfuctionを呼び...
-
VBScriptのSubって必要?
-
ExcelのVBA。Staticな変数について
-
VB6のFriendについて
-
定数を構造体で・・・
-
【VBScript】変数のスコープ
-
HTML + VBScript で Sleep でき...
-
excellvbaで
-
VB2010からPROCEDUREを実行でエ...
-
サブルーチンの処理
-
ASPの実行中にJavaScriptプロシ...
-
プロシージャを呼び出したプロ...
-
プログラムの素朴な質問です 分...
-
ExcelVBAイベントでTrueにしたf...
-
Excel VBA カーソルを当てた際...
-
VBA public変数はどのようなこ...
おすすめ情報