下記のコードを実行するとSheet1という名前のシートがないBookを開いた場合、「統合元ファイル○○のSheet1を開けません」という警告がでます。
無ければ集計しなくていいので「はい」を押せばいいのですが、その都度止まってしまうのは困ります。
Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?出ないようにすることは出来ないのでしょうか?
Sub test03() 'Sheet1のみ開かずに統合
Dim MyFile As String, MyPath As String
Dim SumFile() As Variant, i As Long
MyPath = ThisWorkbook.Path & "\"
MyFile = Dir(MyPath & "*.xls", vbNormal)
Do Until MyFile = ""
If MyFile <> ThisWorkbook.Name Then
ReDim Preserve SumFile(i)
Application.DisplayAlerts = False
SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" 'A1からB10のLinkを変数に代入
Application.DisplayAlerts = True
i = i + 1
End If
MyFile = Dir
Loop
If i = 0 Then MsgBox "データが有りません ( ̄□ ̄;)!!": Exit Sub
Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
End Sub
No.4ベストアンサー
- 回答日時:
横から失礼します。
> ブックをOpenせずにSheet1の存在確認をする方法はありますか?
これをヒントに関数化してみて下さい。
Sub Sample()
' ExecuteExcel4Macro メソッドを使う方法
' ダミーアクセスしてエラーになったらシートは無い
Dim strQry As String
Dim Dummy As Variant
strQry = "'C:\[test.xls]Sheet1'!R1C1"
Dummy = Application.ExecuteExcel4Macro(strQry)
If IsError(Dummy) Then
MsgBox "Sheet1 は無い"
Else
MsgBox "Sheet1 が在る"
End If
End Sub
すごい!
Application.ExecuteExcel4Macroが何なのかはぜんぜんわかりませんが、下記のようにしたらAlertを消さなくともOKです!ありがとうございました。
Sub test04() 'Bookを開かずSheet1だけを統合
Dim MyFile As String, MyPath As String
Dim SumFile() As Variant, i As Long
Dim strQry As String
Dim Dummy As Variant
MyPath = ThisWorkbook.Path & "\"
MyFile = Dir(MyPath & "*.xls", vbNormal)
Do Until MyFile = ""
If MyFile <> ThisWorkbook.Name Then
strQry = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1"
Dummy = Application.ExecuteExcel4Macro(strQry) 'ダミーアクセスしてエラーにならなければSheet1あり
If Not IsError(Dummy) Then
ReDim Preserve SumFile(i)
SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" 'A1からB10のLinkを変数に代入
i = i + 1
End If
End If
MyFile = Dir
Loop
If i = 0 Then MsgBox "データが有りません ( ̄□ ̄;)!!": Exit Sub
Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
End Sub
No.5
- 回答日時:
別の質問みたいになりましたが、ついでなので。
汎用的に使えるように関数にすると、こんな感じ。ブックは開いていても、
閉じていても問題ありません。
Sub Sample2()
If ExistSheet("C:\test.xls", "Sheet1") Then
MsgBox "Sheet1 あり"
Else
MsgBox "Sheet1 が無いか、パスが違うか"
End If
End Sub
' フルパスで渡されたブックのシート存在チェック(開かれているか? ではない)
’シートがあれば True を返す
Function ExistSheet( _
ByVal strXLSFullName As String, _
ByVal strXLSSheetName As String) As Boolean
Dim strDir As String
Dim strFilename As String
Dim strQry As String
Dim Dummy As Variant
On Error GoTo ERROR_HANDLER
' ディレクトリー切り出し(最後の\マークを含める)
strDir = Left$(strXLSFullName, InStrRev(strXLSFullName, "\"))
' ファイル名切り出し
strFilename = Dir(strXLSFullName)
' 問い合わせ文字列生成
strQry = "'" & strDir & "[" & strFilename & "]" & strXLSSheetName & "'!R1C1"
' ダミーアクセスでエラー値が返れば、シートは無い
Dummy = Application.ExecuteExcel4Macro(strQry)
' IsError 関数の戻り値を反転させて Return
ExistSheet = Not IsError(Dummy)
Exit Function
ERROR_HANDLER:
End Function
KenKen_SPさまには、コードの誤りをご指摘いただいたばかりか、汎用でのSheet1の存在確認方法までご教示いただき感謝感激です。
いつもありがとうございます。とても勉強になりました。
No.3
- 回答日時:
ブックを開いてないのに「Sheet1」にアクセスしているため、エラーが出てますよね。
>ブックをOpenせずにSheet1の存在確認をする方法はありますか?
無いと思います。たぶん...
>Openし、シート名をLoopしてSheet1かどうかを判断する方法ならわかるのですが
これでいきましょう。
ありがとうございました。
>> Openし、シート名をLoopしてSheet1かどうかを判断する方法ならわかるのですが
> これでいきましょう。
件数が多いのでそれではかなりロスがでるんですよねえ。
でも一件落着しました。
No.2
- 回答日時:
ざっと見た限りですが、、
SumFile() は Dim SumFile() as Variant と宣言されていますので、単なる
Variant型の変数です。
そこに文字列を代入しているだけですから、この時点ではエラーというか、
アラートが表示されることは無いと思います。
もし、表示されるとしたら、
> Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
の Consolidate メソッド実行時ですね。したがって、
Application.DisplayAlerts = False
Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
Application.DisplayAlerts = True
としたら、どうでしょうか?
> Sub test03() 'Sheet1のみ開かずに統合
言葉どおり、Sheet1 のみ統合させないなら、ブックを開いて Worksheets
コレクションを For each でループさせ、シート名ではじけば良いのでは?
Set wb = Workbooks.Open(MyPath & "\" & MyFile, UpdateLinks:=0)
For Each sh In wb.Worksheets
If sh.Name <> "Sheet1" Then
ReDim Preserve SumFile(i)
SumFile(i) = "'" & MyPath & "[" & MyFile & "]" & sh.Name & "'!R1C1:R10C2"
i = i + 1
End If
Next
wb.Close SaveChanges:=False
またまたお世話様でぇす! (≡^∇^≡)
そうかあ!Consolidate メソッド実行時の警告なんですねえ。
わかりました。解決しました!
ありがとうございました。
'Sheet1のみ開かずに統合は「ブックを開かずSheet1だけを統合」のつもりでしたが、悪い日本語の代表例になってましたね。すみません。
No.1
- 回答日時:
On Error Resume Next
しておくか、
存在確認をあらかじめするようにしたらどうでしょう。
>Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?
ヘルプによると、特定のメッセージとあるので全ての警告ではないのでしょう
さっそくありがとうございます。
On Error Resume Nextはもちろん試しました。多分、エラーではなく警告なのでErrorにひっかからないのではないでしょうか?
ブックをOpenせずにSheet1の存在確認をする方法はありますか?
Openし、シート名をLoopしてSheet1かどうかを判断する方法ならわかるのですが・・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
ExcelのVBAでDisplayalertsで警告メッセージが非表示にできない
Excel(エクセル)
-
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
5
【ExcelVBA】指定の書式で、マクロなしブックとしてAlertなしで別名保存する方法
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です”
Visual Basic(VBA)
-
8
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
9
EXCEL VBA「Application.DisplayAlerts」について
Visual Basic(VBA)
-
10
フォントの大きさ
Visual Basic(VBA)
-
11
VBAで、強制保存してブックを閉じるには?
Visual Basic(VBA)
-
12
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
13
エクセルVBA 「On Error GoTo 0」について
Excel(エクセル)
-
14
XL:BeforeDoubleClickが動かない
その他(プログラミング・Web制作)
-
15
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
16
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
17
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
18
マクロでマクロを削除する
Excel(エクセル)
-
19
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
20
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
アクセスvbaでエクセルブックを...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
エクセルで別ブックをバックグ...
-
エクセルで50行ごとに区切った...
-
北九州市にあった「井筒屋ブッ...
-
複数エクセルから特定シートの...
-
VBAでブック保護非保護を判定す...
-
【マクロ】【VBA】同じフォルダ...
-
フォルダ内のファイル全てに対...
-
エクセルにおける,「ブック」...
-
Excel起動時に特定のワークシー...
-
エクセルでウィンドウの枠固定...
-
外部ブック参照が#REF!になって...
-
ブックの保護ができないんです...
-
Excelでブックの共有を掛けると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
Excelでブックの共有を掛けると...
-
複数ファイルから特定シートの...
-
エクセルで「ディスクがいっぱ...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルを開かずにpdf...
-
エクセルで別ブックをバックグ...
-
エクセルで50行ごとに区切った...
-
外部ブック参照が#REF!になって...
-
エクセル2016です。「ブッ...
-
エクセルの関数について教えて...
-
エクセルシートの一部を送りたい
-
ブックのピボットを別ブックに...
-
Excel起動時に特定のワークシー...
おすすめ情報