• 締切済み

VBScript で ADO Streamオブジェクトの Writeを使いたい

VBScriptでバイナリファイルを書き込みたいのですが、以下のコードで Writeしようとするとコンパイルエラーとなります。 なぜですか? Option Explicit Dim stream Dim i Dim line Set stream = CreateObject("ADODB.Stream") stream.Open stream.Type = 1 line = Array(61,0,13,0,10,0) stream.Write line stream.SaveToFile "bbb.txt", 2 stream.Close Set stream = Nothing

みんなの回答

回答No.2

なるほど、、、、です。。。 こちらが教えてもらっちゃいました。 ありがとうございました。

回答No.1

そちらのコードをエクセルVBAにて実行したところ、そちらの問題となっているところが再現いたしました。 writeのパラメータがバイト型でなければならないようです。 http://homepage1.nifty.com/MADIA/vb/vb_bbs/200311_03110051.html VBAなので、byte()で宣言して、各配列に値をセットしたら、通りました。 型宣言できない状態では、ADODB.Streamオブジェクトを利用した実現は無理っぽいすね。

mwatana2
質問者

補足

これでなんとかうまくいきました。 dim sOut dim sIn set sOut = CreateObject("ADODB.Stream") set sIn = CreateObject("ADODB.Stream") With sOut .type = 2 .charset = "iso-8859-1" .open End With For i = 0 to &hff sOut.writeText(ChrW(i)) 'uses ChrW next sOut.saveToFile "bin.bin", 2 sOut.close With sIn .type = 1 .open End With sIn.LoadFromFile("bin.bin") line = sIn.Read msg = "" For i = 1 To LenB(line) ch = AscB(MidB(line, i ,1)) msg = msg & " " & Hex(ch) Next sIn.Close Wscript.Echo msg

関連するQ&A

  • ADO オブジェクトの渡し方

    こんにちは。ADOについてお教えください。 フォームをロード時に接続プロシージャと切断プロシージャを走らせたいと思います。 ConnectDatabaseを呼び出しは成功しますが、CloseDatabase呼び出しには失敗します。 スコープの問題で、rs、cnのオブジェクトが無い為だと思います。 ConnectDatabaseで作成されたcn、rsオブジェクトを別の関数で処理するにはどのようにコードをかけばよろしいでしょうか?宜しくお願い致します。 Private Sub Form_Load() Call ConnectDatabase Call CloseDatabase End Sub Module1 ------------------ sub ConnectDatabase() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset 処理~~~~ end sub sub CloseDatabase() rs.Close cn.Close Set rs = Nothing Set cn = Nothing end sub

  • vbscript内にvbscriptを記述

    option explicit on error resume next dim objie, objwshell set objwshell = createobject("wscript.shell") objwshell.appactivate "microsoft internet explorer" set objie = createobject("internetexplorer.application") objie.width = 380 objie.height = 100 objie.navigate "about:blank" objie.document.write "<html><head><title>終了処理</title><script language='vbscript'>" & vbcrlf objie.document.write "option explicit" & vbcrlf objie.document.write "function osu()" & vbcrlf objie.document.write " dim aaa" & vbcrlf objie.document.write " Set aaa = CreateObject('Wscript.Shell')" & vbcrlf objie.document.write " aaa.run 'wscript ログオフ.vbs', 1, true" & vbcrlf objie.document.write " set aaa = nothing" & vbcrlf objie.document.write "end function" & vbcrlf objie.document.write "</script></head>" & vbcrlf objie.document.write "<body bgcolor='#CCCCCC' style='overflow:hidden'><form name='form1'>" & vbcrlf objie.document.write "<input type='button' name='button1' value='ログオフ' onClick='osu()'>" & vbcrlf objie.document.write "</form></body></html>" & vbcrlf objie.visible = true objie.toolbar = false objie.statusbar = false objie.resizable = false set objwshell = nothing set objie = nothing 上記のプログラムを[.vbs]という拡張子で保存。 これは、vbsファイルをクリックするとIEの画面が出て、ログオフのボタンをクリックするとログオフするというものなのですが、うまくいきません。 vbsの中にまたvbsを記述しているからでしょうか?

  • ADODB.Streamを使って新規にファイルを作

    ADODB.Streamを使って新規にファイルを作成することは可能ですか? --------------------------------------------- Sub test1() Dim n As Long n = FreeFile Open "C:\sample.html" For Output As #n Print #n, "テキスト" Close #n End Sub これで、新規にhtmlファイルを作れるのですが --------------------------------------------- Sub test2() Dim st As Object Dim Sample As String Set st = CreateObject("ADODB.Stream") オブジェクトに保存するデータの種類を文字列型に指定する st.Type = adTypeText 文字列型のオブジェクトの文字コードを指定する st.Charset = "UTF-8" st.Open 'オブジェクトのインスタンスを作成 st.WriteText Sample, adWriteLine 'ココでエラー オブジェクトの内容をファイルに保存 st.SaveToFile ("c:\sample.html"), adSaveCreateOverWrite オブジェクトを閉じる st.Close メモリからオブジェクトを削除する Set st = Nothing End Sub --------------------------------------------- この方式で新規にファイルを生成して保存することは可能ですか? 該当部分でエラーが発生します。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • VBScriptの繰り返し文について

    こんにちは。下のスクリプトでクリックボタンをクリックすると、サブフォルダ名が表示されるようにしたいのですが、どこのクリックボタンをクリックしても、一番下のサブフォルダの名前が表示されてしまいます。何かいい方法はあるでしょうか。よろしくお願いいたします。 <html><head> <title>test</title> </head> <body> <h3>サブフォルダ一覧</h3> <table border> <tr><td>サブフォルダ名</td><tr> <script language=VBScript> <!-- Option Explicit Dim FSO Dim TestFolder Dim F Dim X set FSO = CreateObject("Scripting.FileSystemObject") Set TestFolder = FSO.GetFolder(".").ParentFolder For Each f IN TestFolder.SubFolders X = f.name Document.Write "<tr><td> " & X & " </td></tr><td><input type=button onclick=setnum value=クリック></td></tr>" Next Sub setnum msgbox X End Sub Set FSO = Nothing Set TestFolder = Nothing --> </script> </table> </body></html>

  • vbscriptでhtmlのソース保存

    vbscriptにてIEを操作し、指定URLのhtmlソースコードをファイルに保存するスクリプトを作成しています。 ですが、サイトによっては取得に失敗するケースがあり、原因が分かりません。 下記の例では、yahooのトップページは取得できますが、amazonのトップページは 取得できませんでした。 申し訳ありませんが、原因と解決策を教えていただきたいです。 よろしくお願いいたします。 尚、環境はWinXP(SP3) 、IEはver8を使用しています。 '--------------------------------------------' Option Explicit Dim objIE Dim strBody Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.amazon.com/" 'objIE.Navigate "http://www.yahoo.co.jp/" Do Until objIE.Busy = False WScript.sleep(250) Loop' strBody = objIE.Document.Body.InnerHtml msgbox strBody Dim fso, tf Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.CreateTextFile("test.txt", True) tf.Write strBody tf.Close Set objIE = Nothing '--------------------------------------------'

  • 「VBScript」ADODB.Streamにおけるファイル読み込みについて(他

    以下の解決方法をご教授願えませんでしょうか。 宜しくお願いいたします。 前提:ギガバイト単位のテキストファイル(サーバのログファイル)を扱うスクリプトを作成したい。 必須機能:grep機能、動作が軽快で早い事  また、できるだけ外部ツールを使用したくない事(サーバ上に載せる事も視野に入る為) 私が行った事: 1. まずテキストファイルとしてgrepするスクリプトを作成。  方法(1) ReadLineで1行ずつ読み込み、正規表現にてマッチする行を変数に格納  その後、その変数をファイルに書き出ししてみた。   ⇒処理速度が遅すぎて使い物にならない。  方法(2) &演算に処理を食い、速度が遅くなる為、一度ファイルを読み込み  正規表現にてマッチしない行を1度に削除し、新しいファイルに書き出してみた   ⇒テストファイルだと狙った通りに処理がかなり早くなったが、実ファイルが    ギガバイト単位の為、メモリオーバーフローを起こし使い物にならない    (ま、そりゃそうだよねorz)  方法(3) &演算に処理を食うのは避けたい為、ReadLineにて行毎に読み込み、  正規表現にてマッチした行をWriteLineにてファイルに書き出し。   ⇒(1)よりは早くなり、ひとまず完成。ただし、それでも処理が遅いのと    CPUパワーを使う為に処理中他の作業がし辛いのが問題。 2. そこで、1度捨てた(2)の方法を何とか使えないかと思案し、ファイルを   適当なサイズで分割する形にしようかと思い、以下の分割用スクリプトを作成   ⇒でも、結局LoadFromFileにてメモリ上にファイルを展開する為、    メモリオーバーフローを起こす事に。 要は、c言語のfreadみたいな事ができれば解決できると思うのですが… この方法に限らず、何かいい案があればアドバイスをお願いいたします。 以下、バイナリーにて分割するスクリプト Option Explicit Const FilePath = "分割対象ファイルパス" Const ReadLen = 134217728 Dim bytData, intX intX = 0 With CreateObject("ADODB.Stream")  .Open  .Type = 1  .LoadFromFile(FilePath)  .Position = 0  Do Until .EOS   bytData = .Read(ReadLen)   With CreateObject("ADODB.Stream")    .Open    .Type = 1    .Write(bytData)    .SaveToFile FilePath & "." & CStr(intX), 1    .Close   End With   intX = intX + 1  Loop  .Close End With

  • VBscriptでIEスクリプト動かない

    VBScript初心者です。HTMLに書かれた文字を取ってきて環境変数に入れるスクリプトを作っているのですが、うまく動きません。かなりデバッグも頑張りましたしレファレンスも見ましたが解決に至らず。ご教示お願い致します。 Dim ie Set ie = CreateObject("InternetExplorer.Application") ie.visible = True Dim wshShell Dim wshUserEnv Set wshShell = CreateObject("WScript.Shell") Set wshUserEnv = wshShell.Environment("User") Main Public Function Main() Dim hirake Dim nakami Dim taagetto Dim kekka hirake = "etqw.dip.jp" ie.Navigate hirake Do Until ie.Busy = False Or ie.readystate <= 3 WScript.Sleep 100 Loop WScript.Sleep 100 nakami = ie.Document.getElementsByClassName("status-table") Set taagetto = nakami(2).innertxt Set kekka = Mid(taagetto,InStr(taagetto,"Password:") + 1) wshUserEnv.Item("_KOREDAYO") = kekka ie.Quit Set ie = Nothing Set hirake = Nothing Set nakami = Nothing Set taagetto = Nothing Set kekka = Nothing End Function

  • ASPからVBScriptの実行

    ASPから下のVBScriptを実行使用とすると "500"Internal Server Error が出力されて困ってます。 へるぷみー Dim objWSHShell Set objWSHShell=WScript.CreateObject("WScript.Shell") objWSHShell.Run "cscript.exe d:\test.bat" objWSHShell=Nothing

  • (泣)VBscriptでinnerhtmlを使って表示したい・・・

    VBscriptをつかってHTA上で実行した結果をHTMLへ動的に表示させたいのですがうまく出来ずに悩んでおります。一応VBの部分はちゃんと出来ていることは確認していますが表示が全くダメです。 どなたか教えて下さい。 Option Explicit Dim objAccess Dim objDB Dim objRS Set objAccess = CreateObject("Access.Application") objAccess.Visible = True objAccess.OpenCurrentDatabase("c:\happy\island.mdb") Set objDB = objAccess.CurrentDb Set objRS = objDB.OpenRecordset("SELECT COUNT(*) AS 件 FROM 住所録テーブル") WScript.echo "件数=" & objRS("件数") objRS.Close Set objRS = Nothing Set objDB = Nothing Set objAccess = Nothing 件数をWScript.echoではなくinnerhtmlで表示したいです。 またSQLを("SELECT * FROM 住所録テーブル")にした場合データをレコードセットで抽出し必要なデータを表にして表示をしたいのですが・・・(これもinnerhtmlを使いたい)

専門家に質問してみよう