VBSで便利なプログラムを作れスレ
■ このスレッドは過去ログ倉庫に格納されています
素人丸出しお粗末で遅くてもいいので いますぐ使えるちょっぴり便利プログラムを作れ (例○○を自動処理してくれるプログラム) >>101 MSOライブラリを複数登録するんでしょうか? 別バージョンのMicrosoft Office Object Library、Microsoft Excel Object Libraryを参照設定から 追加しようとしたのですが無視されてしまいました。 エラーも出ず、追加も出来ず、よくわかりません。 >>102 excel /regserverを実行してみたところ、Officeのインストーラーが起動してシステムの設定をすべて書き換え、 確かにデフォルトのアプリケーションもオブジェクトも切り替わりました。 が、この方法ではいちいちインストーラーが起動するということで、見栄えがよくありませんし、 時間もかかりすぎてしまいます。元に戻す手間もありますし。 >>103 最終的にはウィンドウを出さずに裏でこっそり処理をさせたいので、(>>96 のプログラムの3行目が 存在しないイメージです) 単純にショートカットからExcelを起動して最小化、みたいな処理は、 できれば避けたいのです。後出しですみません。 もう少しヒントを、よろしくお願いします。 「2003に致命的な問題が見つかりますた」と言って強引に2003をアンインストールして2007のみの環境にしる あ、既出でやんの。 (office2000以降)CLSIDが共通だって事は、 オートメーションでバージョンを指定することは出来ない ってことじゃねえの? なるほど、希望バージョンのExcel.exeを先に起動しておいてからGetObjectすればよいのかな? 希望バージョンではない方が既に起動されていても大丈夫? 何をアクティブにして何をさせたいか ちょっとした選択ミスがすべてを台無しにする事もある 目的と干渉によるけどやりたいなら自己責任で 突然質問ですが… プログラムに汎用性を持たせるために、一部の変数を外部ファイル化したんですが、 どうすればよいのでしょうか? 実行専用ファイルを作って、その中で変数専用ファイルとメインファイルをPublic変数で繋いで 走らせる事も考えたのですが、できますでしょうか? って言うかVBSってinclude無いんですか? ini ファイルみたなのをつくって、フツーにopenして読み込めばいいじゃん。 115-116 ありがとうございました。 あとはググって調べます EventQuery.vbs の使い方で教えてください。 というか、挙動不審なんです。 cscript eventquery.vbs /V /FI "ID EQ 564 AND DATETIME GE 03/06/08,12:00:00AM AND USER NE NT AUTHORITY\SYSTEM" /FO CSV /L ↑こういうのを書いたんですが、フィルタ条件のエラーになります。 上記の3つの条件を個別に単発で書けばそれぞれ ちゃんと動くんですが 3つまとめるとダメみたいで・・・。 そういう仕様なんでしょうか? 何か書き方にクセがあるんでしょうか? んなVBSは知らんけどパラメータがtasklistコマンドくせぇな Excelで、セルに入力された文字列のうち、ある部分だけの色を変える、という処理をVBSで行いたいです。 たとえば「A1」のセルに「VBSで便利なプログラムを作れスレ」と入力してあった場合、 そのうちの『プログラム』だけをフォント赤色に変更する、というような感じです。 セル内の文字列すべてだとできるのですが、セル内の文字列の一部分だけを変更する方法を思いつきません。 ExcelのVBAだとCharactersオブジェクトが使えてたけど、これはVBSでは使えないのでしょうか? (←うまいきませんでした) なにかいいアイデアあったら、誰か教えてください・・・ エラー処理してないんで適当に。 偉い人添削ぷりーず Option explicit Const TARGET_WORD = "プログラム" Dim XL, XLBook, XLRange Set XL = CreateObject("Excel.Application") Set XLBook = XL.workbooks.open("C:\Documents and Settings\デフォルトの名無しさん\デスクトップ\book1.xls") Set XLRange = XLBook.sheets(1).Range("A1") Dim TargetChr Set TargetChr = XLRange.characters(Instr(XLRange.value, TARGET_WORD),len(TARGET_WORD)) If Instr(XLRange.value, TARGET_WORD) > 0 then TargetChr.Font.ColorIndex = 3 End if XLBook.save XLBook.close Set XLBook = nothing XL.quit よーし、素人丸出しで質問させてくだされ! とあるCSVファイルがあります。エクセルで展開すると60項目のセルがあります。 その項目で不要項目があるので、消す作業を自動で処理することを考えてます。 ******************************************************* Set objEXCEL = CreateObject("Excel.Application") Set objBOOK = objEXCEL.Workbooks.open("指定場所と指定.CSV") objEXCEL .Visible = true myExcel.Range("B:D").Select myExcel.Selection.Delete myExcel.Cells(1,1).Select ******************************************************** サンプルやエクセルマクロ記録などしてそれらを参考にやってみました。 対象CSVは相対パスで指定してあります。 でも、相対パス指定した行でERRになります。 CSVを相対パスで指定して不要項目を削除するには、上記スクリプトを どのように変更すればいいでしょうか? >>123 レスありがとう。 結局、相対パスはできないということですね。 >>121 ありがとう。書いてもらったのを参考にして思う通りのものができました。 CharactersオブジェクトのStartとLengthの指定の仕方をまちがってたようです。 任意のフォルダを選択すると、コマンドプロンプトのTREEコマンドみたいな枝?罫線+選択フォルダ以下すべてのサブフォルダ名 OR ファイル名を Excelに書き出す、というのを作ってたんですが、その出力内容のうち、サブフォルダ名の部分だけを色変えたかったのです。 >>122 相対パスとるより絶対パスとるほうが簡単だと思うんだけど・・・? Excel使うの前提のようなので、こういうのはどうかな。 ******************************************************* Option Explicit Dim strFilePath strFilePath = GetFilePathDialog() msgbox strFilePath '-------------------------------- ' 選択したファイルのパスを取得 '-------------------------------- Function GetFilePathDialog() Dim objExcel Dim strFile Set objExcel = CreateObject("Excel.Application") strFile = objExcel.GetSaveAsFilename("", "CSV(カンマ区切り) (*.csv),*.csv") If strFile = False Then Exit Function GetFilePathDialog = strFile Set objExcel = Nothing End Function ******************************************************* >>126 必ず相対パスでないとだめってわけではないのだけど。 クライアントで取り込んだCSVを編集する為なのね。 まあ、やり方で回避できるのだけど。。。 このコードも活用させていただきますです。 ありがとう。 >>122 パスがわからないのならドラッグ&ドロップすればいいじゃない、牛丼がないのなら豚丼をたべればいいじゃない。 >>126 そのファンクションいただき。でもエクセルObjectがないと使えないのかー。 GetOpenFileNameとGetSaveFileNameでぐぐれば、タブンさんぷるでてくるぞ。 APIだからエクセルいらない。 >>128 通常Webから配布しているCSVを加工する為に、VBSを クライアント配布で色々考えてた。 >>126 氏の指摘通りエクセル操作が前提で。 >パスがわからないのならドラッグ&ドロップすればいいじゃない、 それも、そうだと思った強風、豪雨の午後でした orz >牛丼がないのなら豚丼をたべればいいじゃない。 メタボはいかん。 こんにちは。メッセージボックスの[OK]ボタンが押されるのを待たずに次の処理を 実行させたいときはどうするのでしょうか? [OK]ボタンが押されなくても複数のメッセージボックス(?)を表示させたいのですが … >>131 2箇所に同じ質問書くと嫌われるよ。マナー違反。今後気をつけな。 初心者なんですけどいいですか? VBSで二進法の数を十進法にして表示させるプログラムを教えてください。 2進数の仕組みがわかってりゃ簡単だよ。 手計算するのと同じことをVBにやらせればいいだけ。 頭から1文字ずつ取り出して、×2していくだけだろ。 msgbox unko("10101101") Function unko(ByVal str) ret = 0 For i = 1 To Len(str) ret = ret * 2 + CInt(Mid(str, i, 1)) Next unko = ret End Function なんかClntの所でエラー表示が出るんですが(^^; 発投稿っす。どうぞよろしく。 二進法の数を十進法にして表示させるプログラムもう少し簡単にできませんか 142>ありがとうございます しかしValでも型が一致しませんとでるんですが >>147 お前さんがとてつもない馬鹿で何一つ知らない情報弱者だから こちらは超能力者にならざるを得ないのをとりあえず理解してくれ。 それを前提とした上で「パソコンでマウスを動かそうとした」とこから 「Valでも型が一致しませんとでる」までの経緯を お前さんが認識してる「馬鹿」に分からせるように説明しろ。 パソコン上でマウスを動かそうとし、動かしメモ帳を起動して137のプログラムをまずメモ帳に入力し、Clntをそれ以外いじらずValに変更した後、.vbsで保存して、実行しようとするとエラー表示されます >>149 ValをCIntに戻して再実行してみろ。 CIntに戻したときのエラー表示の中で「文字が正しくありません。」 という文言があるのなら、全角スペースが原因。 行の先頭のスペースを全部削除してから再実行してみろ。動くはず。 >>142 CIntをValに直してもよけいに動かなくなるだけ。 VBでは動いても、VBSでは動かん。 >>150 1行目の10101101を文字列ではなく数値で渡しているって想定か? 別に数値で渡しても、勝手に型変換されて動くよ。 >>151 数値で桁が多すぎると(浮動少数表現に変わるから?)エラーでるよ やっぱりうまくいきません 型が一致しません"Clnt"とでます パソコンが2000だからとかそういうわけでしょうか あと素人丸だしですみませんが、一行目の10101101ってどういう意味ですか? ところが2歩進んだと思ってたのに気が付いたら下がっていたという。 >>152 すまんが、前提として10101101をそのままとしていた。 確かに桁が増えたらエラーになる。 16桁か17桁くらいが区切りのはず。 ちなみに浮動少数表現ではなく、対数表現な。 >>153 指摘が間違ってた。 いいか、Clntが間違いだ。CIntだ。 2文字目は小文字のL(エル)ではなく、大文字のI(アイ)だ。 ついでにいうと、二進法で表現した数値を二進数と言うんだ。 すいませんXPでやったらできました そこで入力した二進数を十進数に変えるプログラムはどうやるんですか? 二進数も十進数も見た目が違うだけで中味は同じ だから変換は必要ない なんか変な流れ作っちゃってすまん というか>>161 なぜそこに戻る? inputboxをどこにいれりゃいいのかわかりませn おまい、ぜったいぜったい、ぜぇ〜〜ったい2進数がわかってないだろ。 vbsで16進数を表示。たとえば msgbox &hFE とすると、結果は 254 と表示されます。 ほんとは FE のはずです。 こういうバグがあるから気をつけたほうがいいよ。 それはバグ・・・・とは思えないのだが。本来の仕様と違うとか? 意味わからん FEって表示したいのなら msgbox "FE" って書きゃいいじゃん。 自分で &h つけておいて、何言ってんだろ? msgbox hex(&hfe) でもいいけど 数値の&HFE と 文字列の"FE" の違いすらわからんヤツがおるのか。 ●6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催 http://system-trading.jp/news/index.php?cID=3 [シストレFXグランプリとは] クリック証券が提供するFXのデモ取引環境を利用して、システムトレードにチャレンジできるFX取引のグランプリです。 お客様ご自身で作成したシステムトレードの機能を評価する「シストレソフト部門」とトレード収益を競う「トレード部門」の2部門構成となっております。 ●5月22日より登録受付開始、6月2日よりグランプリ開始の予定。賞金総額2000万円。 デモトレードの優勝者には賞金三百万円がプレゼントされます。 ▼トレード部門 初期資産500万円で、デモ取引のトレード収益を競っていただきます。 ●http://www.fx-gp.com/about/ ▼賞金総額 ■社長特別賞(シストレソフト買取価格) 10,000,000円 ●シストレソフト部門賞 1位300万円 2位100万円 3位50万円 ●トレード部門賞 1位300万円 2位100万円 3位50万円 ●前期MVP賞 50万円 ●後期MVP賞 50万円 InputBox関数使って、入力値を得たいんですが、 255バイト以上の入力値って無視されるのでしょうか? 解決策があれば教えてください。。 InputText = InputBox("文字列を入力してください") Dim Fs Set Fs=CreateObject("Scripting.FileSystemObject") Set newFile = Fs.CreateTextFile("0000test0000.txt",True) newFile.WriteLine(InputText) ユニコードで254文字+CR+LFの、最大値を超えています。 VBScriptを使って、HTTPステータスコードを取得する方法を探しています。 ある任意のWeb画面に対してスクリプトでリクエストを行い、HTTPステータスコード(200 ok 等)を 取得する方法はありますでしょうか。 どなたかご存知の方がいらっしゃいましたら、ご教授下さい。 すいません。スレ違いだった為、WSHのスレに移します。 vbsで、フロッピーのフォーマットを確認なしで実行 する命令ありますか?A:\固定で。 VBSにはファイルにアクセスする命令すらありませんよ それを言うならC言語にもファイルにアクセスする命令は無いな >>183 が便利そうなコードを書きまくるそうです>< とりあえずExcelAddinをインスコするコードとかlnk右クリックでリンク先ディレクトリ表示とか あるけど需要あるか? test1.bin test2.bin test3.bin これらファイルを選択状態にして、VBSファイルにD&Dすると、 ファイル名順にソートして、1つのファイルに結合するには、どうしたら良いのでしょうか? 1つのファイルを、指定サイズに自動分割するVBSはできたのですが、 その逆のことができるVBSファイルを作りたい。。。 ADODB.Recordset ADODB.stream あたりを使えば可能? CIM_DataFileクラスを用いて、ファイルの各種情報を取得したいのですが、 「説明」のプロパティを取得するときに指定するプロパティ名が分かりません。 具体的には、例えばソリティア(C:\WINDOWS\system32\sol.exe)を 右クリックして表示されるプロパティの「バージョン情報」タブの2行目に 「説明:Solitaire Game Applet」と表示されますが、この値を取得したいのです。 ファイルバージョンなどは、「Version」プロパティで取得できております。 ご存知の方、ご教示お願い致します。 189です。 カキコするところ間違えたみたいなので、移動します。スミマセン。 >>186-187 作ってみた。 sdir = "C:\temp\" '出力先フォルダ soutfb = "output.bin" '出力ファイル名 set osh = createobject("wscript.shell") 'シェルオブジェクト set ofs = createobject("scripting.filesystemobject") 'ファイルオブジェクト set oarg = wscript.arguments '引数オブジェクト stmpf1 = "temp1.txt" '一時ファイル stmpf2 = "temp2.txt" '一時ファイル 'ドラッグ&ドロップしたファイル名を一時ファイルに格納 set out = ofs.createtextfile(sdir & stmpf1, true) for each s in oarg out.writeline s next out.close (つづき) 'ファイル名のリストをソートして一時ファイルに格納 osh.run "cmd /c sort " & (sdir & stmpf1) & " > " & (sdir & stmpf2), 0, true set oin = ofs.opentextfile(sdir & stmpf2) s = oin.readline 'バイナリファイルのコピー ofs.copyfile s, (sdir & soutfb) do until oin.atendofstream s = oin.readline osh.run "cmd /c copy /b " & (sdir & soutfb) & "+" & s & " " & (sdir & soutfb), 0, true loop oin.close '一時ファイルの消去 ofs.deletefile sdir & stmpf1 ofs.deletefile sdir & stmpf2 msgbox "OK" ↑以上、実行時は行頭の空白を半角に。 copyは性能的にしょうがないかもしれんがsortぐらい自前でやれよw VBSにて、SNMP情報の取得を考えてるんですが、 wsnmp32.dll を利用することはできないんでしょうか? dynwrap.dll というラッパー?も使えないのでしょうか set shell32 = createobject("shell.application") set fso = createobject("scripting.filesystemobject") function recyclebin(pathname) > path = fso.getparentfoldername(pathname) set there = shell32.namespace(path) set submenus = there.items.item(fso.getfilename(pathname)).verbs I = 0 for each method in submenus if strcomp(method, "削除(&D)") = 0 then submenus.item(I).doit() end if I = I + 1 next end function recyclebin wscript.arguments(0) ファイルやフォルダをドラッグアンドドロップすると、 ごみ箱に移すスクリプト。deletefile とかは 永遠に消えちゃうので不安だ...。 それ、ごみ箱のショートカットと比べてどう便利なの? ファイルをドラッグアンドドロップていうのは サンプル動作のためで、 関数をスクリプト内で deletefile の代わりに使います。 hail2u.net - Weblog - VBScriptでMSN Messengerの表示アイコンを変更する http://hail2u.net/blog/coding/change-msn-messenger-display-picture-by-vbscript.html このMessenger.UIAutomation.1を使って他にも色々出来ないかな、と思って ドキュメントを探したんですが、どうにも見つからず…。 どなたか詳細ご存じの方いらっしゃいませんか? Samurizeと組み合わせて、デスクトップから一発で名前とかステータス変えられたら… VBScriptとかJScriptで地味にWSHのプログラム書いてきたのに・・ IronPtythonなんてどうでもいい。 ていうことでVBScriptやJScriptを開発する統合環境みたいなツールってないの? 秀丸で書いてるんだけど、文法チェックや小文字大文字変換で不便でしょうがないんだけど。 そんな愚痴をこのスレで言う理由は・・・つまり VBSで作れと? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる