カテゴリー「▼ファイル統合」の5件の記事

2009年11月14日 (土)

【再再改良】フォルダ中のすべてのワードファイルの内容をコピペする

さっそく、とんちんかんさんからいただいたファイルをご紹介します。

「copy_paste_4.dot」をダウンロード (ワード2003用)
「copy_paste_4_2007.dot」をダウンロード (ワード2007用)

とんちんかんさん、どうもありがとうございました。

使い方やインストール方法や改良の経緯は、下記をご覧ください。

2009/11/11 【再改良】フォルダ中のすべてのワードファイルの内容をコピペする

2009/06/06 【改良】フォルダ中のすべてのワードファイルの内容をコピペする

2009/05/23 フォルダ中のすべてのワードファイルの内容をコピペする

▼使うための設定
こちらを参考にして、Microsoft Scripting Runtimeをオンにしてください。

今回のマクロでは、ファイルシステムオブジェクトを使っています。

word2007に対応しなくなったFileSearch メソッドをファイルシステムオブジェクト
を用いて定義しているからです。

細かいことは、できる大辞典 Excel VBAの485ページをご覧ください。

実は、私、ファイルシステムオブジェクトについてよくわかっておりません。

▼留意点
パソコンのセキュリティ設定によっては、スクリプトの書き込みの
警告メッセージが出ることがあると思いますが、
疑わしい設定ではなく、意図的に行っております。

Copypaste4

上の画像は、私のパソコンにインストールしてある
ウィルスセキュリティが反応して警告メッセージを
表示した状態を示します。

この状態で、「すべて許可」、「今回は許可」の
いずれをクリックしても問題はないと思います。

対処方法は、ウィルスセキュリティの公式サイトをご覧ください。

なお、「停止」をクリックすると、マクロが終了します。

これは、Private Sub FileSearch2007_Repeatのマクロの
エラー時の処理 err = 438 に対応しています。

▼このファイルの特徴
1.Word2007で動きます
2.指定フォルダのサブフォルダまで『ワードファイル』を探し続けます。
  (サブフォルダ検索の要否はメッセージボックスで選択可)
3.読み取り専用設定ファイルを閉じるときの確認メッセージが表示
  されないようにしました。
4.すべてのファイルを読み取り専用で開きます。
  (内容の変更がないように、念のため。)

▼用途
フォルダに保存された複数のファイルを表示する必要がある場合に、
非常に重宝します。

100個くらいファイルがあると、クリックして開くだけでも
時間がかかります。

また、フォルダが複数ある場合には、余計手間ですね。

このマクロを作成した今年の5月の時点では、特定の用途は
想定しておりませんでした。

このたび、とんちんかんさんが業務にてご活用されていることを
教えていただき、非常にうれしく思います。

▼工夫
Word2007では、FileSearch メソッドが機能しないようです。
とんちんかんさんが、いろいろと調べて、それに対応する
word2007版の方法を作成してくれました。

Functionとして定義しています。

実は、難しくて、自分では理解できていませんが、
ひとまず動くので紹介します。

おそらくとんちんかんさんが参照されたページはこちらです。

とんちんかんさんからいただいたプログラム文に、私が
多少手を加えて、サブフォルダまでファイルを取りにいくのか否か
の選択ができるようにしました。

誤動作がある場合はご連絡ください。

とりあえず、word2007の運転確認は私はできないのですが、
おそらく動くだろうと思うファイルを公開しています。

▼ワードのバージョンにあわせた修正方法
Sub コピペ_2003_2007()のマクロの190行目を変更することで、
word2007とword2003とを切替えています。

要は、ワード文書の拡張子を切替えているんですね。

| | コメント (3) | トラックバック (0)

2009年11月11日 (水)

【再改良】フォルダ中のすべてのワードファイルの内容をコピペする

先日、こちらのページにとんちんかんさんからいただいたご質問への回答です。

ファイル名の着色と文字サイズの変更をしました。
「copy_paste_3.dot」をダウンロード

以下、とんちんかんさん仕様のプログラムです。

基本的には、上記のテンプレートのものと同じですが、橙色文字部分だけ
とんちんかんさん用に変更しました。

310行以降のfor next文を取り出しています。

380行~420行に、フォントのサイズと色の設定があります。

コピペ2のプログラムでは、rangeオブジェクトでコピペを実行
していました。

今回のように、フォントに着色をしたりフォントのサイズを
変更したりするためのrangeオブジェクトのプロパティが
よくわかりませんでした。

結果、selectionオブジェクトを用いてご要望のことを実現しました。

とんちんかんがご指摘の通り、
selection.font.colorと
selection.font.size
を用いています。

お試しください。

310   For i = 1 To FC
         
320       With Documents.Open(FileName:=varTMP(i), Visible:=False)
330           .Content.Copy
340           .Close
350       End With
         
          'ファイル名の入力位置へカーソルを移動(文書の末尾へ)
360       Selection.Start = actDoc.Range.End - 1
370       Selection.End = actDoc.Range.End - 1
         
          'ファイル名の着色
380       With Selection
390           .Font.Color = wdColorRed
400           .Font.Size = 14
410           .TypeText Text:= "氏名管理番号 : " & varNam(i)
420       End With
         
430       Selection.TypeParagraph
440       Selection.TypeParagraph
             
          'コピー内容の貼り付け
450       Selection.Paste
         
          '最後の文書でなければ、改ページをする
460       If i <> FC Then
470           Selection.InsertBreak Type:=wdPageBreak
480       End If
         
490   Next i

| | コメント (0) | トラックバック (0)

2009年6月 6日 (土)

【改良】フォルダ中のすべてのワードファイルの内容をコピペする

先日紹介したコピペマクロですが、フォルダパスの取得を「ファイルを開く」ダイアログボックスからできるようにして、簡単にしました。

「copy_paste_2.dot」をダウンロード

●使い方

1.インストール
こちらをご覧ください。

2.コピー先となるファイルを開きます。
新規文書を開いておけばいいと思います。

文章が書かれているファイルが開かれている場合には、文章の最後からコピペを開始します。

3.ツールバーの[コピペ]ボタンをクリックしてフォルダパスを指定

Copypaste2

左のようなファイルを開くダイアログボックスが表示されます。

このダイアログボックスを使って、コピペしたいワードファイルが含まれているフォルダのファイルを表示します。

表示されているワードファイルのいずれか一つをダブルクリックしたり、ダイアログボックスの右下の「開く」ボタンをクリックして、フォルダパスを指定します。

3.あとは、自動的にフォルダ内のワード文書のコピペをします。

●工夫

前回の記事に記載したフォルダパスを取得するコードをそのままつかっています(40行から130行)

マクロの使い方は前回紹介したとおりです。

70行と180行に、

70         .Name = "*.doc"
180       .FileName = ".doc"

と記載して、ワード文書の表示を指定していますが、

70         .Name = "*.txt"
180       .FileName = ".txt"

とそれぞれ変更するとテキストファイルを指定できます。

拡張子を設定していろいろとお試し下さい。

ワードで開けない種類のアプリケーションの拡張子を記入するとうまくいかないかもしれません。

お楽しみください。

| | コメント (8) | トラックバック (0)

2009年5月24日 (日)

【解説】フォルダ中のすべてのワードファイルの内容をコピペする

昨日紹介したマクロを作成したときに、いくつか学びがありましたので、メモしておきます。

●文書の内容をコピーする指示

With Documents.Open(FileName:=●, Visible:=False)
       .Content.Copy
       .Close
End With

こんなものが230行から260行にかけて記載されています。

contentというプロパティは、documentオブジェクトのプロパティであって、その文書の内容を示すものです。

rangeにも書き換えられます。処理スピードは同じなんでしょうか?

書き換えて実験してみましたが、違いはわかりませんでした。

上の例では、Documents.Open がファイル名(上の例では●)により特定されて開かれたDocumentオブジェクトを示すので、その後にcontentと記載できるみたい。

Contentを知らなかったときには、以下のようにしていました。

マクロの記録機能で、記録ができます。

Selection.WholeStory ’すべてを選択
Selection.Copy ’選択範囲のコピー

スピード変わるんでしょうか?実験してみましたが、少しの文書を開いたりするのなら、体感速度は変わりませんでした。

すくなくとも、プログラム文が短くなるのですっきりすることは確かですね。

●文字列の入力箇所を文頭(文末)にする指示

270行に以下のような指示があります。(説明用に少し変えてあります)

Activedocument..Range(Activedocument.Range.End - 1, Activedocument.Range.End - 1).Text = ”入力する文字列”

これは、文書の最後の文字から1つめに”入力する文字列”と入力するための指示です。

Range(開始位置, 終了位置)を入力して、対象となる範囲の開始と終了位置の特定ができます。

上記の位置というのは、数値です。文頭から数えて何文字目か?に対応します。

Activedocument.Range.End で、この文書の最終文字の位置を取得できます。

文書全体の最後には、必ず改行マークが入っているので、それをのぞいたものが、実際の文書の最後のカーソル位置ですね。

だから、Activedocument.Range.End - 1のように、なっているわけです。

開始位置と終了位置をともに同じ値にすれば、その特定された範囲とは、何も選択されていない1点(位置)になります。

ちなみに、文頭に文字列を入力するときには、「開始位置も終了位置もゼロ文字目に文字を入力する」という意味で、以下のようにかけます。

Activedocument..Range(0, 0).Text = ”入力する文字列”

これがわかると、文字列を入力する際に、カーソル位置を移動する必要がなくなります。

今までは、マクロの記録機能で取得した以下のコードを使っていましたが、今後は不要になりそうです。

カーソルの移動が減ると、処理スピードが上がるそうなので、楽しみです。

文頭に文字列を入力: 
Selection.HomeKey Unit:=wdStory
Selection.TypeText Text:="入力する文字列"

文末に文字列を入力:
Selection.EndKey Unit:=wdStory
Selection.TypeText Text:="入力する文字列"

| | コメント (0) | トラックバック (0)

2009年5月23日 (土)

フォルダ中のすべてのワードファイルの内容をコピペする

練習として作ったマクロです。用途は考えていませんが、使えるアイディアがあったら教えてください。

「copy_paste.dot」をダウンロード

●使い方

1.マクロを登録します。登録方法は、こちらをご参照ください。

2.[コピペ]ボタンがツールバーに表示されますので、クリックします。

3.インプットボックスが表示されるので、ファイルを探す対象のフォルダのパスを入力します。

例: C:\Documents and Settings\●●●\My Documents

4.OKをクリックすると、開かれているファイルの文末に、指定したフォルダ内のワードファイルの内容をすべてコピペします。

●作用
・ファイル名を入力、改行を入力、ファイル内容を入力しています。

・ファイル同士の区切りに、「改ページ」を入れています。

●つくった経緯
最近知った以下のコードを使いたくなりました。

With Documents.Open(FileName:=varTMP(i), Visible:=False)
      .Content.Copy
      .Close
End With

テンプレートに記載されたマクロの230行から260行に書かれているのですが、「ファイルを開いて内容をコピーするときに、開いたファイルを見せないようにする」指示がされています。

このコードを見つけた理由ですが、ファイルを開かずにファイルの内容をコピーする方法がないか探しました。

エクセルの場合には、ファイルを開かずにファイルの内容をコピーすることができると思います(うろ覚えですが)。

ここで紹介した「Excel VBA できる大辞典」をぱらぱらとみていたときに出ていたように思います(手元にないので、確認できません)。

ワードでも、同様の機能がないか、例のニュースグループで検索しました。

検索キーワードは、"without opening" と paste です。

結果、このページにたどり着きました。

結論からいうと、「内容をコピーするためにはファイルを開かなければいけないが、ファイルを開く動作を見えないようにすることはできる。」でした。

そして入手したのが、上に書いてあるコードです。

●工夫
フォルダ内のファイルパスを取得するコードは、こちらで使ったものを流用しました。

ファイル名も以下のコードで取得します(160行)。
ファイル名 = Mid(ファイルパス, InStrRev(ファイルパス, "\") + 1)

必要な変数の数を、Redimをつかって再定義しています。
120           ReDim varTMP(1 To FC) As Variant
130           ReDim varNam(1 To FC) As String

| | コメント (0) | トラックバック (0)