2016-05-25 11 views
0

ワークブックがすでに存在する場合は実行しておき、存在しない場合は再実行してからワークブックを作成します。ワークブックが存在する場合、またはvbaエクセルを使用していない場合は再実行

ユニークな値(x)と配列(名前)があります。 I

(x)の

ユニーク値で持っていないこと、それは配列の名前で(名前を)ブックを作成していない場合は、両方が等しい場合は、それらを比較する必要が私のコード:

Sub mac() 

Dim c as integer 
Dim x as range 
Dim s_AgingSCM as string 
Dim Array_SCM_Aging as variant 
Dim NewBook as workbook 
Dim NewBook_SCM as workbook 
Dim Master_workbook as workbook 
Dim rngCopy_Aging as range 
Dim rngFilter_Ws2 as range 

For c = LBound(Array_SCM_Aging) To UBound(Array_SCM_Aging) 
      Set Master_workbook = ThisWorkbook 
      s_AgingSCM = Array_SCM_Aging(c, 1) 
      Set x = Master_workbook.Sheets("BASS").Range("AY" & c) 
        If x = s_AgingSCM Then              

         With rngFilter_Ws2 

           .AutoFilter field:=32, Criteria1:="<>(a) 0 - 360", Operator:=xlFilterValues 
           .AutoFilter field:=37, Criteria1:=s_AgingSCM, Operator:=xlFilterValues 

         Set rngCopy_Aging = .SpecialCells(xlCellTypeVisible) 
              .AutoFilter ' Switch off AutoFilter 
         End With 

         rngCopy_Aging.Copy NewBook.Worksheets("Aging Inventory").Cells(1, 1) 
         Application.DisplayAlerts = False   
        Else 

        Dim fso: Set fso = createObject("Scripting.FileSystemObject") 
        Dim folder: Set folder = fso.GetFolder("C:\") 
        Dim file, fileNames      
        Dim rngCopy_SCMAging As Range     

        For Each file In folder.Files 
          If Right(file.Name, 4) = "xlsx" Then 
          fileNames = fileNames & file.Name & ";"   ' will give a list of all filenames 
          End If 
        Next 

        If InStr(fileNames, s_AgingSCM) = 0 Then      

          With NewBook_SCM        

           Set NewBook_SCM = Workbooks.Add 
          .Title = s_AgingSCM 
          NewBook_SCM.Worksheets("sheet1").Name = "Aging Inventory" 
          With rngFilter_Ws2 

           .AutoFilter field:=32, Criteria1:="<>(a) 0 - 360", Operator:=xlFilterValues 
           .AutoFilter field:=37, Criteria1:=s_AgingSCM, Operator:=xlFilterValues 

           Set rngCopy_SCMAging = .SpecialCells(xlCellTypeVisible) 
                 .AutoFilter ' Switch off AutoFilter 
          End With 

           rngCopy_SCMAging.Copy Destination:=NewBook_SCM.Worksheets("Aging Inventory").Cells(1, 1)        

          .SaveAs Filename:="KPI" & " " & s_AgingSCM & " " & Format_date & ".xlsx" 
          Application.DisplayAlerts = False 
          NewBook_SCM.Close       
         End With 
'      Else 
        End If 

End sub 

Iを貼り付けましたここから2日後。私が望むのは、ワークブックが存在していて新しいワークブックで上書きされている場合、または存在しない場合は新しいワークブックを作成する場合です。

誰かが私を助けてくれますか?

+1

ファイル/ブックが存在するかどうかを確認する方法については、こちらを参照してください:http://stackoverflow.com/questions/16351249/vba-check-if-file-exists –

答えて

0

簡単な方法は、それが配置されるだろう行うには: - ライン

.SaveAs Filename:="KPI" & " " & s_AgingSCM & " " & Format_date & ".xlsx" 

If fso.FileExists(Application.DefaultFilePath & "\KPI" & " " & s_AgingSCM & " " & Format_date & ".xlsx") 
    fso.DeleteFile Application.DefaultFilePath & "\KPI" & " " & s_AgingSCM & " " & Format_date & ".xlsx", True 
End If 

しかし、ファイルを削除できなかった場合、これはを考慮しています(つまり、既に開いています)

+0

私は申し訳ありませんが機能しません。それを行うための他の方法はありますか?私にお知らせください。 –

+0

特に動作しないのは何ですか?そのような小さな情報で示唆される唯一の他のものは、 '.SaveAs'を' .SaveAs Filename:= Application.DefaultFilePath& "KPI"& ""&s_AgingSCM& ""&Format_date& ".xlsx" ' –

+0

I Havenあなたのコードが追加された後でさえ私の結果の変化は見られませんでした。以前と同じ結果が得られます。 '.saveas'の前にあなたのコードを挿入したときには、すでに' NewBook_SCM'というワークブックを持っていました。私は 'NewBook_SCM'を再実行しなければなりません。 –

関連する問題