Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3251 / 13646 ツリー ←次へ | 前へ→

【63289】シート存在確認マクロでシートがないのに存在するという結果になるのはなぜ... かお 09/10/23(金) 11:50 質問[未読]
【63290】Re:シート存在確認マクロでシートがないの... seg 09/10/23(金) 12:18 発言[未読]
【63295】Re:シート存在確認マクロでシートがないの... かお 09/10/23(金) 21:00 お礼[未読]
【63291】Re:シート存在確認マクロでシートがないの... n 09/10/23(金) 12:47 発言[未読]
【63296】Re:シート存在確認マクロでシートがないの... かお 09/10/23(金) 21:02 お礼[未読]

【63289】シート存在確認マクロでシートがないのに...
質問  かお  - 09/10/23(金) 11:50 -

引用なし
パスワード
   どうしても、分からないので教えて下さい

今、デスクトップ上のフォルダ内の複数のBOOKを一つのBOOKにまとめる…
といったマクロを作成しています。

その中で、同じシート名が、新Book先にあれば、差し替えるか?差し替えないか?
の確認をして、処理を行っています

しかし、なぜか、存在しないシート名でも、TRUEとなってしまいます

コードの書き方がよくないのでしょうか?

アドバイスのほうよろしくお願いします


Sub FILE結合()

Dim DesktopPath As String
Dim Shellobject As IWshRuntimeLibrary.WshShell

Dim myFSO As New FileSystemObject
Dim myFolder As Folder
Dim myFiles As Files
Dim myFile As File
Dim q As Integer
Dim WSName As String
Dim MyFileName As String

Dim WS As Worksheet, flag As Boolean
Dim Ans As Integer


Set Shellobject = New IWshRuntimeLibrary.WshShell
DesktopPath = Shellobject.SpecialFolders("Desktop")

Set myFolder = myFSO.GetFolder(DesktopPath & "\ファイル")
Set myFiles = myFolder.Files

For Each myFile In myFiles
Workbooks.Open myFile

For q = 1 To Worksheets.Count
Worksheets(q).Activate
WSName = Worksheets(q).Name
MyFileName = Left(myFile.Name, (InStr((myFile.Name), ".") - 1))
   
ThisWorkbook.Activate
   For Each WS In Worksheets
     If WS.Name = WSName Then flag = True
    Next WS
    If flag = True Then     ’←同じシートが存在しないのに、TRUEになってしまう

     Ans = MsgBox("同じシート名があります、差し替えますか?", vbInformation + vbYesNo, "シート確認")
        Select Case Ans
        Case vbYes
         Application.DisplayAlerts = False
         Worksheets(WSName).Delete
         Application.DisplayAlerts = True
          Workbooks(MyFileName).Activate
         Cells.Select
         Range("B1").Activate
          Selection.Copy
         ThisWorkbook.Activate
          Worksheets.Add After:=Worksheets(Worksheets.Count)
          Worksheets(Worksheets.Count).Select
          Cells.Select
          ActiveSheet.Paste
          Range("D8").Select
   
          Worksheets(Worksheets.Count).Name = WSName
   
     Case vbNo
     'なにもしない  
     End Select
     
   Else
    Workbooks(MyFileName).Activate
     Cells.Select
    Range("B1").Activate
    Selection.Copy
    ThisWorkbook.Activate
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    Worksheets(Worksheets.Count).Select
    Cells.Select
    ActiveSheet.Paste
    Range("D8").Select
   
    Worksheets(Worksheets.Count).Name = WSName
   
    End If
    
    Workbooks(MyFileName).Activate
   
Next q
Workbooks(MyFileName).Close False
Next

MsgBox "フォルダ内のファイルを一つのブックにまとめました"

【63290】Re:シート存在確認マクロでシートがない...
発言  seg  - 09/10/23(金) 12:18 -

引用なし
パスワード
   For Each WS In Worksheets
のWSには何が入っているか調べてみましょう。

それと、ちゃんとインデントしてくださいね。

【63291】Re:シート存在確認マクロでシートがない...
発言  n  - 09/10/23(金) 12:47 -

引用なし
パスワード
   細かく見てないけどBooksのLoop、SheetsのLoop処理なので、
flag = False
を入れて初期化してあげないと、1回 flag = True だったら True になりっぱなしです。

【63295】Re:シート存在確認マクロでシートがない...
お礼  かお  - 09/10/23(金) 21:00 -

引用なし
パスワード
   ▼seg さん:

再度確認してみます

ありがとうございました

【63296】Re:シート存在確認マクロでシートがない...
お礼  かお  - 09/10/23(金) 21:02 -

引用なし
パスワード
   ▼n さん:

flag=False

を追加したところうまくいきました

ありがとうございました

3251 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free