フォルダ内に複数のExcel(全てマクロあり)があります。
一つのもの以外は共通フォームです。
その共通フォームのExcelを開き、一つのExcelに集約したいと思っております。
集約用のExcelにマクロを記載し、いざ実行するとエラーがでました。
それを見ると、集約用のExcel名に˜$とついたものがフォルダ内に自動生成され、こちらが使用中なのでエラーとなったようです。
どうすれば回避できるでしょうか?
現状はこのような感じです。
Dim filename As String
Dim openedbook As Workbook
Dim isbookopen As Boolean
filename = Dir(ThisWorkbook.Path & "\*.xls*")
Do While filename <> ""
If filename <> ThisWorkbook.Name Then
isbookopen = False
For Each openedbook In Workbooks
If openedbook.Name = filename Then
isbookopen = True
Exit For
End If
Next
If isbookopen = False Then
Workbooks.Open (filename)
End If
End If
filename = Dir()
Loop
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは。
Workbooks.Open (filename)
これは、あやふやなコードですね。これで、開ける確率は、半々というところでしょうか?
ステップモードとローカルウィンドウで追いかけてみれば、一目瞭然のはずです。
もちろん、
>集約用のExcel名に?$とついたものがフォルダ内に自動生成され、こちらが使用中なのでエラーとなったようです。
#1様の言うとおりで、それは、ありえませんね。
>一つのもの以外は共通フォームです。
意味は分かります。同じ表の形式で作られたファイルという意味ですね。
ところで、私がマクロを書く時、Dir 関数って、意外にデリケートな部分があって、あまりお膳立てが過ぎると、おかしくなってしまうような気がします。それで、マクロにする時は、最初に、Dir 関数で全部ファイル名を取っておいて、配列変数に格納してから処理するという方法を取ることが多いです。今回は問題なかったようですが。
少し、洒落た書き方をさせてもらいます。
'//
Sub OpenOrNotFiles()
Dim FName As String
Dim myPath As String
Dim myFno As Integer
Dim iflg As Integer
myPath = ThisWorkbook.Path & "\"
FName = Dir(ThisWorkbook.Path & "\*.xls*", vbNormal) '←一応念のため
Do While FName <> ""
If Dir(myPath & FName) <> "" Then
myFno = FreeFile()
On Error Resume Next
Open myPath & FName For Binary Lock Read Write As #myFno
iflg = Err()
Close #myFno
End If
If iflg = 0 Then
Workbooks.Open (myPath & FName) '←こうなります。
''Debug.Print myPath & FName
End If
FName = Dir
Loop
End Sub
'///
No.1
- 回答日時:
filename = Dir(ThisWorkbook.Path & "\*.xls*")
を
filename = Dir(ThisWorkbook.Path & "\*.xls*",vbhidden)
としなければ、~$Book1.xlsなどは取得できないハズです。
~$…は隠しファイル属性がつきますので
filename = Dir(ThisWorkbook.Path & "\*.xls*")
では処理対象外ですので~$…が問題になるとは考えにくいです。
別の所に問題がありそうです。
エラーコード、エラーメッセージ、
途中で止まるのならその行を提示してみてください。
PS.
一つのもの以外は共通フォームです。
これは何?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
エクセルの数式で教えてください。
-
VBAで同一フォルダにあるブック...
-
ファイル並び順がバラバラで困...
-
Wordを開こうとすると『環境変...
-
タスクスケジューラで指定フォ...
-
System32内のファイルを書き換...
-
常に「すべての列のサイズを自...
-
シャットダウン時に自動ファイ...
-
検索したファイルの場所を調べ...
-
Dosコマンドで2階層下をワイル...
-
自分だけファイルが見られるよ...
-
エクセルの印刷プレビュー後フ...
-
csvファイルの最後にeof(0x1a)...
-
”彦”の異体字
-
google Drive 容量を減らせない...
-
strtoint関数について
-
aviファイルとAVIファイルの違い
-
フォルダのプロパティでセキュ...
-
フォルダリダイレクトについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
VBAで同一フォルダにあるブック...
-
エクセルの数式で教えてください。
-
パイソンでエクセルマクロを動...
-
常に「すべての列のサイズを自...
-
System32内のファイルを書き換...
-
ファイル並び順がバラバラで困...
-
タスクスケジューラで指定フォ...
-
検索したファイルの場所を調べ...
-
ショートカットファイルそのも...
-
レジストリの変更が保存されない
-
エクスプローラの検索で期間と...
-
シャットダウン時に自動ファイ...
-
Not kind:Folders
-
VB.net 任意の例外を発生させ...
-
USBにコピーして車で聴くには?
-
Googleドライブで削除できない...
-
Cドライブにconfig msiというフ...
-
貼り付けとショートカットの貼...
-
google Drive 容量を減らせない...
おすすめ情報