X



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

(例○○を自動処理してくれるプログラム)
0104デフォルトの名無しさん
垢版 |
2007/12/19(水) 07:02:16
>>101
MSOライブラリを複数登録するんでしょうか?
別バージョンのMicrosoft Office Object Library、Microsoft Excel Object Libraryを参照設定から
追加しようとしたのですが無視されてしまいました。
エラーも出ず、追加も出来ず、よくわかりません。

>>102
excel /regserverを実行してみたところ、Officeのインストーラーが起動してシステムの設定をすべて書き換え、
確かにデフォルトのアプリケーションもオブジェクトも切り替わりました。
が、この方法ではいちいちインストーラーが起動するということで、見栄えがよくありませんし、
時間もかかりすぎてしまいます。元に戻す手間もありますし。

>>103
最終的にはウィンドウを出さずに裏でこっそり処理をさせたいので、(>>96のプログラムの3行目が
存在しないイメージです) 単純にショートカットからExcelを起動して最小化、みたいな処理は、
できれば避けたいのです。後出しですみません。

もう少しヒントを、よろしくお願いします。
0106デフォルトの名無しさん
垢版 |
2007/12/21(金) 15:02:41
「2003に致命的な問題が見つかりますた」と言って強引に2003をアンインストールして2007のみの環境にしる
0109デフォルトの名無しさん
垢版 |
2007/12/24(月) 15:35:09
あ、既出でやんの。 

(office2000以降)CLSIDが共通だって事は、
オートメーションでバージョンを指定することは出来ない ってことじゃねえの?
0111デフォルトの名無しさん
垢版 |
2007/12/24(月) 16:25:44
なるほど、希望バージョンのExcel.exeを先に起動しておいてからGetObjectすればよいのかな?
0113デフォルトの名無しさん
垢版 |
2007/12/25(火) 23:04:38
何をアクティブにして何をさせたいか

ちょっとした選択ミスがすべてを台無しにする事もある
目的と干渉によるけどやりたいなら自己責任で
0114デフォルトの名無しさん
垢版 |
2008/02/11(月) 06:52:56
突然質問ですが…
プログラムに汎用性を持たせるために、一部の変数を外部ファイル化したんですが、
どうすればよいのでしょうか?
実行専用ファイルを作って、その中で変数専用ファイルとメインファイルをPublic変数で繋いで
走らせる事も考えたのですが、できますでしょうか?
って言うかVBSってinclude無いんですか?
0116デフォルトの名無しさん
垢版 |
2008/02/11(月) 23:26:24
ini ファイルみたなのをつくって、フツーにopenして読み込めばいいじゃん。
0117壱壱四
垢版 |
2008/02/12(火) 07:24:04
115-116
ありがとうございました。
あとはググって調べます
0118デフォルトの名無しさん
垢版 |
2008/03/06(木) 09:58:25
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つまとめるとダメみたいで・・・。

そういう仕様なんでしょうか?

何か書き方にクセがあるんでしょうか?
0120デフォルトの名無しさん
垢版 |
2008/04/08(火) 00:03:03
Excelで、セルに入力された文字列のうち、ある部分だけの色を変える、という処理をVBSで行いたいです。
たとえば「A1」のセルに「VBSで便利なプログラムを作れスレ」と入力してあった場合、
そのうちの『プログラム』だけをフォント赤色に変更する、というような感じです。

セル内の文字列すべてだとできるのですが、セル内の文字列の一部分だけを変更する方法を思いつきません。
ExcelのVBAだとCharactersオブジェクトが使えてたけど、これはVBSでは使えないのでしょうか? (←うまいきませんでした)
なにかいいアイデアあったら、誰か教えてください・・・
0121デフォルトの名無しさん
垢版 |
2008/04/08(火) 00:48:23
エラー処理してないんで適当に。
偉い人添削ぷりーず

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
0122デフォルトの名無しさん
垢版 |
2008/04/08(火) 13:55:16
よーし、素人丸出しで質問させてくだされ!

とある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を相対パスで指定して不要項目を削除するには、上記スクリプトを
どのように変更すればいいでしょうか?
0125120です
垢版 |
2008/04/08(火) 23:27:32
>>121
ありがとう。書いてもらったのを参考にして思う通りのものができました。
CharactersオブジェクトのStartとLengthの指定の仕方をまちがってたようです。
任意のフォルダを選択すると、コマンドプロンプトのTREEコマンドみたいな枝?罫線+選択フォルダ以下すべてのサブフォルダ名 OR ファイル名を
Excelに書き出す、というのを作ってたんですが、その出力内容のうち、サブフォルダ名の部分だけを色変えたかったのです。
0126120です
垢版 |
2008/04/08(火) 23:28:08
>>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
*******************************************************
0127122
垢版 |
2008/04/09(水) 13:06:21
>>126

必ず相対パスでないとだめってわけではないのだけど。
クライアントで取り込んだCSVを編集する為なのね。
まあ、やり方で回避できるのだけど。。。

このコードも活用させていただきますです。
ありがとう。
0128デフォルトの名無しさん
垢版 |
2008/04/10(木) 01:19:36
>>122
パスがわからないのならドラッグ&ドロップすればいいじゃない、牛丼がないのなら豚丼をたべればいいじゃない。

>>126
そのファンクションいただき。でもエクセルObjectがないと使えないのかー。
0129デフォルトの名無しさん
垢版 |
2008/04/10(木) 02:21:36
GetOpenFileNameとGetSaveFileNameでぐぐれば、タブンさんぷるでてくるぞ。
APIだからエクセルいらない。
0130デフォルトの名無しさん
垢版 |
2008/04/10(木) 16:40:35
>>128
通常Webから配布しているCSVを加工する為に、VBSを
クライアント配布で色々考えてた。
>>126氏の指摘通りエクセル操作が前提で。

>パスがわからないのならドラッグ&ドロップすればいいじゃない、
それも、そうだと思った強風、豪雨の午後でした orz

>牛丼がないのなら豚丼をたべればいいじゃない。
メタボはいかん。
0131デフォルトの名無しさん
垢版 |
2008/04/20(日) 22:38:51
こんにちは。メッセージボックスの[OK]ボタンが押されるのを待たずに次の処理を
実行させたいときはどうするのでしょうか?

[OK]ボタンが押されなくても複数のメッセージボックス(?)を表示させたいのですが …
0132デフォルトの名無しさん
垢版 |
2008/04/20(日) 23:39:08
>>131
2箇所に同じ質問書くと嫌われるよ。マナー違反。今後気をつけな。
0136デフォルトの名無しさん
垢版 |
2008/05/01(木) 22:03:51
初心者なんですけどいいですか?
VBSで二進法の数を十進法にして表示させるプログラムを教えてください。

0137デフォルトの名無しさん
垢版 |
2008/05/01(木) 23:48:07
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
0141デフォルトの名無しさん
垢版 |
2008/05/03(土) 11:12:12
なんかClntの所でエラー表示が出るんですが(^^;
0143たわし
垢版 |
2008/05/03(土) 13:27:56
発投稿っす。どうぞよろしく。
二進法の数を十進法にして表示させるプログラムもう少し簡単にできませんか
0145たわし
垢版 |
2008/05/03(土) 13:36:42
そこを何とかお願いいたします
0147デフォルトの名無しさん
垢版 |
2008/05/03(土) 21:46:23
142>ありがとうございます
しかしValでも型が一致しませんとでるんですが
0148デフォルトの名無しさん
垢版 |
2008/05/03(土) 22:43:18
>>147
お前さんがとてつもない馬鹿で何一つ知らない情報弱者だから
こちらは超能力者にならざるを得ないのをとりあえず理解してくれ。

それを前提とした上で「パソコンでマウスを動かそうとした」とこから
「Valでも型が一致しませんとでる」までの経緯を
お前さんが認識してる「馬鹿」に分からせるように説明しろ。
0149デフォルトの名無しさん
垢版 |
2008/05/04(日) 01:47:23
パソコン上でマウスを動かそうとし、動かしメモ帳を起動して137のプログラムをまずメモ帳に入力し、Clntをそれ以外いじらずValに変更した後、.vbsで保存して、実行しようとするとエラー表示されます
0151デフォルトの名無しさん
垢版 |
2008/05/04(日) 06:09:59
>>149
ValをCIntに戻して再実行してみろ。
CIntに戻したときのエラー表示の中で「文字が正しくありません。」
という文言があるのなら、全角スペースが原因。
行の先頭のスペースを全部削除してから再実行してみろ。動くはず。

>>142
CIntをValに直してもよけいに動かなくなるだけ。
VBでは動いても、VBSでは動かん。

>>150
1行目の10101101を文字列ではなく数値で渡しているって想定か?
別に数値で渡しても、勝手に型変換されて動くよ。
0153デフォルトの名無しさん
垢版 |
2008/05/04(日) 12:33:44
やっぱりうまくいきません
型が一致しません"Clnt"とでます
パソコンが2000だからとかそういうわけでしょうか
あと素人丸だしですみませんが、一行目の10101101ってどういう意味ですか?
0155デフォルトの名無しさん
垢版 |
2008/05/04(日) 16:39:54

そもそも「二進法」の意味がわかっとらんだろ?
0156デフォルトの名無しさん
垢版 |
2008/05/04(日) 17:22:21
ところが2歩進んだと思ってたのに気が付いたら下がっていたという。
0157デフォルトの名無しさん
垢版 |
2008/05/04(日) 19:25:19
2進数はわかってますが
0158デフォルトの名無しさん
垢版 |
2008/05/04(日) 22:40:33
>>152
すまんが、前提として10101101をそのままとしていた。
確かに桁が増えたらエラーになる。
16桁か17桁くらいが区切りのはず。
ちなみに浮動少数表現ではなく、対数表現な。

>>153
指摘が間違ってた。
いいか、Clntが間違いだ。CIntだ。
2文字目は小文字のL(エル)ではなく、大文字のI(アイ)だ。

ついでにいうと、二進法で表現した数値を二進数と言うんだ。
0159デフォルトの名無しさん
垢版 |
2008/05/05(月) 03:45:40
この会話・・・ぜったい2進数がわかってないな。
0161デフォルトの名無しさん
垢版 |
2008/05/05(月) 17:06:00
すいませんXPでやったらできました
そこで入力した二進数を十進数に変えるプログラムはどうやるんですか?
0163136
垢版 |
2008/05/05(月) 17:27:22
なんか変な流れ作っちゃってすまん

というか>>161なぜそこに戻る?
0164デフォルトの名無しさん
垢版 |
2008/05/05(月) 17:39:30
inputboxをどこにいれりゃいいのかわかりませn
0165デフォルトの名無しさん
垢版 |
2008/05/06(火) 12:29:27
おまい、ぜったいぜったい、ぜぇ〜〜ったい2進数がわかってないだろ。
0167デフォルトの名無しさん
垢版 |
2008/05/06(火) 15:42:50
vbsで16進数を表示。たとえば
msgbox &hFE

とすると、結果は 254 と表示されます。
ほんとは FE のはずです。
こういうバグがあるから気をつけたほうがいいよ。
0170デフォルトの名無しさん
垢版 |
2008/05/06(火) 17:59:41
意味わからん
FEって表示したいのなら
msgbox "FE"
って書きゃいいじゃん。
自分で &h つけておいて、何言ってんだろ?
msgbox hex(&hfe)
でもいいけど
0171デフォルトの名無しさん
垢版 |
2008/05/06(火) 18:31:12
数値の&HFE と 文字列の"FE" の違いすらわからんヤツがおるのか。
0173デフォルトの名無しさん
垢版 |
2008/05/11(日) 04:40:36

●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万円
0175デフォルトの名無しさん
垢版 |
2008/06/17(火) 04:14:05
InputBox関数使って、入力値を得たいんですが、
255バイト以上の入力値って無視されるのでしょうか?

解決策があれば教えてください。。


InputText = InputBox("文字列を入力してください")

Dim Fs
Set Fs=CreateObject("Scripting.FileSystemObject")
Set newFile = Fs.CreateTextFile("0000test0000.txt",True)
newFile.WriteLine(InputText)

0177デフォルトの名無しさん
垢版 |
2008/06/17(火) 22:19:12
VBScriptを使って、HTTPステータスコードを取得する方法を探しています。
ある任意のWeb画面に対してスクリプトでリクエストを行い、HTTPステータスコード(200 ok 等)を
取得する方法はありますでしょうか。
どなたかご存知の方がいらっしゃいましたら、ご教授下さい。
0178>>177
垢版 |
2008/06/17(火) 22:24:08
すいません。スレ違いだった為、WSHのスレに移します。
0185デフォルトの名無しさん
垢版 |
2008/07/27(日) 01:18:22
とりあえずExcelAddinをインスコするコードとかlnk右クリックでリンク先ディレクトリ表示とか
あるけど需要あるか?
0186デフォルトの名無しさん
垢版 |
2008/07/30(水) 21:22:27
test1.bin
test2.bin
test3.bin

これらファイルを選択状態にして、VBSファイルにD&Dすると、
ファイル名順にソートして、1つのファイルに結合するには、どうしたら良いのでしょうか?

1つのファイルを、指定サイズに自動分割するVBSはできたのですが、
その逆のことができるVBSファイルを作りたい。。。

ADODB.Recordset
ADODB.stream あたりを使えば可能?
0189デフォルトの名無しさん
垢版 |
2008/08/13(水) 09:09:42
CIM_DataFileクラスを用いて、ファイルの各種情報を取得したいのですが、
「説明」のプロパティを取得するときに指定するプロパティ名が分かりません。

具体的には、例えばソリティア(C:\WINDOWS\system32\sol.exe)を
右クリックして表示されるプロパティの「バージョン情報」タブの2行目に
「説明:Solitaire Game Applet」と表示されますが、この値を取得したいのです。

ファイルバージョンなどは、「Version」プロパティで取得できております。
ご存知の方、ご教示お願い致します。
0191デフォルトの名無しさん
垢版 |
2008/08/17(日) 21:29:36
>>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
0192デフォルトの名無しさん
垢版 |
2008/08/17(日) 21:31:54
(つづき)

'ファイル名のリストをソートして一時ファイルに格納
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"

↑以上、実行時は行頭の空白を半角に。
0194デフォルトの名無しさん
垢版 |
2008/08/21(木) 21:13:21
VBSにて、SNMP情報の取得を考えてるんですが、
wsnmp32.dll を利用することはできないんでしょうか?

dynwrap.dll というラッパー?も使えないのでしょうか
0195デフォルトの名無しさん
垢版 |
2008/08/31(日) 18:59:35
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 とかは
永遠に消えちゃうので不安だ...。
0198デフォルトの名無しさん
垢版 |
2008/08/31(日) 21:32:26
ファイルをドラッグアンドドロップていうのは
サンプル動作のためで、
関数をスクリプト内で
deletefile の代わりに使います。
0199デフォルトの名無しさん
垢版 |
2008/09/16(火) 20:29:18
hail2u.net - Weblog - VBScriptでMSN Messengerの表示アイコンを変更する
http://hail2u.net/blog/coding/change-msn-messenger-display-picture-by-vbscript.html
このMessenger.UIAutomation.1を使って他にも色々出来ないかな、と思って
ドキュメントを探したんですが、どうにも見つからず…。
どなたか詳細ご存じの方いらっしゃいませんか?

Samurizeと組み合わせて、デスクトップから一発で名前とかステータス変えられたら…
0200デフォルトの名無しさん
垢版 |
2008/10/05(日) 15:56:24
VBScriptとかJScriptで地味にWSHのプログラム書いてきたのに・・

IronPtythonなんてどうでもいい。

ていうことでVBScriptやJScriptを開発する統合環境みたいなツールってないの?
秀丸で書いてるんだけど、文法チェックや小文字大文字変換で不便でしょうがないんだけど。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況