2016-05-25 2 views
0

Я хочу выполнить, если рабочая книга существует уже тогда, повторите ее, если она не существует, затем создайте книгу.Повторно выполнить, если книга существует или не используется vba Excel

У меня есть уникальные значения (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 

я застрял здесь с 2-х дней. Все, что я хочу, это то, что рабочая книга существует, а затем перезаписывать новую книгу, а если ее не существует, создайте новую книгу.

Может кто-то, пожалуйста, помогите мне.

+1

Здесь вы можете найти информацию о том, как проверить, существует ли файл/рабочая книга: http://stackoverflow.com/questions/16351249/vba-check-if-file-exists –

ответ

0

Быстрый способ сделать это было бы размещение: -

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

Над линией

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

Но это не объяснить, если файл не может быть удален (т.е. уже открыт)

+0

Мне жаль, что он не работает. Есть ли другой способ сделать это. Пожалуйста, дайте мне знать. –

+0

Что конкретно не работает? единственное, что можно предложить с такой небольшой информацией, заключается в изменении '.SaveAs' на' .SaveAs Filename: = Application.DefaultFilePath & "\ KPI" & "" & s_AgingSCM & "" & Format_date & ".xlsx" ' –

+0

I haven Я не видел никаких изменений в моем результате даже после добавления вашего кода. Он дает тот же результат, что и раньше. У меня уже есть книга с «NewBook_SCM», когда я вставил ваш код перед '.saveas', он ничего не сделал. Я должен повторно выполнить 'NewBook_SCM'. –

Смежные вопросы