
お世話になります
親ウインドの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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) リストボックスに表示されたファイルを削除したい 1 2023/04/19 12:02
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
このQ&Aを見た人はこんなQ&Aも見ています
-
HTAのウィンドウを閉じるには・・。
ホームページ作成・プログラミング
-
VBからhtaファイルを開くには?
Visual Basic(VBA)
-
HTAで、こんなボタンが作りたい。
その他(プログラミング・Web制作)
-
-
4
HTA + VBScript (+ Javascript)でコントロールボックスを制御できますか?
Visual Basic(VBA)
-
5
htaでVBSのソースを書いたらエラーを返します
その他(プログラミング・Web制作)
-
6
vbscriptで時計を作りたい
Visual Basic(VBA)
-
7
VBSから別のVBS起動するとき変数を渡したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETのグラフィック描画で困...
-
PL/SQLのプロシージャ間でカー...
-
整数を二つ読み込み、それらの...
-
パーソナルXLSBのfuctionを呼び...
-
VB初心者の私に教えてください!
-
VB6のFriendについて
-
変数を複数のモジュール間で共...
-
定数を構造体で・・・
-
BMPファイルを作成し保存
-
VBA public変数はどのようなこ...
-
ベンチマークの実行結果の表示...
-
プログラムにくわしいかた教え...
-
ピクチャボックスのサイズを状...
-
[Excel2000]auto_closeを止めさ...
-
整数かどうかチェックする
-
C#のループでtextboxに値を入れ...
-
Verilog-HDLによる設計において
-
サンプルプログラムをコンパイ...
-
ユーザーフォームへのデータ入...
-
RichTextBoxで指定行の色を自動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パーソナルXLSBのfuctionを呼び...
-
【VB6.0】 あるフォームから他...
-
プロシージャまたは関数の引数...
-
定数を構造体で・・・
-
PL/SQLのプロシージャ間でカー...
-
HTML + VBScript で Sleep でき...
-
【HTML、VBScript】HTAアプリケ...
-
変数の宣言はすべきでしょうか...
-
Excel VBA カーソルを当てた際...
-
subを連続で実行する
-
VB2010からPROCEDUREを実行でエ...
-
VB6のFriendについて
-
Callで呼び出したプロシージャ...
-
ExcelのVBA。Staticな変数について
-
整数を二つ読み込み、それらの...
-
プログラムの素朴な質問です 分...
-
ArrayListに格納したクラス内の...
-
プロシージャを呼び出したプロ...
-
【VBScript】変数のスコープ
-
VBA public変数はどのようなこ...
おすすめ情報