2017-09-07 9 views
0

フォルダ内のすべてのワークブックからすべてのシートを取り込むマクロを開発しようとしています。その後、/保存プロンプトを表示せず、それを閉じ渡っ IEExcel VBAワークシートがワークブックにコピーされる前にワークシートが存在するかどうかをチェックします。

Folder 
|---Summary Sheet.xlsm 
|---Sheet 1 date1.xlsx 
|---Sheet 2 date2.xlsx 
etc. 

マクロがコピーし、それを、ワークブックを開き、細胞外の日付へのシートの名前を変更します。名前のチェックを正しく組み込むことができないようです。私は見てきました
Test or check if sheet exists
Excel VBA If WorkSheet("wsName") Exists
しかし、コンセプトを正しく翻訳する経験がありません。

これまでのコードです。今実行すると、私は彼らが各シ​​ートを毎回チェックしていなかったということでした上記の回答に直面した問題
sheetToFind = ThisWorkbook.Sheets(1)

Sub ConslidateWorkbooks() 
Dim FolderPath As String 
Dim Filename As String 
Dim Sheet As Worksheet 
Dim sheetToFind As String 
Dim sheetExists As Boolean 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

FolderPath = Environ("userprofile") & "\Folder\" 
Filename = Dir(FolderPath & "*.xlsx") 

Do While Filename <> "" 
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True 
sheetExists = False 

For Each Sheet In ActiveWorkbook.Sheets 
    Sheet.Name = Sheet.Range("C4") 
    sheetToFind = ThisWorkbook.Sheets(1) 
    If sheetToFind = Sheet.Name Then 
    sheetExists = True 
    End If 

    If sheetExists = False Then 
    Sheet.Copy After:=ThisWorkbook.Sheets(1) 
    Workbooks(Filename).Close False 
    Filename = Dir() 
    End If 
    Next Sheet 
Loop 
Application.ScreenUpdating = True 
End Sub 
+0

'ThisWorkbook.Sheets(1)'はオブジェクトであり、 'Set'が必要です。 => 'Set sheetToFind = ThisWorkbook.Sheets(1)' ...だけでなく、 'sheetToFind = Sheet.Name'も' sheetToFind'はそのように比較できないオブジェクトです... 'sheetToFind.Name = Sheet。名前は 'そこにトリックを行う必要があります;) –

+0

申し訳ありません私は完全に理解していません。 'Do .. sheetToFind.Name = Sheet.Name For Each Sheet ....'私は無効な修飾子エラーを受け取ります。何かを残したり、間違った場所に置いたりしましたか?名前を変更したシートを比較するためにすべてのシート名を検索できますか? – Mashical

+0

'sheetToFind = ThisWorkbook.Sheets(1)'を 'sheetToFind = ThisWorkbook.Sheets(1).Name'に変更して、それがあなたがしたいことをしているかどうかを確認してください –

答えて

0

で実行時エラー438がスローされます。私は別の機能を見つけました
Excel VBA If WorkSheet("wsName") Exists

これを使用して、私はすべての機能を動作させることができました。

Function sheetExists(sheetToFind As String) As Boolean 
    sheetExists = False 
    For Each Sheet In ThisWorkbook.Worksheets 
     If sheetToFind = Sheet.Name Then 
      sheetExists = True 
      Exit Function 
     End If 
    Next Sheet 
End Function 

Sub ConslidateWorkbooks() 
Dim FolderPath As String 
Dim Filename As String 
Dim Sheet As Worksheet 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 
FolderPath = Environ("userprofile") & "\Folder\" 
Filename = Dir(FolderPath & "*.xlsx") 

Do While Filename <> "" 
    Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True 
    For Each Sheet In ActiveWorkbook.Sheets 
    Sheet.Name = Sheet.Range("C4") 
    result = sheetExists(Sheet.Name) 
    Debug.Print result 
    If result = True Then 
     Workbooks(Filename).Close False 
     Filename = Dir() 
    End If 
    If result = False Then 
     Sheet.Copy After:=ThisWorkbook.Sheets(1) 
     Workbooks(Filename).Close False 
     Filename = Dir() 
    End If 
    Next Sheet 
Loop 
Application.ScreenUpdating = True 
End Sub