[[20110129160433]] 『ファイルを開かずにマクロを実行』(あや) ページの最後に飛ぶ

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

 

『ファイルを開かずにマクロを実行』(あや)

基本的な事を教えてください。
さっきも別の質問を出していたのですが(解決済)、マクロの実行をいちいちファイルを開かずに行いたい場合には、どうすればよいのでしょうか。
フォルダの中にある複数の同じフォーマットのファイルを一度に修正したいのです。

例えば、こんな作業をします。

    Range("B2").Select
    ActiveCell.FormulaR1C1 = "変更しました"
    ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ"
    Range("D11").Select
    Sheets("修正").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "変更しました"
    ActiveCell.Characters(1, 2).PhoneticCharacters = "ヘンコウ"
    Range("A6:B10").Select
    Selection.ClearContents
End Sub

上記に、前後何かをつけたせばいいのだと思いますが、それが分かりません。
これが分かれば、色々応用がきくと思うので、どうぞ宜しくお願い致します。

Office2003


 >さっきも別の質問を出していたのですが(解決済)
[[20110129101535]]
 ↑これですね!!

 最初のご質問の回答コードもそうですが、
 >いちいちファイルを開かずに行いたい
 ファイルは、開いているんですよ、そうは、見えないだけで・・・。
まず、
[[20110129101535]]

 ↑このコードの意味をきっちり理解されたほうが良いですよ!!

 そうすれば、名前を付けて保存する(これが前回のご質問でした)代わりに何をすればよいか
 見えてくると思いますよ!!

 ichinose


申し訳ありませんが、コードの意味が理解できないのでお聞きしています。
どなたか教えて頂けませんか。
宜しくお願いします。

あや


 ファイルの中身を変更したり、参照するのに開かずにすることはできません。

 ですがもし質問したい目的が「画面の更新をせずに」ということであれば、
 Application.ScreenUpdating = False
     :
    処理
     :
 Application.ScreenUpdating = True
 というようにすることで、この間の処理を画面更新なく実行することができます。

 ただし、処理中にエラーになったりすると画面を操作することができなくなるので、
 Sub EnableScreenUpdate()
     Application.ScreenUpdating = True
 End Sub
 などの復旧マクロを実行するか、EXCEL を再起動する必要があります。
 (Mook)

 >コードの意味が理解できないのでお聞きしています。
 Help等を用いて1行ずつ調べてください
 その上で、具体的にどこがわからないのか記述してください。

http://officetanaka.net/excel/vba/filesystemobject/index.htm

 因みにFileSystemObjectについては、↑これがわかりやすそうです。
 Helpにもありますけど・・・・。

 ichinose


ichinoseさん

ありがとうございます。
仰りたいことはよく分かります。自分で努力して調べなさい、という事ですよね。
教えて頂いたサイトなどで勉強してみますが、とりあえずまたmookさんに質問させてください。
本当にすみません。


 (Mook)さん

またまたすみません。次元の低い質問で申し訳ありません。

 (Mook)さんが仰っている、「画面の更新をせずに」というのがよく分かりません。

私の質問の仕方が悪かったのでしょうか。

フォルダの中に同じフォーマットのエクセルファイルが数十個から数百個あります。
作業内容は、それぞれのファイルの中の一部分を修正する、などです。フォルダ内の全てのファイルに同じ作業をします。

これを、上記のマクロでやっているのですが、今は、
ファイルを1つ開く→上記コードのある別ファイルで保存したマクロを実行し、修正を行う、を数十個から数百個のファイルに対し繰り返してやっています。

これだと、1ファイルずつ作業をしないといけないので、出来ればフォルダ内にあるエクセルファイルに対し一括で処理できるようにマクロを実行させたいのです。

おそらく今日の別の質問と似ていると思うのですが、上記コードに、前後何をつけたせばいいのかが分かりません。

本当に申し訳ありませんが、mookさん、もう一度教えていただけませんか。


 丸投げは私も敬遠するところですがそれは置いておいて、
 質問の仕方にも少し問題があったかもしれません。

 本来したかったことは、
 >マクロの実行をいちいちファイルを開かずに行いたい
 のではなく、
 「マクロにより対象のファイルを一括で処理したい」
 ということではないでしょうか。先ほどのをベースにすると、

 Sub FileChange()
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    Application.ScreenUpdating = False  '// 画面更新を非表示:動作確認したいときはこの行を消してください。
    Dim fl

    '// 次のForが指定のフォルダの中のファイルを順番に取り出す書き方
    For Each fl In fso.GetFolder("D:\処理したいフォルダ").Files

        If InStr(LCase(fl.Name), ".xls") > 0 Then
            With Workbooks.Open(fl.Path)
                    '★ ここでやりたい処理
                .Save
                .Close
            End With
        End If
    Next
    Application.ScreenUpdating = True
 End Sub
 がベースになります。

 開いたファイルに提示した内容を変更したいのであれば、'★ の部分に下記を書けば
 よいかと思います。
    With .Worksheets(1).Range("B2")
        .Value = "変更しました"
        .Phonetic.Visible = True
        .Characters(1, 2).PhoneticCharacters = "ヘンコウ"
    End With

    With .WorkSheets("修正").Range("A1")
        .Value = "変更しました"
        .Phonetic.Visible = True
        .Characters(1, 2).PhoneticCharacters = "ヘンコウ"
    End With
    .WorkSheets("修正").Range("A6:B10").ClearContents

 できれば、内容を理解するために
     Application.ScreenUpdating = False を削除しておいて マクロの先頭にカーソルを
 置き、F8 を押しながら実行(ステップ実行)で、EXCEL を見ながらマクロの動作を理解して
 おくことをお勧めします。
 (Mook)


 解決されたようです。

http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=142941&rev=0

 (kek)

 消えていたので復活。


(mook)さん

はい、丸投げは大変失礼ですね。
それと、質問の仕方も間違っていました。

本当に有難うございました。上記ので出来ました。

mookさんの回答をもとに、上記のコードを理解するようにしてみます。

いつもマクロの記録で作成して、その後モジュールを開いて自分で修正できるところを直していましたので、基礎がなっていません。

勉強します。

本当に助かりました。


コメント返信:

[ 一覧(最新更新順) ]


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