[[20041112121228]] 『マクロでメモ帳を開いて指定した行を編集したい』(ふー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでメモ帳を開いて指定した行を編集したい』(ふー)

Excel2000のマクロでメモ帳を開いて、指定した行にあるデータを
別のデータに書き換えて、保存するという作業をしたいのです。

すごく困っているのでご存知の方は教えてくださいm(_ _)m


 何を行いたいのかが見えません。

 >Excel2000のマクロでメモ帳を開いて、
どういうタイミングで開きたいの?
中身は空っぽで良いの?それとも現在開いているシートのデータをメモ帳に表示させるの?

 >指定した行にあるデータを別のデータに書き換えて、
メモ帳上で書き換えるの?
それともExcel上で書き換えるの?
別のデータは手作業で入力するの?

 >保存するという作業をしたいのです。
テキストファイルとして保存したいの?
Excelファイルとして保存したいの?
 
そういった処理を行いたい理由、背景が解らないと何をしたいのかがさっぱりです。
 
(ご近所PG)回答できる時間は無いかもだけど〜


指定したフォルダに保存してあるdatファイルをメモ帳で開いて、
そのファイル内にすでにある3行目のデータを別の記述に書き直して
そのファイルを上書き保存して終了させるというマクロを作成したいのです。
処理はフォルダにあるファイル数分をfor〜nextでまわそうと思ってます。
説明不足ですみませんでした。

 取りあえず再度疑問点を挙げますが、

 >3行目のデータを別の記述に書き直して
っていうのはメモ帳上で手作業で編集するの?

 >そのファイルを上書き保存して終了させる
っていう動きをマクロで行いたいの?
 
あと、
Excelの機能は必要なの?
単にVBAを利用したいだけなの?
 
最後に、
自分なりにマクロを作ってみたけどそれが動かないので質問しているの?
それともまだまったくの未着手なの?
マクロ記述の何処までが解ってて、何処が解らないの?
(ご近所PG)


 定番の処理ですね。メモ帳は使いませんが。

 参考です。
http://www.officetanaka.net/excel/vba/file/file08.htm
http://www.dps-net.co.jp/index.files/internship/y.n/vbfile.html 

   (INA)

 (ご近所PG様)
疑問点について:@3行目のデータをメモ帳上でマクロで固定の値に変更したいです
              Aメモ帳を上書きして終了させるのもマクロで行いたいです。
最後に・・・について:今回作成しようとしているのはメモ帳メインなので、 
                  いろいろ調べながら作成してる途中です。が、一番メインになる
                  メモ帳を開いて修正して保存するという作業がわからないために
                  困っています。
 (INA様)
添付していただいたページも参考にさせてもらいます。


 txtファイルの編集に、メモ帳なんて使わないからこだわらないでね。
 VBAで外部アプリケーションの制御なんて面倒なこと必要ないから。 
  (INA)


 javaとかと同じで、メモ帳以外で開いて保存すると文字化けになったりするので
 メモ帳でしか開けないんです。
 そのDatファイル自体がPGMファイルなので扱いに困ってます。
 何か良い方法はないですか?

 外部PG(メモ帳)を呼び出してその動きを詳細に制御するのはあまり現実的ではありません。
何が理由で動かなくなるか解らないし。
単純にファイル内容を変更したいだけならば、マクロ内部だけで処理すべきです。
INAさんが示したページを参考に…
 
どうしてもメモ帳上で編集する必要があり、
その動作の全てをマクロから制御するのであれば、
APIのSendMessageを調べてみてください。
ちなみに私はそういう処理をやった事はありません。何処まで制御できるのかしら。
そもそもメモ帳にこだわる理由とは?編集過程をメモ帳上で画面に表示したいんでしょうか。謎。
 
と、頑張って書いてたら追加情報がわんさか。
PGMファイル?何だろう。調べてみよう…
(ご近所PG)


 > メモ帳でしか開けないんです。
 私の提示した方法ではダメだったということでしょうか?文字化けしたの?
 その他にアプリケーションで開く必要性がなにかあるのでしょうか?

 こういったExcel VBAと関連の薄い処理は、本職のご近所PGさんにお任せ〜。   ・・・//^(#`∀´)Ψ
  (INA)

 pgmって画像か…
ヘッダ数行に画像のサイズを示す情報があってそれを書き換えたいのかしら。
Binaryでアクセスして必要な部分だけ書き換えるようにすればいけるかもね。
 
 >こういったExcel VBAと関連の薄い処理は、本職のご近所PGさんにお任せ〜。   ・・・//^(#`∀´)Ψ
?!Σ( ̄□ ̄;)
(ご近所PG)

 予想通り最初の質問内容からは相当にかけ離れた回答になった気がしないでもない今日この頃ですが、

 Vectorに
BMPtoPGMコンバータ 
http://www.vector.co.jp/soft/dl/win95/art/se288152.html
とかいうのがあったのでこれを使って画像を変換し、それを処理しようと思ってやってみました。
このソフトを使って変換したファイルだと、ごく普通のテキストファイルで作成できるみたいで、
処理結果から見る画像仕様は
・ヘッダが3行
・改行がCrLf(Windowsだから?)
・画像部分がテキスト
っぽかったので、以下の様に考えてみました。
 
Sub test()
    '変数宣言
    Dim intFNo As Integer
    Dim strPath As String
    Dim strLines() As String
    '定数宣言
    Const CstEditLine As Integer = 3
    '処理開始
    strPath = "c:\work\test.pgm" '対象ファイルパス
    strLines = Split("") '初期化 (0 To -1) になる
    intFNo = FreeFile '空き番号取得
    Open strPath For Input As #intFNo 'ファイルを開く
    Do While Not EOF(intFNo) 'ファイルの最後まで処理
        ReDim Preserve strLines(0 To UBound(strLines) + 1) '配列拡張
        Line Input #intFNo, strLines(UBound(strLines)) '行ごとにデータを取得
        If UBound(strLines) + 1 = CstEditLine Then '3行目なら
            strLines(UBound(strLines)) = "15" '16色にする?
        End If
    Loop
    Close #intFNo 'ファイルを閉じる
    If UBound(strLines) > -1 Then '何も無かったら何もしない
        Open strPath For Output As #intFNo '中身をクリアして開く
        Print #intFNo, Join(strLines, vbNewLine) '改行コードでくっつけて一括で書き込み
        Close #intFNo 'ファイルを閉じる
    End If
    '配列クリア
    Erase strLines
    MsgBox "処理終了"
End Sub
 
で、他にもあるのかしらと探してみたらネット上でpgm画像を使ってるページが在ったので、
http://www.incx.nec.co.jp/imap-vision/html/japanese/navi/navi2-6.html
ここの一番上のござ〜る画像を開いて見ました。
画像の仕様がいまいち解らないけど、この画像の中身から推測するに、
・ヘッダが4行
・#で始まる行はコメント行?
・改行がこの画像の場合はLf
・画像部分がバイナリっぽくみえる(Byteで数値情報を書き込んでいるっぽい)
なので、以下の様に処理してみる事にしました。
 
Sub test4()
    '変数宣言
    Dim intFNo As Integer
    Dim strPath As String
    Dim lngFileSize As Long
    Dim bytWk() As Byte
    Dim bytImage() As Byte
    Dim strTemp() As String
    Dim strHeader As String
    Dim lngHeaderLen As Long
    Dim strSplitChar As String
    Dim intWk As Integer
    Dim intIdx As Integer
    Const CstEditLine As Integer = 3
    '処理開始
    strPath = "c:\work\bazar.pgm" '対象ファイルパス
    strSplitChar = vbLf 'ヘッダデータを区切る文字
    lngFileSize = FileLen(strPath) 'ファイルサイズ取得

    intFNo = FreeFile '空き番号取得
    Open strPath For Binary As #intFNo 'バイナリモードでファイルを開く
    '取りあえず頭の100Byteを取得
    ReDim bytWk(0 To 99)
    Get #intFNo, 1, bytWk()

    'ヘッダ部分の取得
    strTemp = Split(StrConv(CStr(bytWk), vbUnicode), strSplitChar)
    strTemp(UBound(strTemp)) = "" '画像部分は消し
    'ヘッダの長さを取得(画像データの開始位置を取得)
    lngHeaderLen = LenB(StrConv(Join(strTemp, strSplitChar), vbFromUnicode))
    '画像部分取得
    ReDim bytImage(0 To lngFileSize - lngHeaderLen - 1) '領域確保
    Get #intFNo, lngHeaderLen + 1, bytImage() '画像部分取得
    Close #intFNo 'ファイルを閉じる

    'ヘッダ情報を書き換える
    intWk = 0
    For intIdx = LBound(strTemp) To UBound(strTemp)
        If Left(strTemp(intIdx), 1) <> "#" Then 'コメント行じゃない場合
            intWk = intWk + 1
        End If
        If intWk = CstEditLine Then
            strTemp(intIdx) = "15" '16色にする?
            Exit For
        End If
    Next
    'ヘッダ情報部をまとめる
    strHeader = Join(strTemp, strSplitChar)
    'ヘッダ情報部の長さ再取得
    lngHeaderLen = LenB(StrConv(strHeader, vbFromUnicode))

    'ファイルを初期化
    Open strPath For Output As #intFNo
    Close #intFNo 'ファイルを閉じる

    Open strPath For Binary As #intFNo 'バイナリモードでファイルを開く
    'データ書き出し
    'Put #intFNo, 1, strHeader
    'Put #intFNo, lngHeaderLen + 1, bytImage()
    '指定しなくてもいいや…
    Put #intFNo, , strHeader
    Put #intFNo, , bytImage()
    Close #intFNo 'ファイルを閉じる

    '配列クリア
    Erase bytWk
    Erase bytImage
    Erase strTemp

    MsgBox "処理終了"
End Sub

 以上…で、
変更したい3行目ってのは色深度ですか?
そこだけ変更しちゃって良いの?
と思いつつ…上記のコード内容を適当に読み取って、
ご自身が扱おうとしているpgmフォーマットとうまく照らし合わせて処理してください。
また、実行する時には必ず処理対象のファイルのバックアップを忘れないで下さい。
 
追記
PGMについてはさっぱりわからんので変な事してるかも。
というか画像を扱うような質問掲示板で聞いたら「一括で変換できるソフトありますよ」とか言われそう。
(ご近所PG)ちょい修正

  おおぉっーーー!

 > 予想通り最初の質問内容からは相当にかけ離れた回答になった気がしないでもない今日この頃ですが、
 予想通り途中で逃げ出して良かったと思う今日この頃ですが、(^_^;)

 >pgmって画像
 きっと、この段階でハマってたと思う。 

 手出さないで良かった・・・ (((;ΦwΦ;))) 

 ご近所PGさん。最近お忙しそうなところ、ご苦労様です。\(Φ_Φ)
    (INA)

 Excelとまるで関係ない感じになったような…Excelのオブジェクト一つも使ってないし(笑)

 >最近お忙しそうなところ
難点が解決したので余裕が出てきました。
 
(ご近所PG)


 確かに VB のまんまですね。(笑)
 さすがこうなると、ご近所PGさんの土俵ですね〜。(^_^;

 >難点が解決したので余裕が出てきました。
 それはよかったです。  逃げ道がないと困るし・・・(笑)

   (INA)

 PGMの仕様情報を見つけたので、今回の質問者であるふーさん以外に需要は無いと思うけど
一応関連情報ということで貼付けてみる。
 
画像フォーマット
http://zope.lab.tkikuchi.net/edu/image/01ImageFormat.html
 
pgm
http://www.not-enough.org/abe/manual/command/netpbm/pgm.html
 
最初の2Byteで形式判断するのね。
区切る文字はスペースだったりタブだったり改行コードだったり、色々なのね。
 
(ご近所PG)
#マクロ中、「"16"」と書いた部分を「"15"」と変更しました(一応)


 普通にWindows使っていると触れない内容ですから
 ファイルの中身の構成なんて気にしたこと無かったので、
 いつもと違った視点から勉強になりました。 (_ _) 
  (INA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.