VBScriptについて必死に話し合うスレ
■ このスレッドは過去ログ倉庫に格納されています
0001邪神名無し君
2009/05/12(火) 22:49:40VBS以外はスルーの方向で(・∀・)
※質問スレではありません、質問は最低限し抑えましょう※
0002デフォルトの名無しさん
2009/05/12(火) 23:19:26いまさらぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁっ!!
ぶぃっ・う゛ぃーっ・すくりぷとぉぉぉぉぉぉぉぉっ
なんでっすかーーーーーーーーーーぁぁぁぁぁぁあああああああああああ
ぱわあああああああああぁぁぁぁぁぁぁっっぉああああああああああっ
しぇるぅじゃなくてぇぇぇぇぇぇぇぇぇぇぇーーーーっ!!
みたいな感じでよろしいでしょうか。
0003デフォルトの名無しさん
2009/05/12(火) 23:43:51言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0004デフォルトの名無しさん
2009/05/13(水) 02:53:29お前らゴールデンウィークの間なにしてたんだよ。
休んでもいいけど、アイちゃんのコンソールをそのままにして行くなよ。
0005デフォルトの名無しさん
2009/05/18(月) 10:38:03まずIE以外のブラウザで使えるようにすべきだと思うんだ。
VBScriptはJavaScriptのように変数や命令を大文字小文字を分けて書く必要もなく、
エラーが出てもOn Error Resume Nextで全部エラーを無視してくれる。
こんなすばらしい言語なのになぜIE以外で使われないのか理解できない!!
0006デフォルトの名無しさん
2009/05/18(月) 22:22:23VBSEditってのがあるけど、それなりな金額がかかるし(お金を払う価値はあると思うけど)
あと、導入に適した本がなかなか見当たらない。
いままで見てきた本で一番役に立ったのは
WSHクイックリファレンス
ttp://www.oreilly.co.jp/books/4873113091/
これかなぁ
IEはシラネ
0007デフォルトの名無しさん
2009/05/25(月) 08:56:39そもそもデバッグ開始ができない。
0008デフォルトの名無しさん
2009/05/25(月) 20:43:340009デフォルトの名無しさん
2009/05/31(日) 08:48:580010デフォルトの名無しさん
2009/06/07(日) 00:46:21例えば、XPとVistaをデュアルブートしてたらXPを無効にしたり。
0011デフォルトの名無しさん
2009/06/08(月) 18:42:35全くの初心者ですが、今からプログラムを始めるならばどちらが適していますか?
0012デフォルトの名無しさん
2009/06/08(月) 18:55:460013デフォルトの名無しさん
2009/06/08(月) 18:59:27プログラムで何がしたいんだ?そこが重要だ。
回答によってはVBもVBSも候補になりうる。
0014デフォルトの名無しさん
2009/06/12(金) 20:14:14Vista側でVBSからbcdeditコマンドを叩く
http://technet.microsoft.com/en-us/library/cc731662(WS.10).aspx
0015デフォルトの名無しさん
2009/06/12(金) 21:27:13・クラス機能がしょぼ過ぎる
・try catchを実現するために、関数を1つかまさなきゃらないのは面倒過ぎ
・ショートサーキット評価のないif文(おかげでネストが深くなる)
・Null引数で落ちる組み込み関数多過ぎ
・Set 〜 = New のせいでオブジェクト型/その他を混在で返す関数が作れない
くらい最悪
0016デフォルトの名無しさん
2009/06/13(土) 14:02:240017デフォルトの名無しさん
2009/06/13(土) 14:29:32え?新規?死んでください。
0018デフォルトの名無しさん
2009/06/22(月) 23:09:01サクラエディタとか秀丸とか必要なの?
0019デフォルトの名無しさん
2009/06/23(火) 01:11:040020デフォルトの名無しさん
2009/06/23(火) 04:38:22ありがとう。vbscriptの拡張子はなんにすればいいですか?
0021デフォルトの名無しさん
2009/06/23(火) 19:25:100022デフォルトの名無しさん
2009/06/23(火) 20:00:29バカでごめんよ。
0023デフォルトの名無しさん
2009/06/24(水) 00:17:54どんな書き込みだって許せる板さ(´_ゝ`)
0024デフォルトの名無しさん
2009/09/03(木) 23:28:32文字列を実行コードに出来るんて新鮮だった
これ使えばテンプレートみたいな事出来そう
カオスになりそうではあるがw
0025デフォルトの名無しさん
2009/09/09(水) 23:33:340026デフォルトの名無しさん
2009/09/10(木) 00:07:080027デフォルトの名無しさん
2009/09/13(日) 03:19:24VBScriptハッカーズ・プログラミング
http://www.amazon.co.jp/dp/4896272838
ただamazonの評価にあるように、これは学習用の教科書として使う。
サンプルをとにかく試したいならサンプル集を探した方が良い。
っていうかサンプル集は本を買うよりググった方が良いと思う。
0028デフォルトの名無しさん
2009/09/13(日) 21:39:150029デフォルトの名無しさん
2009/09/13(日) 22:40:55少なくともWindows 2008でも標準インストールされないPowerShellを普及してるなどとはとても言えない
0030デフォルトの名無しさん
2009/09/21(月) 08:39:27俺もその本で入った。
サンプル見ながら色々できるし、最初は便利だよね。
VBScript+HTAで色々やるんで、辞書みたいなのが欲しいんだけど、
良い本知ってる人居ますか?
機能逆引きできて、書式が出てればそれでOK(サンプルとか不要)な感じなんですが。
名前は忘れたけど、白地に文字の表紙で、10x20cmくらいの縦長の薄い本で
VBScriptの簡易リファレンスみたいなのがあって便利だったんですが、
今は絶版だったと思います。
WSHとVBScriptで別々に買うのが良いのかな。
0031デフォルトの名無しさん
2009/09/21(月) 08:45:01Windows上ならメモ帳で書いて、ほぼどこでも動作可能、
言語的にも色々な面でお手軽な所が好き。
クリップボード使えたりD&Dでの読み込み出来たり
文章や画像の表示もIE使えばIEで出来るだけ表示できるし
思った以上に色々できる。
ノートン先生に「悪意のあるプログラム」扱いされるのが許せん。
悪意は無いのに(´・ω・`)
0032デフォルトの名無しさん
2009/09/21(月) 15:34:06オレオレ署名入れてもだめ?
0033デフォルトの名無しさん
2009/09/22(火) 02:33:00Refererで制限かかってるページあるんですけれど、
VBSで偽装できますか?
0034デフォルトの名無しさん
2009/09/22(火) 03:55:530035デフォルトの名無しさん
2009/09/22(火) 05:54:57俺も使って無いからよく知らないが、
ノートン先生入れてる友人にVBScriptで作ったプログラム渡したら
「悪意のあるプログラムなので隔離しました」
とか出たらしい。
悪意はねぇよな。
自己レスだけどポケットリファレンスVBScriptって本が割りとよかった。
よく探したら家にあった。
0036デフォルトの名無しさん
2009/09/22(火) 08:51:49htmlfileは、about:blankのセキュ設定次第なんだよな
ナンか回避方法ないかと、てstしたがムダだった
0037デフォルトの名無しさん
2009/09/22(火) 10:35:46HTAなら使用可能だと思うよ。
0038デフォルトの名無しさん
2009/09/22(火) 13:09:39今は、インターネッツのセキュ設定を変更しない方法で、IE使ってる
もちろん、HTAも使えるんだけど
要は、アウトプロセスじゃなくインプロセスでやりたくなったわけ^^
003933
2009/09/23(水) 16:57:22CreateObject("InternetExplorer.Application")して
Navigateメソッドで自己解決しました。
ところで取得したDocumentオブジェクト内のImageオブジェクトを
そのままファイルに保存すること、できませんか?
0040デフォルトの名無しさん
2009/09/24(木) 00:47:53作業途中で止める方法をどうするかで困ってる。
何か良い方法ないかな。
ループで指定フォルダ下のファイルを、まぁちょっと色々加工してから自動的に別の場所にコピーするんだけど、
処理中はHTAのボタンとかは弄れないし・・・
別のHTAで識別用ファイルを生成して、そのファイルを発見し次第、緊急停止
という方法を思いついたけど、どう考えてもスマートなやり方じゃないよね。
0041デフォルトの名無しさん
2009/09/24(木) 03:43:52処理中止後の後処理が不要であればCScript
[CTRL]+[C]で処理を止めることができる
0042デフォルトの名無しさん
2009/09/24(木) 06:54:04ありがとう。
わりと大事なファイルのバックアップで、
DVDへの書き込みとサーバー上へのファイル移動を行なうから、
出来るだけ強制終了的な終わり方は避けて、
何らかの方法でループ中に判定で正常終了したい。
あと、HTAで使ってると、WScriptやCScriptと違ってmshtaとして動くから
そういうショートカットキーとかは使えないんじゃない?
0043デフォルトの名無しさん
2009/09/24(木) 11:10:46HTAのボタンを常に押せる状態にしたければ、実処理を別プロセスにする方が良い
私ならCScriptで作った「バックアップ処理」と「ロールバック処理」をキックするけどね
[CTRL]+[C]を使わない場合は↓のようにしてEOF検出変化を利用する
待ち側:判定用ファイルをリードオンリーで開きっぱなしにして定期的にEOFを判定
指示側:判定用ファイルに追記
0044デフォルトの名無しさん
2009/09/24(木) 13:29:26実処理を別プロセスにする というのが良さそうですね。それで試してみます。
バックアップ処理自体はCScriptに投げてHTAの方の処理は終了、
緊急停止などGUI操作専用にするって感じですかね。
一つのファイルを開いておいて中身で判定というのも、ファイル自体の存在チェックよりは良さそうですね。
値の受け渡しも出来るし、進行状況の表示にでも使おうかな。
0045デフォルトの名無しさん
2009/09/26(土) 14:36:41VBScriptを使っていて、ちょっと不便だなと思ったことがあります。
それは、関数にオブジェクトのプロパティを参照渡しすることができないということです。
たとえば、call swap( obj1.x, obj2.y )を実行して、obj1.xとobj2.yの値を
入れ替えようしても、うまくいきません。
うまくオブジェクトのプロパティを参照渡しする方法は無いのでしょうか?
よろしくお願いします。
0046デフォルトの名無しさん
2009/09/26(土) 14:37:300047デフォルトの名無しさん
2009/09/26(土) 16:39:14無理。
プロパティは事実上、Get/Setという2つの関数からできているのと同じ(正確にはSetRefの場合もあるが)。
そういう意味で変数と違うから参照渡しはできない。
VBSだとCallByNameも使えないしねえ。
0048デフォルトの名無しさん
2009/09/26(土) 20:47:020049デフォルトの名無しさん
2009/09/26(土) 21:42:18今では書店でもあまり見かけなくなった
005045
2009/09/27(日) 17:19:57ありがとうございました。
0051デフォルトの名無しさん
2009/10/07(水) 00:27:08先人恐るべし
0052デフォルトの名無しさん
2009/10/07(水) 01:11:170053デフォルトの名無しさん
2009/10/07(水) 20:49:180054デフォルトの名無しさん
2009/10/08(木) 22:07:29IEからのイベントに応答する場合、
CreateObject("InternetExplorer.Application","IE_")
などと書きますが、
コールバックされる IE_ から始まるプロシジャを自作クラス内に置くことはできませんか?
あるいはc++でいうスタティックなプロシジャにするにはどう書けばよいのでしょうか。
0055デフォルトの名無しさん
2009/12/09(水) 16:46:21Mutexとか使えると良いのですが・・・
0056デフォルトの名無しさん
2009/12/09(水) 19:48:290057デフォルトの名無しさん
2009/12/09(水) 22:13:00fso.opentextfile(wscript.scriptfullname,8)
0058デフォルトの名無しさん
2009/12/09(水) 22:17:26executeglobal "set IE_hoge=getref(""hoge"")"
0059デフォルトの名無しさん
2009/12/11(金) 09:07:230060デフォルトの名無しさん
2009/12/11(金) 10:04:50>>1には悪いが、モダンな言語使った方が絶対楽だ!
0061デフォルトの名無しさん
2009/12/11(金) 23:53:140062デフォルトの名無しさん
2009/12/12(土) 19:22:480063デフォルトの名無しさん
2009/12/26(土) 11:45:12恋人ができるスクリプト
0064デフォルトの名無しさん
2009/12/30(水) 21:47:15XPでは、右クリック→送る から以下のvbsでファイル更新日を変えてたんだけどWin7では更新日が変わってくれなくなった。なんでだろ?
もちろんcygwinはちゃんとセットアップしてあるし、touch.exe 単体で更新日は変えれてる。
option Explicit
Dim objFSO
Dim objWshShell
dim objArg
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWshShell = CreateObject("Wscript.Shell")
for each objArg in Wscript.Arguments
if objFSO.FileExists(objArg) then
' 更新日変更
objWshShell.Run "C:¥cygwin¥bin¥touch '"+ objArg + "'", 0
end if
Next
0065デフォルトの名無しさん
2009/12/30(水) 22:08:06なんでfsoで更新日を変更しないの?
0066デフォルトの名無しさん
2009/12/30(水) 22:17:55変更できないのか
006764
2009/12/31(木) 10:41:22パスに日本語があるとダメッぽい。Pathがアルファベットだけなら更新日が変わってくれた。
ディスクトップのパスは「c:¥User¥[xxx]¥Desktop」と英語表記だからOKなのかな?
XPの時はどうだったろ?
この前、cygwin自体がUTF8対応で変更されたみたいだからその影響かな?
0068デフォルトの名無しさん
2009/12/31(木) 15:58:06なんでshell.applicationで更新日を変更しないの?
006964
2009/12/31(木) 22:30:07パスに日本語があると exe 側に渡される引数が「'」で挟まれた状態のまま渡されてくる
'C:\Users\myname\Desktop\aあ'
C:\Users\myname\Desktop\a
「'」で挟まないとパスに空白があると上手く動いてくれないし
>68
>なんでshell.applicationで更新日を変更しないの?
どの関数を使うの?
0070デフォルトの名無しさん
2009/12/31(木) 23:21:17なんで「"」でパスを挟まないの?
007164
2010/01/01(金) 18:19:34専用の改造版touch.exeを作って対応するかなぁ
単純な「"」を打ち消すだけのラッパでOKかな
>>70
> >>69
> なんで「"」でパスを挟まないの?
>
「"」で挟んでも一緒だった
0072デフォルトの名無しさん
2010/01/01(金) 19:05:41なんでPowerShell使わないの?
0073デフォルトの名無しさん
2010/01/01(金) 19:30:480074デフォルトの名無しさん
2010/01/01(金) 20:25:560075デフォルトの名無しさん
2010/01/01(金) 20:43:47なんでtouchのショートカットにしないの?
0076デフォルトの名無しさん
2010/01/17(日) 05:13:38疑問に感じる
0077デフォルトの名無しさん
2010/01/19(火) 15:15:29疑問に感じる
0078デフォルトの名無しさん
2010/01/28(木) 20:32:06実行速度は同じ?
0079デフォルトの名無しさん
2010/01/28(木) 21:10:29VBScriptの方が若干高速
実行速度より性質の違いを気にするべきだと思うけど・・・
0080デフォルトの名無しさん
2010/02/23(火) 15:31:29やっぱVBSしかないか〜
0081デフォルトの名無しさん
2010/02/23(火) 21:53:27外部コマンド関連などWindows9x系とWindowsNT系で挙動が微妙に異なる場合もあるが。
0082デフォルトの名無しさん
2010/03/05(金) 01:09:06別にここでもいいんじゃないの
VBSで便利なプログラムを作れスレ
http://pc12.2ch.net/test/read.cgi/tech/1170492587/
0083デフォルトの名無しさん
2010/03/28(日) 22:01:08やりたいことは、
既存のタスクを一括で"タスクを実行するためにスリープを解除する”
に変更したいです。
schtasksのオプションでは出来ないため、悩んでます。
ttp://64.4.11.251/en-us/library/aa383306%28VS.85%29.aspx
Property WakeToRun As Boolean
とかかれても具体的にどうすればいいやら
0084デフォルトの名無しさん
2010/03/28(日) 23:31:110085デフォルトの名無しさん
2010/04/09(金) 01:13:230086デフォルトの名無しさん
2010/04/16(金) 00:56:42について質問なんですが
Optionsに&H4000を指定して
ファイルも表示出来る状態にした場合に
選択されたファイルのパスを取得する方法はありますか?
0087デフォルトの名無しさん
2010/04/16(金) 01:46:450088デフォルトの名無しさん
2010/04/16(金) 03:51:360089デフォルトの名無しさん
2010/04/25(日) 18:54:398856F961-340A-11D0-A96B-00C04FD705A2
か
55136805-B2DE-11D1-B9F2-00A0C98BC547
を使えばやりたいことはできるんじゃないか
0090デフォルトの名無しさん
2010/06/04(金) 23:30:390091デフォルトの名無しさん
2010/06/05(土) 18:12:50http://technet.microsoft.com/ja-jp/magazine/2007.01.heyscriptingguy.aspx
0092デフォルトの名無しさん
2010/06/09(水) 19:00:51クラスの中からexecuteglobalでglobal contextに作ればよい
0093デフォルトの名無しさん
2010/06/12(土) 13:48:17WSH(VBS)から別途準備したxlsファイルのA列のデータの入っている最終行の行番号の取得
理由
xls内でマクロ(VBA)があるとファイルを開くたびに有効するかの問い合わせがある為
xls内にはマクロを組まず、外部からvbsで取得をしたい。
わからないこと
xls内でVBAで取得する場合には、"Range("A65536").End(xlUp).Row"で取得できる。
しかし、外部のVBSからはEnd(xlDown)が使えないようでエラーしてしまう。
同様に"SpecialCells(xlLastCell)"もダメ・・
教えてほしいこと
何か良い方法がないか教えてください。
------
こんな気持ち悪いコードしか思い浮かばない・・・・
Set getExcel = WScript.CreateObject("Excel.Application")
getExcel.Workbooks.Open("C:\book1.xls")
For i = 65536 To 1 Step -1
If getExcel.Worksheets(1).Cells(i, 1) <> "" Then
e = i
Exit For
End If
Next
WScript.echo("last row:" & e)
0094デフォルトの名無しさん
2010/06/12(土) 14:08:01vbs側では「自分で定義して使う」or「値を直接入れる」しかない
0095sage
2010/06/12(土) 14:24:07サンクス!
今のところ、上の気持ち悪いコードしか思い浮かばないので、もう少し考えてみる。
自分で定義・・か、少し時間がかかりそうだな。俺には
ありがと
0096デフォルトの名無しさん
2010/06/12(土) 19:09:10<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<job>
<reference guid="{00020813-0000-0000-C000-000000000046}"/>
<script language="VBScript">
<![CDATA[
Set getExcel = WScript.CreateObject("Excel.Application")
getExcel.Workbooks.Open("C:\book1.xls")
For i = 65536 To 1 Step -1
If getExcel.Worksheets(1).Cells(i, 1) <> "" Then
e = i
Exit For
End If
Next
WScript.echo("last row:" & e)
]]>
</script>
</job>
0097デフォルトの名無しさん
2010/06/12(土) 19:28:01今回は自分で定義する必要は無いかな。
>>94さんの言うとおり、値を直接入れれば終わり。
msgbox getExcel.sheets(1).cells(65535,1).end("-4162").row
で動くはず。
試してみて。
ExcelやVBの定数を調べる時は、
イミディエイトウィンドウに ?xlup
と入力してリターン押すと値が表示されるよ。
0098デフォルトの名無しさん
2010/06/12(土) 19:44:17一応動作確認したよ。きちんと動いてくれました。
VBSはあまり触らないんだけど、workbookをsetさせるのって出来ないのかな。
あまりスマートじゃない構文になってしまって、ちょっと悲しい。
dim Ex
dim a
const BkPath = "ブックのパス"
const BkName = "ブック名"
set ex = createobject("excel.application")
ex.workbooks.open(bkpath& "\" & bkname)
a= ex.sheets(1).cells(65535,1).end("-4162").row
ex.workbooks(bkname).close
msgbox a
何とかブックを開かずに取得出来るとスマートですね。
excel4macroでブックを開かずにデータを取得出来たはずなので、
そっちも少し試してみようと思います。
0099デフォルトの名無しさん
2010/06/12(土) 19:54:28スレ汚し失礼しました。
0100デフォルトの名無しさん
2010/06/18(金) 21:10:59b=20
if a > b then
wscript.echo """10"" > 20"
else
wscript.echo """10"" <= 20"
end if
で、 a > b が真になるのは、どういう理屈からでしょうか?
0101デフォルトの名無しさん
2010/06/18(金) 22:24:42比較演算子では、一方の式が数値、他方が文字列の場合、数式の方が文字列式より小さくなる。
http://msdn.microsoft.com/ja-jp/library/cc392349.aspx
ところが、If文に変数でなく即値を記述するなどいろいろ試してみると
結果が違ったりして、厳密な変換ルールは謎
■ このスレッドは過去ログ倉庫に格納されています