人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【excel VBA】
あるフォルダ内のすべてのexcelファイル(*.xls)の”test”という名前のシートを印刷したいのです。

サブフォルダは無視、testというシートがなければ印刷しません。

上記条件のきれいなVBAのソースコードを教えてください。
excel 2003/win xpです。

●質問者: nankichi
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Excel test VBA WIN xls
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● nitscape
●18ポイント

http://www.google.co.jp/

Google

きれいなソースではなくかなり汚いソースコードですが、こんな感じでしょうか?c:¥test内のxlsファイルの中からtestシートを印刷するものです。


Sub PrintSheet(strFile)


Workbooks.Open Filename:=strFile

For j = 1 To Workbooks.Count

If Workbooks.Item(j).FullName = strFile Then

For i = 1 To Workbooks.Item(j).Sheets.Count

If Workbooks.Item(j).Sheets.Item(i).Name = ”test” Then

Workbooks.Item(j).Sheets.Item(i).PrintOut Copies:=1

End If

Next

Workbooks.Item(j).Close

End If

Next


End Sub


Sub StartPrint()


Application.FileSearch.NewSearch

Application.FileSearch.LookIn = ”C:¥test¥”

Application.FileSearch.Filename = ”*.xls”

Application.FileSearch.SearchSubFolders = False

If Application.FileSearch.Execute() = 0 Then

MsgBox ”ファイルはありません”

Else

For i = 1 To Application.FileSearch.FoundFiles.Count

PrintSheet Application.FileSearch.FoundFiles(i)

Next

End If


End Sub

◎質問者からの返答

ありがとうございます。

エクセルでファイルを開くのをぐるぐる回す、それを皆さんどう書いているのか知りたくて質問しております。

是非ほかのみなさまもお答えください。


2 ● たけじん
●18ポイント

http://www.hatena.ne.jp/

はてな

とりあえず、以下のようにしてみました。


Sub test_print()

file_name = Dir(”c:¥*.xls”, vbNormal)

Do Until (file_name = ””)

f_name = ”C:¥” & file_name

Workbooks.Open Filename:=f_name

For i = 1 To Workbooks(file_name).Sheets.Count

If Workbooks(file_name).Sheets(i).Name = ”test” Then

Workbooks(file_name).Sheets(i).PrintOut copies:=1

End If

Next i

file_name = Dir()

Loop

End Sub

◎質問者からの返答

Dir()の使い方、初めて知りました。ありがとうございます。

http://www.officetanaka.net/excel/vba/file/file07.htm


3 ● yuki_n
●17ポイント

http://www.sk2.aitai.ne.jp/~happy/

コンテンツ内に色々ありました。

http://www.asahi-net.or.jp/~zn3y-ngi/YNxv252.html#1

上記を参照しました。


一番目に回答されていたのを、改変してみました。

こういう考え方もあるということで

綺麗かどうかはなんともいえません。(笑

・ソース中のコメントは適当に消したりしてみてください。

・エラー処理等も不要であれば、削除してください。


====ここから======================================

’ 定数の設定

Public Const SerchPathName As String = ”D:¥temp¥”

Public Const SerchFileName As String = ”*.xls”

Public Const SerchSeetName As String = ”test”


’ 印刷開始関数。

’ ・指定ディレクトリ内のファイルの検索

’ ・ファイルの印刷

Sub StartPrint()


’ ファイルを検索します。

Dim fileName As String

fileName = Dir(SerchPathName & SerchFileName) ’ ファイルを検索する。

Do While fileName <> ”” ’ 取り出したファイル名がヌルでなければ

PrintSheet SerchPathName, fileName ’ 印刷処理を呼び出す。

fileName = Dir() ’ 次のファイル名を取得する

Loop ’ 繰り返し処理


End Sub


’ ファイルの印刷

’ ・指定されたファイルの印刷

’ 引数

’ ・ファイルパス

’ ・ファイル名

Sub PrintSheet(strPath, strFile)


On Error Resume Next

’ファイルをオープンする

’ ファイルをオープンするときは、フルパスで、

’ 以降、ワークブックの中から、選択するときはファイル名のみを使用

Workbooks.Open fileName:=strPath & strFile

’ 開いたファイルの指定シートを取得する。

’ シートが存在しない場合は、エラーとなるのでエラー処理を行う。

Dim XLSheet

Set XLSheet = Workbooks(strFile).Sheets(SerchSeetName)

If Err.Number <> 0 Then

’ MsgBox strFile & ”ファイルには” & SerchSeetName & ”シートが存在しません。”

GoTo EndSyori ’ 終了時はファイルを閉じる

End If

’ プリントアウトする

XLSheet.PrintOut Copies:=1

If Err.Number <> 0 Then

Err.Clear

MsgBox ”印刷に失敗しました。”

GoTo EndSyori ’ 終了時はファイルを閉じる

End If


On Error GoTo 0


’終了処理

EndSyori:

’ 終了時はファイルを閉じる

Workbooks(strFile).Close


End Sub


====ここまで======================================


Workbooks(”ファイル名”) <--これで、ブックを指定するとき、フルパスだとエラーになることを、今回はじめて知りました。 (^^;

色々、勉強になりました。

ありがとうございました。 m(_ _)m

◎質問者からの返答

ありがとうございます。

エラー処理でgoto 文を使うのって結構ふつうなんでしょうか?


4 ● yuki_n
●17ポイント

http://www.hatena.ne.jp/だみ?:detail]

URLはダミー

前回回答させていただいたものです。


>>エラー処理でgoto 文を使うのって結構ふつうなんでしょうか?


との事ですが、goto文を使用するのは、

見やすく(メンテしやすく)なればOKだと思っています。


一般論では、goto文を一切使わない方が良いと言う人も居るみたいなので、

なんとも言えませんが。


ちなみに今回に限って言うと、使わない方が良いと思います。

↓がそのソース(一部抜粋)


Sub PrintSheet(strPath, strFile)


On Error Resume Next

Workbooks.Open fileName:=strPath & strFile

Dim XLSheet

Set XLSheet = Workbooks(strFile).Sheets(SerchSeetName)

If Err.Number = 0 Then

XLSheet.PrintOut Copies:=1

If Err.Number <> 0 Then

MsgBox ”印刷に失敗しました。”

End If

End If

Workbooks(strFile).Close

On Error GoTo 0


End Sub


色々、試行錯誤していたときの名残りと思っていただければありがたいです。 m(_ _)m


If Err.Number <> 0 Then

MsgBox ”印刷に失敗しました。”

End If


この部分も不要かもしれませんね。

印刷に失敗したときにメッセージが欲しいなら入れるレベルでしょうかね。。 (^^;


#回答、遅くなりましてもうしわけありませんです。 m(_ _)m

◎質問者からの返答

みなさま、ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ