VBSで便利なプログラムを作れスレ

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2007/02/03(土) 17:49:47
素人丸出しお粗末で遅くてもいいので
いますぐ使えるちょっぴり便利プログラムを作れ

(例○○を自動処理してくれるプログラム)
2011/06/23(木) 22:32:18.65
凄い違和感あったんだけど納得
2011/06/23(木) 23:57:00.51
>>433
やっぱ許可貰ってんじゃん
ま、当たり前だよなびっくりした
2011/06/24(金) 07:22:39.31
久しぶりに酷い自演をみた
2011/06/24(金) 10:19:04.37
>repText = "$2"
この意味不明っぷりがすごいね
2011/06/24(金) 14:11:47.65
突っ込む所はそこじゃないと思うがw

Echoのとことか、パターン自体に突っ込めよ
2011/06/24(金) 14:15:34.45
>>440
> objRep.Pattern = "T..t"

感動的なパターンだなw
2011/06/24(金) 19:23:21.29
>>437
ドリルの刑
ttp://www.amazon.co.jp/dp/4774145092

姉妹編と違って表紙にドリルが載っていないのがイマイチだけど
2011/06/25(土) 00:10:36.15
>>437も恥ずかしくて出れこれないんだから、いい加減に許してやれよ
2011/06/25(土) 13:11:24.67
>>443
そんなに悔しかったの?
2011/06/29(水) 17:41:46.87
さすが VBSなんていう時代遅れツール使ってるスレはレベルが低い
2011/07/02(土) 08:25:05.28

ゴミみたいな奴だな
2011/08/28(日) 14:30:43.29
文字を文字コードの数値に変換して出力したいんだけど誰か助けて
2011/08/28(日) 20:10:45.21
asc("a")
2011/09/01(木) 09:14:32.07
何その顔文字、ふざけてるの
2011/09/01(木) 10:09:24.83
("з")
456デフォルトの名無しさん
垢版 |
2011/11/20(日) 14:29:12.95
(・∀・)
2011/11/20(日) 15:33:06.16
VBScriptって、1ヶ月もあれば極められるよね

あとはCOMを何処まで使いこなせるかだけ
2011/11/21(月) 17:49:41.03
そんな時期もありました
2012/02/10(金) 21:02:00.29
例えば、notepad.exeを起動するvbsは?
2012/02/10(金) 21:08:54.09
>>459
Set shell = CreateObject("WScript.Shell")
shell.Run "notepad"
461459
垢版 |
2012/02/10(金) 22:23:36.81
>460
分かりました。ありがとう

ところで、Option Explicitを書くとshellが宣言されてないと起こられますが
この場合、shellの型は何ですか?
あるいは、Option Explicitを書くべきじゃない?
2012/02/10(金) 22:46:07.22
>>461
Object 型
VBScript では VB や VBA と違い、宣言で型を記述しないのであまり意識はしないが、
Object 型だけは代入時に Set を必要とするので認識は必要
あと、Option Explicit は書いた方がよい

Option Explicit
Dim shell
Set shell = CreateObject("WScript.Shell")
shell.Run "notepad"
463459
垢版 |
2012/02/11(土) 07:35:54.95
>462
ありがとうございました
2012/02/12(日) 01:57:20.27
Option Explicitはtypo無くしてくれるからな
昔のソース改修でstrPrinterとstrPrnterで1週間ぐらいハマった記憶
今なら真っ先に疑うけど当時はまだ慣れてなくて泣いたなぁ
2012/03/10(土) 23:34:01.81
>>462
CreateObject()の戻り値がObject型ってだけで変数に型は無いよ
Object型を変数に代入するのに、Setが必要なだけ

その証拠に、
Set shell = CreateObject("WScript.Shell")
shell = 1 '変数に型は無いので、この代入は有効
shell.Run "notepad" '変数には数値型のデータが入っているので、ここでエラーが発生

細かい事だけど、知っているのと知らないのでは大違い

>>464
typoを無くす為にOption Explicitを宣言してはいけない
Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
2012/03/11(日) 04:51:38.09
> 変数に型は無いよ
ちょっとハズレ

正しくはVBSの変数の型は、無いのではなくValiant型のみというだけ
で、Valiant型は内部型が固定されていないのでどんな型の値をも代入することが可能だが
値が代入されている状態では、内部に歴とした型という概念が存在する

細かい事だけど、内部文字列型と内部数値型では、外がValiant型でも扱いが異なるので、
知っているのと知らないのでは大違い

> Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
それ、VBやVBAの場合ね
それらの場合はグローバル変数(全モジュール共通変数)とモジュール内変数の区別に役立つ
でもVBSの変数スコープには、グローバル変数、プロシージャ内変数、クラス内変数の3つがあるが
Option Explicitはこれらの区別を明確にする役目は果たさない
2012/03/11(日) 09:35:32.83
>>466
だから、違うって
全ての変数は型が無いことを保障されてるの、これをValiant型と言います
そして、型を持っているのは、データ側であって変数ではありません
変数に型がある場合は、オブジェクト型の変数に整数を代入する事は絶対に出来ません

次に、Option Explicitは、全てのスコープにDim文を強制します
VBScriptの仕様では、Dimで宣言された変数は該当スコープでのローカル変数として確実に扱われるが、Dimで宣言されない変数は、同名のグローバル変数がある場合、グローバル変数として扱われます
ようは、使うべきでないグローバル変数を誤って使う事をしない為に使われるのであって、typo問題の為に使われているのではない
考えるまでもなく、typoによって引き起こされる問題よりも、グローバル変数への不用意なアクセスによる影響の方がはるかに大きく深刻です
2012/03/11(日) 10:11:16.22
バリアントの綴りが間違ってた...
ValiantではなくVariantでした。
2012/03/11(日) 10:54:20.03
なんだ、この子全然解ってないんだね
2012/03/11(日) 11:14:12.71
>>469
そう、>>466のように変数に型があると勘違いしていると、SubやFunction、Propertyに入力されるデータの型を勝手に期待して自爆する事になるよね
特にVBScriptのClass周りには、変数に型が無い事による罠が散りばめられてるからねぇ
2012/03/11(日) 13:25:47.06
痛すぎw
2012/03/11(日) 13:38:11.81
>>471
そう、>>466は理解の薄い痛い子だね
無型の変数に内部型があると信じている辺りが痛すぎる
型を持っているのは、変数ではなく値なのにね

たぶん、VBScript以外のプログラミング言語を使った事が無いんだろうね
2012/03/11(日) 18:41:00.25
>>467
横レスだけど
ローカルとグローバルでの変数名は、設計レベルで対応すべき話では?
実際の製造(プログラミング)時はtypo対策の方が重要では

そもそも、グローバルとプロシージャレベルで同名変数使うって
どれだけ可読性の低いプログラムを書くつもりかと。
普通コーディングルールで禁止されていると思うし、自分なら禁止する

個人レベルならともかく企業でもVB系言語を使う以上、Option Explicitは
BASICを、普通の(変数宣言を強制する)プログラミング言語と
同レベルに引き上げるものだと思ってるけど

とMSX-BASIC1から入って業務でVBは2(Win版。流石にDOS版は触って無い)から
使っている年寄りとしては思う
2012/03/11(日) 18:57:57.83
QB「
2012/03/11(日) 19:15:38.79
>>473
だから、Option Explicitをつければ、コードの再利用に際して変数名に関する問題は起こらなくなるの
2012/03/11(日) 20:27:28.25
Dimで解決するだろ
2012/03/11(日) 21:49:45.91
>>476
だからソースの始めに、Option Explicitが必要なんじゃんw
2012/03/11(日) 22:27:49.57
>>477
は?
typoしないんなら必要ないだろ?

ローカルでDimし忘れたらグローバルでDimしてる変数が使われちゃうぞ
2012/03/11(日) 23:22:53.96
>>478
お前、馬鹿だろw
Option Explicitが書いてあれば、ローカルでDim宣言されている証明になるが
Option Explicitが書いてあっても、typoしていない証明にはならない
2012/03/12(月) 06:39:57.23
なんか、自分自身が勘違いしていて痛い奴だってことに気付いてない
蘊蓄野郎が一人でずっと頑張ってるなぁ
2012/03/12(月) 09:02:44.77
Option Explicitでtypo対策する奴の方がよっぽど痛いけどね
2012/03/12(月) 19:53:12.43
普通に考えて、変数名をコピペしてたらtypoなんて起きないだろ...
つーかtypoが問題になるって何十年前の開発環境だよ...
2012/03/12(月) 20:26:55.78
入力補完じゃなくてコピペって・・・・・
それこそ何十年前だよって話だなw

程度が知れてきたぜ
2012/03/12(月) 20:44:07.58
うはっ、入力補完機能のあるエディタ使ってて、変数名のtypoがプログラム制作上の重要課題ってw
あれだな、うちのメモ帳の方が、あんたの開発環境よりも上って事だなw
この10数年の間、変数名のtypoなんて起きた事ねぇもんw
2012/03/12(月) 20:56:31.62
この子、相手が一人だと思ってるのかな?
俺は変数名のtypoがプログラム制作上の重要課題なんて一言も言ってないんだが
必死になりすぎて周りの現実が見えてないんだね

大勢に嘲笑されているという現実が・・・・・
2012/03/12(月) 21:10:17.75
うはっw
とうとう、「俺はtypoなんて言ってねぇ」とか言い出しちゃいましたよ
このお方w
2012/03/12(月) 21:13:40.15
入れ食い
2012/03/12(月) 21:20:02.41
そもそもプロシージャとグローバルで名前重複なんて、可読性が低くて
絶対保守したくない類のソース。機械が読めても人が読みにくい。
Option Explicit以前にその時点で根本的に間違っていると思う。

それ以前に最近は「グローバル変数自体原則禁止、明示的に引数で渡すべき」
とか言われる事も多くて、高度情報処理試験の午前問題にもあったり。
ま、あくまで「原則」なんでグローバル変数を使わざるを得ない場合もあるが
独立性が低下するので再利用性が低下するのは避けられない。

つまりはスコープの違いをOption Explicitでどうこうして再利用性を上げようとする
のは方針自体が間違っている。

引数のオーバーヘッドに関しても昔はともかく今はPCの性能が十分高いので
高速策よりも安全策というか保守性を取る方が多いし。

VBSの場合は短い事もあり汎用的に使うfsoとかはグローバルな事も多いけど。
2012/03/12(月) 22:18:26.28
>>488
馬鹿か
なんの為のスコープ分けだ
もう一度、構造化プログラムについて習いなおせ

互いのスコープが引数と戻り値のみでのみデータの受け渡しをする限り、互いの内部の処理は気にする必要は無いの

そして、VBScriptの場合は、グローバルスコープへ直接コーディングをする可能性があるから、Option Explicitによるコードの再利用性の保障が必要なんだっつうの
2012/03/12(月) 22:31:33.94
Option Explicit「みんな!私のために争わないで!」
2012/03/13(火) 06:14:50.44
>>489
らちが明かないから何かサンプル上げて説明してみて
2012/03/13(火) 09:37:52.97
>>491
まず共通部分
<job id="main">
<script language="VBScript" src="test.vbs" />
<script language="VBScript">
fso = "Hello"
MsgBox Test() & vbCrlf & fso
</script>
</job>
2012/03/13(火) 09:39:40.86
次に、test.vbs部分Option Explicit無しバージョン
Function Test()
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
2012/03/13(火) 09:43:32.86
こいつも、test.vbsでOption Explicit有りバージョン
Option Explicit
Function Test()
Dim fso, File
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
2012/03/13(火) 21:41:15.30
散々蘊蓄垂れてこのレベルか
2012/03/13(火) 21:50:38.27
Option Explicit 云々以前の問題だな
2012/03/13(火) 21:51:41.48
なんと見苦しい負け惜しみw
2012/03/13(火) 22:25:08.04
>>493
>Option Explicit無しバージョン
Option ExplicitよりもローカルのDimが無い事の方が影響大でしょ

> ローカルDim無しバージョン
とした方がよいのでは?

別にOption Explicitによりローカル宣言とグローバル宣言の優先度が
変わったとかじゃないし

「Option Explicit」の有無「だけ」による挙動の違いを説明できないと
2012/03/13(火) 22:29:53.10
Option Explicit
Function Test()
Dim File
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function

そんだけ言うなら、このパターンでも試してみたらw
2012/03/14(水) 19:42:16.87
やれやれ、「Option Explicit」の使い方をようやく理解したか?
まあ、なんで、そのエラーが出るのか理解出来て無いってほうが濃厚だなw
なんせ、VBScriptの変数に内部型があるとか言っちゃうぐらいだからなぁw
2012/03/14(水) 19:45:33.07
自身が勘違いしていた事には気付いたが、
最初に強気で蘊蓄かましてしまった手前、
引くに引けなくなって強がりを続ける465萌え
2012/03/14(水) 20:28:49.55
>>501
ぷぷぷっ
もう、技術的な話を出来ずに口先だけかよw
「俺は、MSX-BASIC1からBASICを使ってるんだ」って言う割には大した事は無いなぁ

間違っているなら指摘しなw
2012/03/14(水) 20:47:40.14
ところで、既に>>499を提示してからでも丸一日が過ぎようとしているのに、今更、ファイルをクローズしてないとか言わないよねw
2012/03/14(水) 21:55:18.55
おーい、沢山いるはずの>>501よーい
技術的な指摘まだかーい
最低限、>>498みたいな、間抜けな指摘はすんなよーw
2012/03/14(水) 23:04:31.90
もうそろそろ飽きてきた...
MSDNからのコピペ
−−−
Option Explicit ステートメント
スクリプト内のすべての変数に対して、明示的な宣言を強制します。

解説
Option Explicit ステートメントを使用する場合は、スクリプト内の他のステートメントより前に記述する必要があります。
Option Explicit ステートメントを記述した場合、変数は、Dim、Private、Public、ReDim などの各ステートメントで明示的に宣言する必要があります。宣言されていない変数名を使うと、エラーが発生します。
−−−
以上

ソースコードに、Option Explicitが記述されていると、変数の宣言は明示的に行わなければならない
つまり、>>493は、>>494に変更しなければエラーが出て実行できない

では、>>499で、変数fsoは明示的に宣言されていないのになぜOption Explicitはエラーを出さないのか
それは、グローバル変数としてOption Explicitの効果範囲外で暗黙的に宣言されているから
つまり、ローカル変数とグローバル変数が交じり合い、スコープが明確ではなくなって全ての変数が宣言済みなのでOption Explicitはエラーを出せなかった

この結果の意味するところは、Option Explicitは、スコープがあやふやな場合には、typoを検出する事は出来ない(>>499)
逆に、Option Explicitを宣言した状態で、スコープを明確にしデバッグすれば、プロシージャの独立性を保障する事ができる(>>494)

あれだ、>>498は目の付け所は良かったが、リファレンスぐらいは読んだほうが良いってこった
2012/03/15(木) 04:54:39.64
負け犬の連投・・・
2012/03/15(木) 08:42:06.70
>>506
まだやる気かw
頑張って反論よろしくw
2012/03/17(土) 10:04:12.29
>>462
変数shellがObject型w
間違いを指摘されたら、>>466で内部文字型と内部数値型では扱いが違うとかw

つまりあれかw
MsgBox "123"+4+"5"
はエラーなんだw
なんかカッケーなw
2012/03/17(土) 14:33:29.53
こんなとこまで来ちゃうお前らの為じゃねーよ
適当にやったけど動いたからいーや的思考な
困ったくんや困ったチャンの為に書いてんだよOption Explicit
詳しい人が必ずメンテするとは限らないのがVB系の怖いとこで
2012/04/07(土) 09:29:55.75
こんなところに来ない人のための事をここに書いて意味あるんですか?
511デフォルトの名無しさん
垢版 |
2012/06/10(日) 17:05:31.39
2012/07/16(月) 00:40:56.77
今までUWSC(フリーソフト)を使っていましたが、最近、VBScriptを知り、同じような処理ができることを知りました。

VBScriptを勉強中です。
分からないことがあればよろしくね。
513デフォルトの名無しさん
垢版 |
2012/07/16(月) 01:26:02.69
だれか3000円上げるから
24平均律の鍵盤プログラム作ってくれ〜(T_T)
2012/07/16(月) 01:27:51.13
作曲するのに使います
音色はピアノ音だけでOKです
2012/07/16(月) 09:32:19.09
コンパイルしたプログラムなら3'000円でいいけど
ソース(ソース丸見えのVBS…というか鍵盤必要ならHTA)で欲しいなら150'000円
2012/07/16(月) 10:42:01.70
>>515
言葉の意味がよくわからないけど
3000円の方でお願いします
2012/07/16(月) 10:50:19.70
白鍵とか黒鍵は
ないようなもんなんで
ボタンがズラリと並んでるだけでOKです
Eの位置だけボタンにEって書いてくれたらOKです
2012/07/16(月) 19:11:52.43
よくわからんけど初音ミクじゃだめなの?
2012/07/16(月) 19:47:57.27
リアルタイムで音を確認しないと何かね……確信持てないっていうか
シーケンスでやってその日は納得いっても
次の日に聞いたらアレ?って事ばかりなんで
2012/08/05(日) 23:38:48.37
煽り潰しですね
2012/08/27(月) 21:54:39.96
知恵袋にも登録したのですが、どうしても知りたいのでご教示お願い致します。
マクロを実行して、他のファイルのマクロまで編集できますか。
いろいろグーグルで調べたのですが、どうもヒットせず実行できそうにありません。
作成したいファイルは追記します。
1.エクセルファイル内にボタンフォームを作り(このファイルを便宜上、ファイル@とする)、ボタンフォームを押すと新しいエクセルファイルが作成される(このファイルを便宜上、ファイルAとする)。
2.次にファイル@から1.とは別のボタンフォームを押すと、「挿入>図>ファイルから」と同じ要領で画像を選択でき、Aファイル内のSheet1・セルA1に画像が貼り付けられる。
3.最後にファイル@に設置した1.と2.とは別のボタンフォームを押すと、ファイルAのVBScriptにスクリプトが書き込まれる(出来ればVBScriptをパスワード保護出来れば幸いです)。
という流れをファイル@のVBScriptなり、モジュール等を使って行いたいのです。
3にあるマクロは、上書き保存ができなくなるマクロのため、1の段階で保存ができると幸いです。
また、複数ファイルを処理する必要が有るため、同一ファイル名で保存しない仕様を求めています。
2012/08/27(月) 22:31:18.85
全部出来ますよ
但し、マルチな上にスレ違いなので、具体的な説明は伏せますが
523デフォルトの名無しさん
垢版 |
2012/08/29(水) 19:05:51.32
VB・・・・・Sなのか?
2012/08/30(木) 22:38:44.70
ExcelでVBS……

ワークシートにボタンに見せかけたオブジェクトを貼り、
押すとハイパーリンクで外部のVBScriptを実行する
とかならやった事がある
2012/08/30(木) 23:09:40.69
ExcelからVBSを呼ぶだけのパターンか

俺は逆にVBSからExcel.Applicationを使って
Excelブックを操作するってことを結構やるな

「ExcelでVBS」ではなく、「Excel"を"VBSで操作」ってこった

ExcelからVBSを呼ぶくらいなら、そのVBSを標準モジュールなどに取り込んで
わざわざ外部のVBS呼ばずに内部実行するし
526デフォルトの名無しさん
垢版 |
2012/08/31(金) 10:20:07.61
ってか、VBSならふつうそうでしょ
2012/08/31(金) 10:21:36.68
だよな
>>524がなんんか面倒くさいことやってるだけで
2012/09/01(土) 22:37:19.11
一応、マクロを無効にしたExcelからでも実行できるというメリットはあるけど
2012/09/02(日) 18:43:55.29
officeのマクロはjsに移行するよ
おまえらの書いたVBSなんて保守したくないし、頼むからせめてjsで書いてくれ
2012/09/02(日) 19:19:43.98
webで使う場合はjsに軍配挙がるけど
wshやテキストエディタのマクロとかはvbsがいいな

つーかvbsの前に、jsしか使えないバカを淘汰して欲しい
vbsしか使えないバカも同じくね
2012/09/02(日) 20:05:38.74
>>529
VBSの保守をしたくないんじゃなく、VBSを保守する能力が無いの間違いだろ?
2012/09/03(月) 19:06:20.84
VBSにはプログラム言語としての長所は微塵もないよ
既に言語からもユーザーからも加齢臭とか腐敗臭とか漂わせている
533デフォルトの名無しさん
垢版 |
2012/09/03(月) 19:20:10.07
>>532
Win32 APIの呼び出しができればいんだけどね
もう絶望的かな
2012/09/04(火) 10:26:00.19
言語なんてなんでもいいよ
2012/09/23(日) 11:02:10.28
SFC miniかExcel経由で行けるけどキモいよな
しかし生のVBSからwin32api呼べたら怖くてエロサイト行けなくなる
2012/10/13(土) 09:50:15.66
いまメモ帳で頑張ってるんだけど、
("text").Value = rnd
このtextに乱数の直前に文章を入れたいんだけどどうすればいい?
必要なら全文載せる
2012/10/13(土) 09:53:17.73
3行目を読み返せ。
2012/10/13(土) 10:43:46.18
乱数の直前に文章を入れる?

単純に & で連結したらいいと思うが…

msgbox "文章" & rnd
539537
垢版 |
2012/10/13(土) 10:55:59.62
>このtextに乱数の直前に文章を入れたいんだけどどうすればいい?
乱数の直前に、このtextに文章を入れたいんだけどどうすればいい?
540デフォルトの名無しさん
垢版 |
2012/10/13(土) 11:01:38.99
ありがとうございます
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。