
下記のコードを実行すると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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excelでブックの共有を掛けると...
-
WorkBooksをオープンさせずにシ...
-
Excelファイルをダブルクリック...
-
エクセルで参照しているデータ...
-
【マクロ】【画像あり】❶ブック...
-
VBA フォルダ内の全ブック、さ...
-
複数ファイルから特定シートの...
-
同じフォルダへのハイパーリン...
-
Excelの警告について
-
エクセルファイルをオープンし...
-
Excel(2010)のフィルターが保...
-
【マクロ】【VBA】同じフォルダ...
-
エクセルにおける,「ブック」...
-
エクセルで別ブックをバックグ...
-
ブックのピボットを別ブックに...
-
【マクロ】【画像あり】ファイ...
-
【ExcelVBA】同一フォルダ内の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
WorkBooksをオープンさせずにシ...
-
エクセルで参照しているデータ...
-
Excelファイルをダブルクリック...
-
Excelでブックの共有を掛けると...
-
「ブックの共有」を有効にして...
-
Excel(2010)のフィルターが保...
-
Excelの新しい空白のブックを開...
-
同じフォルダへのハイパーリン...
-
フォルダ内の複数ファイルから...
-
エクセルで別ブックをバックグ...
-
別ブックから入力規則でリスト...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
エクセルにおける,「ブック」...
-
Excelで複数ブックの同一セルに...
-
Excelで指定範囲のデータ...
おすすめ情報