a3 さん 2006年 10月 18日 11時 22分 52秒

OfficeのFileSearchクラスの話がでてきたので、便乗質問させていただきます。

【やりたいこと】
Cドライブに拡張子.xlsのファイルがどのくらいあるかリストする。

【書いてみたソース】
------------------------------------------------
Option Explicit
Dim oExcel, oFileSearch, vPath
Set oExcel = CreateObject("Excel.Application")
Set oFileSearch = oExcel.Application.FileSearch

With oFileSearch
 .NewSearch
 .LookIn = "C:\"
 .FileName = "*.xls"
 .SearchSubFolders = True
 If .Execute() <> 0 Then
  For Each vPath In .FoundFiles
   WScript.Echo vpath
  Next
 End If
End With
------------------------------------------------
【困っていること】
・なぜか同じパスのファイルが複数出力されているのがある。
・同じネットワークにあるファイルサーバのエクセルファイルも
 UNC表記でリストされる。

なにかOffice.FileSearchの使い方を間違っているのでしょうか?

Palazzo さん 2006年 10月 18日 10時 22分 05秒
URL:http://homepage2.nifty.com/blu-nero/

>初心者 さん 2006年 10月 17日 11時 33分 07秒

FSOでは無理ですが、OfficeのFileSearchクラスを使用するといいのでは?もちろん何らかのOffice製品がインストールされていなければなりませんが・・・。こちらを使用すると、FSOでアクセスで引っ掛かったフォルダ内も問題なく検索できました。

ちゃっぴ さん 2006年 10月 18日 00時 51分 24秒

To 初心者 さん 2006年 10月 17日 11時 33分 07秒

> ファイルループでアクセスできない時、そのパスが取得できません。

これ、ACL で引っかかっているんですから、どうやっても知りようがありません。
知ることができたら脆弱性です。

初心者 さん 2006年 10月 17日 11時 33分 07秒

ファイルループでアクセスできない時、そのパスが取得できません。
エラーファイルのパスの取得はどうすればできるのでしょうか?
よろしくお願いします。

  Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
  Set objDir = Fs.GetFolder("c:\vbs")
  Set objFile = objDir.Files

  On Error Resume Next
  For Each fl1 In objFile
    If Err.Number = 70 Then
      msgbox ("アクセスNG")'ここでファイルパスが知りたいのです。
    Else
      msgbox ("アクセスOK " & fl1.Path)
    End IF
  Next


アイディーエス株式会社 さん (ai@aidaiko.co.jp) 2006年 10月 12日 22時 14分 33秒
URL:http://www.aidaiko.co.jp

条件 普通二種自動車運転免許所持者(1種のみでも可)
時間 PM7時〜AM4時半 又はPM8時〜AM2時 又はPM9時〜AM3時
給料 PM7時〜の場合 日給8000円〜 PM8、9時〜の場合 日給6000円〜
TEL 0120−198−883
本社は運転代行の古い歴史と伝統を保ち、飲酒運転撲滅を目指し日々お客様と接しています。本社で是非働いてみてはいかがでしょうか。お電話お待ちしております。

tetsu さん 2006年 10月 06日 21時 54分 06秒

ありがとうございます。

そうですか、スクリプトでマウス操作はできないのですねぇ。それは困りました。

サイトがどのようにしているのか分かりませんが、教えて頂いた方法でドキュメ
ントの内容を表示すると肝心なところは表示されないんです。
会員でないとみることのできないサイトなのでお見せできないのが非常に残念
です。


a3 さん 2006年 10月 06日 18時 04分 10秒

>tetsu さん 2006年 10月 05日 23時 27分 13秒

まず、以下のことをご認識ください。
・WSHの標準の機能では、スクリプトによるマウス操作はできない。
※私の認識が違っているかもしれません。ツッコミよろしくお願いします。

マウス操作するためには
・マウスを制御できるツール(例:UWSCとか。)と組み合わせる。
・APIを実行するラッパークラスを利用する。
とかですね。どっちも簡単ではないです。

ところで、
>ドキュメントの内容も表示されましたが、これだとだめなサイトなのです。
これは何故でしょう?取得したい部分のテキストがPDFとかの別形式?

tetsu さん 2006年 10月 05日 23時 27分 13秒

a3さん

望みのIEを見つけるところまでできました。ありがとうございます。
ドキュメントの内容も表示されましたが、これだとだめなサイトなのです。
なので、やはり特定の座標をダブルクリック→選択された単語をコピー
としたいのです。

よろしくお願いします。

tetsu さん 2006年 10月 05日 22時 11分 10秒

ありがとうございます。感謝します。

スキルがなくて、なかなか理解できないのですが、じっくり考えてみます。
IEの特定の座標(文章が書かれているところ)をダブルクリックすると
ひらがな、カタカナ、数字であれば、単語が選ばれますね。この単語を
コピーしたいのです。ウィンドウはスクロールしないものとします。

a3 さん 2006年 10月 05日 19時 16分 04秒

> tetsu さん 2006年 10月 05日 09時 55分 29秒

前半だけ(タイトルでIE検索)ですが、サンプルです。
※最初に見つけたところで検索打ち切りしてます。
------------------------
Dim objWindow
Dim shell

Set shell = CreateObject("Shell.Application")

For Each objWindow In shell.Windows
 If TypeName(objWindow.document) = "HTMLDocument" Then
  WScript.Echo objWindow.LocationName
  'ここでタイトルをチェック。(以下、例)
  If objWindow.LocationName = "WSH Lab. 掲示板" Then
   Msgbox "「WSH Lab. 掲示板」を開いているIE発見!", , "みつけたよ!"

   '見つけたIEに対する処理を以下へ。
   '※とりあえず、ドキュメントの内容を表示してみる。
   WScript.Echo objWindow.document.documentElement.outerText
   Exit For
  End If
 End If
Next
------------------------

後半は・・・かかれている処理の意図がよくわかりませんです。
※たとえば、スクロールしてたら特定座標の下になにがあるかわかりませんです。

documentオブジェクトが取得できているので、
例に出したとおり、ドキュメントの内容を取得するのは可能ですけどね。

tetsu さん 2006年 10月 05日 09時 55分 29秒

いきなり質問ですみません。

以下のプログラムをスクリプトしたいのですが、ご教示いただけないでしょうか?

複数起動されているIEから、特定のIEを見つけ出し(タイトル等で
判断したい)、そのIEの特定の座標をダブルクリックし、その単語を
コピーする。そして、Excelの特定のカラムにペーストする。

これだけなのですが、どうしてよいやらさっぱりです。
どうかお願いいたします。



楽々園の秀 さん (null) 2006年 09月 29日 08時 25分 49秒
URL:null

a3さん回答ありがとうございました。

> すみません、私の返答の仕方が悪かったようです。
> ※"C:\Program "ファイルってやばい!という思いが先走りすぎました。

いいえこちらでも
起動時に C:\Program と言うファイルがあります。・・・
と言う警告が出るようになったので、即座に削除して、とりあえず半角スペースの
無いフォルダに退避させてました。
>
> (1)わざわざプログラムで連結しなくても、引数を""でくくっておくと
> sTempFileName=WScript.Arguments(0)でブランクを含んだパスを取得できます。

そうですね。今やってみたら全体が取得できました。
前回のテストは何かおかしいことを私がやってたんでしょうねぇ。(^_^;)
>
> (2)そもそも、楽々園の秀さんの質問は
> 「書き出さない様に致したく」でしたので、私の書き込みは回答になってませんでした。
>
> WshLab.iniの該当部分を以下のようにすれば、書き出さないと思います。
> (元)download.command=wscript.exe wshbbs.vbs /%tmpfile%
> (新)download.command=wscript.exe wshbbs.vbs

正しい動作はがどうなるのか理解できていなかったので、短絡的になんで出てくるの?
と言う思いからこんな書き方になってしまいました。
もっとしっかりコードを解析してから質問すべきでした。
>
> 以上、ごめんなさいでした。

いえいえ。どうもありがとうございました。

管理人むたぐちさん
wshbbs.vbs 改訂ありがとうごさいました。
早速ダウンロードさせていただきました。

管理人むたぐち さん 2006年 09月 29日 00時 59分 25秒

Windows PowerShell RC2 公開開始
http://blogs.wankuma.com/mutaguchi/archive/2006/09/28/39914.asp

されましたねー。# ブログのほうもよかったらコメントください。

wshbbs.vbsに関しては、a3さんの記述法を採用したものを再アップしておきました。
ご報告ありがとうございました。

masamune さん 2006年 09月 28日 13時 53分 38秒

お世話になっております。

VBScriptからエクセルファイルを作成したいのですが、
サーバーにエクセルがインストールされていません。
CreateObject( "Excel.Application" )
はエクセルがインストールされていないと利用できないようです。

どなたか、他の方法でエクセルを作成する方法を
ご教授いただけないでしょうか。
よろしくお願いいたします。

a3 さん 2006年 09月 26日 18時 37分 16秒

>らいど さん 2006年 09月 17日 05時 07分 08秒

私も同じ現象に出くわしたことがあります。

>Windowsタスクの実行パス:
>c:\arg.vbs /a:alpha /b:beta china /d:delta english
この部分を
Cscript c:\arg.vbs /a:alpha /b:beta china /d:delta english
Wscript c:\arg.vbs /a:alpha /b:beta china /d:delta english

と明示的に記載すると、引数を取れると思います。
お試しください。

a3 さん 2006年 09月 26日 18時 08分 52秒

>楽々園の秀 さん

すみません、私の返答の仕方が悪かったようです。
※"C:\Program "ファイルってやばい!という思いが先走りすぎました。

(1)わざわざプログラムで連結しなくても、引数を""でくくっておくと
sTempFileName=WScript.Arguments(0)でブランクを含んだパスを取得できます。

(2)そもそも、楽々園の秀さんの質問は
「書き出さない様に致したく」でしたので、私の書き込みは回答になってませんでした。

WshLab.iniの該当部分を以下のようにすれば、書き出さないと思います。
(元)download.command=wscript.exe wshbbs.vbs /%tmpfile%
(新)download.command=wscript.exe wshbbs.vbs

以上、ごめんなさいでした。

JunJun さん 2006年 09月 26日 07時 49分 20秒

はじめまして、junと申します。
インターネットの掲示板でVBスクリプトについて教えて下さる。ホームページがあるということで投稿しました。なんせ初心者なので過去ログなどを見てもさっぱりわかりません。どなたかわかりやすく教えていただけませんでしょうか?
任意のフォルダーの中にtest.zipとそれを展開したtestフォルダーがあります。それらを検索して削除し、さらにゴミ箱からも削除したいのですが、
具体的なコードを教えていただけませんでしょうか、お願いします。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 25日 18時 31分 10秒

あんのうん さん 助かりました。有り難うございました。
今後とも宜しくお願いいたします。

あんのうん さん 2006年 09月 25日 13時 05分 53秒

To aki_sp33 さん

ショートカットはWscript.ShellのCreateShortcutで作成でき、
CreateShortcutで既存の.lnkファイルを指定すると設定内容が
更新されます。

以下サンプルです。
-----------------------------------------------

Set loShell = Wscript.CreateObject("Wscript.Shell")
Set loSC = loShell.CreateShortcut("C:\TEST.lnk")
With loSC
  .TargetPath = "C:\WINDOWS\NOTEPAD.EXE"
  .Arguments = "C:\TEST.TXT"
  .IconLocation = "C:\WINDOWS\NOTEPAD.EXE,0"
  .Save
End With
Set loSC = Nothing

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 24日 21時 43分 21秒

お助け下さい。
前にも投稿しましたが、ショートカットのリンク先と作業フォルダの変更をするVBScriptの記述の仕方がわかりません。過去の記事を検索して見てもさっぱりです。もしかすると不可能なのでしょうか?
どなたか無知な私を助けていただけませんでしょうか。

楽々園の秀 さん (null) 2006年 09月 21日 17時 16分 51秒
URL:null

To: a3 さん

どうも回答ありがとうございました。
すみません。環境書き忘れていました。WinXP Pro SP2です。

結果から言いますと改善されませんでした。
""で囲まなくても引数はフルに来ていました。
""は安全側と言うことで現在付加したままにしています。

wshbbs.vbsの最後にあるSub ScriptQuit(sSaveMessage)にて

WScript.Arguments は引数を半角スペースで分割しているのですね。
sTempFileName=WScript.Arguments(0) で取得しているから最初の半角スペースまで
がファイル名になってしまいこの現象のとなっているようです。

下記の通りコードを追加、合成復元して解決しました。
なんか無理矢理な気がしますが、正しいですよね?

Sub ScriptQuit(sSaveMessage)
     If WScript.Arguments.Count >0 Then
          sTempFileName=WScript.Arguments(0)
          If Left(sTempFileName,1)="/" Then
               For i = 1 to WScript.Arguments.Count-1
'                    msgbox "sTempFileName" & i & WScript.Arguments(i)
                    sTempFileName = sTempFileName & " " & WScript.Arguments(i)
               Next
               sTempFileName=Right(sTempFileName,Len(sTempFileName)-1)
'               msgbox "sTempFileName = " & sTempFileName
               Set ts=Fs.CreateTextFile(sTempFileName,True)
               ts.Write sSaveMessage
               ts.Close
          End If
     End If
     WScript.Quit
End Sub



> >楽々園の秀 さん
>
> wshbbs.vbsには
> >download.command=wscript.exe wshbbs.vbs /%tmpfile%
> と指定するよう書いてありますが、
>
> WshLab.hta & wshbbs.vbsの導入先が "C:\Program Files"の下にあると
> "C:\Program "ファイルができてしまいますね。
>
> ※このファイルがあると、サービスが起動しなかったり
>  いろいろ問題がでることがありますので、対策しておく必要があると思います。
>
> 問題がないようにするには
> download.command=wscript.exe wshbbs.vbs /"%tmpfile%"
>
> と%tmpfile%を""で囲むと、問題がなくなると思います。
> 一度、お試しください。

a3 さん 2006年 09月 21日 09時 31分 51秒

>楽々園の秀 さん

wshbbs.vbsには
>download.command=wscript.exe wshbbs.vbs /%tmpfile%
と指定するよう書いてありますが、

WshLab.hta & wshbbs.vbsの導入先が "C:\Program Files"の下にあると
"C:\Program "ファイルができてしまいますね。

※このファイルがあると、サービスが起動しなかったり
 いろいろ問題がでることがありますので、対策しておく必要があると思います。

問題がないようにするには
download.command=wscript.exe wshbbs.vbs /"%tmpfile%"

と%tmpfile%を""で囲むと、問題がなくなると思います。
一度、お試しください。


楽々園の秀 さん (null) 2006年 09月 19日 16時 31分 37秒
URL:null

自己レスです。
Sub ScriptQuit(sSaveMessage)
に処理がありました。

どうも板汚し済みませんでした。

> To:管理人むたぐち様
>
> WSH Lab.hta と wshbbs.vbs を利用させていただいてます。
中略
> 書き出さない様に致したく、コードの教示をお願いします。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 19日 10時 02分 30秒

度々の訪問失礼します。
簡単なセットアッププログラムを作っております。
任意のホルダー"testFolder"の中にSetUp.vbsというスクリプトファイルがありこれを起動させることにより同じフォルダーの中にあるtest.vbs(VBS Script File), P.ico(アイコン)をC:\mkFolder\に移動し、tst(ショートカット[test.vbsのシートカット]),をディスクトップに移動するものなのですが、ホルダー"testFolder"をコピーした後このSetUp.vbsを起動すると当然のことながらtst(ショートカット)がコピー元のtest.vbs(VBS Script File)にリンクされます。これを回避するためにシートカットのリンクの変更もしくは新しくショートカットを作るコードを教えて頂きたいのですが
ちなみに下記は、SetUp.vbsのコードです。
-------------------------------------------------------------------
Dim scrDir 'As String
Dim ink 'As String
Dim vbs 'As String
Dim ico 'As String
Dim fs 'As String
Dim FlDPass 'As String
Dim opnPath 'As String
CreateObject("Scripting.FileSystemObject").CreateFolder "C:\mkFolder\"
scrDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
If Right(scrDir, 1) <> "\" Then
   scrDir = scrDir & "\"
End If
ink = scrDir & "\" & "test.lnk"
vbs = scrDir & "\" & "test.vbs"
ico = scrDir & "\" & "P.ico"

Set fs = CreateObject("Scripting.FileSystemObject")
FlDPass = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
fs.MoveFile ink, FlDPass
fs.MoveFile vbs, "C:\mkFolder\"
fs.MoveFile ico, "C:\mkFolder\"
--------------------------------------------------------------------
宜しくお願い致します。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 18日 12時 30分 02秒

palazzo さん。お礼が遅くなりすみませんでた。
<CreateObject("Scripting.FileSystemObject").CreateFolder "c:\Mkfoldr\">
に訂正したところ動くようになりました。
大変有り難うございました。

palazzo さん 2006年 09月 18日 11時 26分 23秒

>aki_sp33 さん

すみません。

CreateObject("Scripting.FileSystemObject").CreateFolder "c:\Mkfoldr\"

です。IDから「S」が抜けていました。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 18日 09時 16分 13秒

palazzo さん。早速のご回答有り難うございます。
CreateObject("Scripting.FileSytemObject").CreateFolder "c:\Mkfoldr\"
を記述して実行してみましたが、エラーが発生します。
<エラー内容>
---------------------------------------------------------------
エラー:Activex コンポーネントは、オブジェクトを作成できません。
    Scripting.FileSytemObject
コード:800A01AD
ソース:MicroSoft VBScrit 実行時エラー
---------------------------------------------------------------
初心者ですのでどう加工して記述すればよいのかわかりません。
記述方法を教えてくだされば幸いです。


palazzo さん 2006年 09月 17日 23時 56分 56秒
URL:http://homepage2.nifty.com/blu-nero/

>aki_sp33 さん

まず旧来のDLLのAPIの類はWSHからは直接参照できません。どうしても使用したいのなら、同等のAPIをラッピングしたActiveXDLLを作成する必要があります。
目的はフォルダを生成するだけのようですが、そのAPIに固執する必要があるのでしょうか。単純に目的を果たすだけなら、

CreateObject("Scripting.FileSytemObject").CreateFolder "c:\Mkfoldr\"

ではいけないのでしょうか。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 17日 23時 03分 28秒

度々の投稿失礼します。
VBAを使って下記のコードを作りましたが
VBScriptで記述したいのですが何方か教えて頂けませんでしょうか?

<Cドライブに新しく"Mkfoldr"というホルダーを作る>
Private Declare Function MakeSureDirectoryPathExists _
 Lib "imagehlp.dll" (ByVal lpPath As String) As Long
Sub Mkfoldr()
MakeSureDirectoryPathExists ("c:\Mkfoldr\")
End Sub

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 17日 17時 59分 40秒

palazzo さん
見事、ExcelFileを開くことが出来ました。
誠に有り難うございました。
これからも御教授程宜しくお願いいたします。

palazzo さん 2006年 09月 17日 15時 52分 10秒
URL:http://homepage2.nifty.com/blu-nero/

みなさん、はじめまして

>ヒロ さん
WMIの機能で実現できます。サンプルはScriptomaticから作らせて頂きました。

On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process",,48)
For Each objItem in colItems
  If UCase(objItem.Name) = "EXCEL.EXE" Then
    Wscript.Echo "Name: " & objItem.Name
    Exit For
  End If
Next

>aki_sp33さん
実行スクリプトパスを加工する事で把握できます。ファイル名は任意のものに置き換えて下さい。

Option Explicit

Const OPN_FILE  = "test.xls"  'As String

Dim scrDir  'As String

Dim opnPath  'As String

scrDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

If Right(scrDir, 1) <> "\" Then
     scrDir = scrDir & "\"
End If

opnPath = scrDir & OPN_FILE

WScript.Echo opnPath

>らいど さん
確かに出来ませんね。スクリプトだとダメだという事なんでしょうか。試してはいませんが、MakeExeでスクリプトをExe形式にすると動くかも知れませんね。あと気になったのが、ArgNameはVBSやJSでは取得できないのでは?あれはWSFのXMLに記述するものなので。

らいど さん 2006年 09月 17日 05時 07分 08秒

こんにちは。
スクリプト実行時のコマンド引数の受け取り方について質問をさせて下さい。

これまではWshArguments(.Named/.UnNamed)を利用して特に問題なく引数を取得しておりました。しかし今回Windowsタスクからスクリプトを実行したところ引数が取得できなく困ってしまいました。

当初はWindowsタスクの方が引数を渡していないのかと思いましたがメモ帳の実行パスに引数としてファイル名を指定して実行したところ意図したファイルを開く事が出来ましたので受け取り方に不備があるのではないかと思えます。

Windowsタスクから引数の受け取り方、もしくはWshArguments(.Named/.UnNamed)以外での引数の受け取り方をご存知の方がおりましたら宜しくお願いします。

環境:w2000/wxp(h)

Windowsタスクの実行パス:
c:\arg.vbs /a:alpha /b:beta china /d:delta english

確認に使用したスクリプト(c:\arg.vbs):
set Arg = wscript.arguments
set ArgName = Arg.named
set ArgUnName = Arg.unnamed
'----------------------------
msg = msg & "Arg.count=" & Arg.count & vbCRLF
for i=0 to Arg.count-1
 msg = msg & "Arg.item("&i&")=" & Arg.item(i) & vbCRLF
next
msg = msg & "ArgName.count=" & ArgName.count & vbCRLF
msg = msg & "ArgUnName.count=" & ArgUnName.count & vbCRLF
'----------------------------
wscript.echo msg

結果:
Arg.count=0
ArgName.count=0
ArgUnName.count=0

追加:
同様の実行パスを指定したショートカットからは問題なく引数が受け取れるのでWindowsタスクにショートカットファイルを指定してみましたが引数部分がきれいにカットされて実行ファイルパスのみで作成されてしまい代案にする事が出来ませんでした。

aki_sp33 さん (akira@co-sp-soma.jp) 2006年 09月 16日 12時 52分 46秒

VBScriptの記述例を教えて下さい。
任意のホルダーにあるVBScript ScriptFileの現在のパスを調べ、同じホルダーの中にあるExcelワークシートを開くVBScriptの記述の仕方がわかりません。ExcelVBSを使うと簡単なんですが、マクロセキュリティーを回避してオープンさせたいので。ちなみにホルダー名は不特定です。どちら様か、ご伝授願います。

ヒロ さん 2006年 09月 15日 17時 39分 41秒

はじめまして。ヒロと申します。

WSHでエクセルが今、起動中かどうかを調べる手段はありますか?
どなたかご存知のかた教えてください。

楽々園の秀 さん (null) 2006年 09月 15日 08時 33分 47秒
URL:null

To:管理人むたぐち様

WSH Lab.hta と wshbbs.vbs を利用させていただいてます。
先日気づいたのですが、両ファイルとログが保存してある
フォルダのルートに 取込完了時の メッセージが 拡張子なしの
テキストファイルとして保存されています。
ファイル名は保存パスが下記としますと
C:\Program Files\Wshbbs\wshbbs.vbs
C:\Program となります。
     ↑半角スペースがついています。
アクティブディレクトリーのネットワークドライブでも同様です。

保存されているメッセージの一例は 次の通りです。

新着記事はありませんでした。

このメッセージはwshbbs.vbsが出しているようなので、コードを
読んでみましたが、解読できず。
書き出さない様に致したく、コードの教示をお願いします。

TAKA さん 2006年 09月 12日 13時 20分 20秒

a3さん こんにちは。

ありがとうございました。
たしかに、strGatewaymetric = Array(1)
とすることで、動作をすること、エラーがでないことを確認しました。

a3 さん 2006年 09月 12日 13時 02分 47秒

TAKA さんこんにちは。

ちょうど、同じような話がMSのサイトにありますね。

Hey, Scripting Guy!
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/aug04/hey0825.mspx

エラー行が14行ということで、
>errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
SetGatewaysメソッドがエラーになっていると推測をつけます。

Wbemtestを起動してクラスを開く- Win32_NetworkAdapterConfiguration して
SetGatewaysをダブルクリックしてInput引数を確認しますと

私のところの環境では
第1引数:DefaultIPGateway CIM_STRING|CIM_FLAG_ARRAY
第2引数:GatewayCostMetric CIM_UINT16|CIM_FLAG_ARRAY
となっています。

第2引数は数値の配列でなくてはいけないようです。

(元)strGatewaymetric = 1
(新)strGatewaymetric = Array(1)

でどうでしょうか?

TAKA さん 2006年 09月 12日 11時 27分 02秒

WSHスクリプトでIPアドレスを変更するスクリプトを作成しました。

以下のようなスクリプトでIPアドレスを変更した際、
行:14
文字:5
エラー:種類が一致しません

コード:80041005
ソース:SWbemObject

というエラーになります。
-------------------------------------------------------------------
strComputer = "."

Set args = Wscript.Arguments

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
  ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array("192.168.11.101")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("")
strGatewaymetric = 1
For Each objNetAdapter in colNetAdapters
  errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
  errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
Next
--------------------------------------------------------------------

どこが間違ってますか?
以前は動いていたと思うのでなぜこのようになったのか・・・。

魔界の仮面弁士 さん 2006年 09月 11日 10時 10分 58秒

》msx さん 2006年 09月 08日 23時 25分 59秒
> はじめまして、VxEditorについてなんですが
> &#22323;というフォントが表示できないのですがこれは仕様なんでしょうか

&#22323; という事は、U+5733 …『{土}+{川}』の文字ですね。

VxEditor というのは知らなかったので、仕様かどうかは判断できませんが、
Vector でバージョン0.4.3.0をダウンロードして少し試してみたところ、
画面に表示できないだけではなく、『{土}+{川}』や、立法メートル『{m}^{3}』といった
ファイル名を開く事もできないようですね。

どうやら、文字コードとしては Unicode をサポートしているようですが、
対応している文字範囲は、Shift_JIS 範囲の文字に限られているように見えますね…。

msx さん 2006年 09月 08日 23時 25分 59秒

はじめまして、VxEditorについてなんですが
&#22323;というフォントが表示できないのですがこれは仕様なんでしょうか

板違いかも知れませんが、なにぶん本家のページが閉鎖されていますので
ご存知の方がいらっしゃいましたら、よろしくお願いします。

a3 さん 2006年 08月 29日 13時 58分 06秒

tom3さん、こんにちは。

>自作したCOMのDLLをWSHから呼び出す方法を教えてください。
参照設定を使うやり方は事前バインディングといいます。
もうひとつやり方があってそれは実行時バインディングといいます。

□事前バインディング(AccessVBAの場合)
参照設定したうえで
Dim bee1 As New bee

※上の式は以下のようにも書けます。
Dim bee1 As bee
Set bee1 = New bee

□実行時バインディング(AccessVBAの場合)
Dim bee1 As Object
Set bee1 = CreateObject("bee")

WSHは、実行時バインディングかつ変数の型宣言できませんので
VBScriptでかきますと、

Dim bee1
Set bee1 = CreateObject("bee")

のような形になると思われます。 ご参考まで。

追伸:変数名は勝手にbee1に変更しました。
   変数名とオブジェクト名がごっちゃになるのが感覚的にいやなので。

(管理人により削除) さん ((管理人により削除)) 2006年 08月 29日 11時 34分 49秒
URL:(管理人により削除)

(管理人により削除)

(管理人により削除) さん ((管理人により削除)) 2006年 08月 25日 15時 39分 20秒
URL:(管理人により削除)

(管理人により削除)

happy.lukky さん 2006年 08月 25日 11時 08分 47秒

魔界の仮面弁士さんへ
できました。助かりました。ありがとうございます。

つちや さん 2006年 08月 25日 11時 08分 10秒

VBScriptでRC4の暗号化・復号をおこなうスクリプトを作ってみました。せっかくなのでこちらにも。ただ、このままだとExcel・Wordの暗号化のような脆弱性を抱えてしまうので注意。実用の際はRC4そのものの弱点(WeekIVと呼ばれるもの)への対策も含めて少々魔改造した方が無難かも(そんなに手間ではないと思いますが、慎重さはもちろん必要です)。まあ、保証も何もないので、レクリエーションとしてのスクリプトと考えていただければ。

Function RC4(strPwd, hexText)
 Dim arrState(255)
 Dim arrKey(255)
 
 intLength = Len(strPwd)
 For i = 0 To 255
   arrKey(i) = Asc(Mid(strPwd, (i Mod intLength)+1, 1))
   arrState(i) = i
 Next
 
 j = 0
 For i = 0 To 255
   j = (j + arrState(i) + arrKey(i)) Mod 256
   temp = arrState(i)
   arrState(i) = arrState(j)
   arrState(j) = temp
 Next
 
 i = 0
 j = 0
 For k = 1 To Len(hexText) Step 2
   i = (i + 1) Mod 256
   j = (j + arrState(i)) Mod 256
   temp = arrState(i)
   arrState(i) = arrState(j)
   arrState(j) = temp
   n = arrState((arrState(i) + arrState(j)) Mod 256)
   bytNum = CByte("&H" & Mid(hexText, k, 2)) Xor n
   result = result & Right("0" & Hex(bytNum), 2)
 Next
 RC4 = result
End Function

Function Text2Hex(strText)
 For i = 1 to Len(strText)
  hexText = Hex(Asc(Mid(strText, i, 1)))
  If Len(hexText) = 1 Then hexText = "0" & hexText
  result = result & hexText
 Next
 Text2Hex = result
End Function

Function Hex2Text(hexText)
 intLength = Len(hexText)
 flg = False
 For i = 1 to Len(hexText) step 2
  If flg Then
   flg = False
  Else
   bytAsc = CByte("&H" & Mid(hexText, i, 2))
   If (&H00 <= bytAsc And bytAsc <= &H80) Or _
    (&HA0 <= bytAsc And bytAsc <= &HDF) Then
     '1バイト文字の場合
    strChr = Chr(bytAsc)
   ElseIf (&H81 <= bytAsc And bytAsc <= &H9F) Or _
    (&HE0 <= bytAsc And bytAsc <= &HFF) Then
     '2バイト文字の場合
    strChr = Chr(CInt("&H" & Mid(hexText, i, 4)))
    flg = True
   End If
   result = result & strChr
  End If
 Next
 Hex2Text = result
End Function

Function Encode(Pass, Source)
 Encode = RC4(Pass, Text2Hex(Source))
End Function

Function Decode(Pass, Source)
 Decode = Hex2Text(RC4(pass, Source))
End Function

'以下テスト用
data = "私はカモメ"
pass = "123456789"
R = Encode(pass, data)
MsgBox data & vbCrLf & R & vbCrLf & Decode(pass, R)

魔界の仮面弁士 さん 2006年 08月 25日 09時 29分 25秒

happy.lukky さん、こんにちは。

> vb6でいうところの、「chdir」と「ChDrive」はできるのでしょうか?
WshShell オブジェクトの CurrentDirectory プロパティを試してみてください。

http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0201.mspx
http://www.microsoft.com/japan/technet/community/columns/scripts/sg0903.mspx

(管理人により削除) さん ((管理人により削除)) 2006年 08月 24日 11時 43分 25秒
URL:(管理人により削除)

(管理人により削除)

tom3 さん 2006年 08月 23日 12時 45分 20秒

こんにちは。
自作したCOMのDLLをWSHから呼び出す方法を教えてください。
ちなみにAccessのVBAでは参照設定で「ComSample」という名前が登録されていて、下記のようなコードで呼び出し可能です。

Dim bee As New bee
bee.FindFlower (Me.TextBox1)

お手数ですがよろしくお願いいたします。

嫌々OE使い さん 2006年 08月 22日 16時 38分 39秒
URL:http://www.codeproject.com/com/Outlook_Express_Messages.asp

こんにちわ。IStoreFolder / IStoreNamespace ってスクリプトからは使えないんでしょうかね。面白そうなんだけど。

happy.lukky さん 2006年 08月 22日 15時 52分 24秒

素人の質問ですみません。
vb6でいうところの、「chdir」と「ChDrive」はできるのでしょうか?

Return