2016-02-16 7 views
0

Я хочу прокрутить 2000 файлов csv, преобразовать их в xls, внести изменения в электронную таблицу.Код Excel VBA Сохранить и закрыть

Я не могу решить, как сохранить и закрыть книгу, прежде чем переходить к следующему.

Я попробовал следующее в конце сценария.

Application.ActiveWindow.Close SaveChanges:=False 
ActiveWorkbook.Close SaveChanges:=False 

Получаю незначительную потерю сообщения о достоверности.

Полный код

Sub batchconvertcsvxls() 
Dim wb As Workbook 
Dim strFile As String, strDir As String, strOut_Dir As String, myNewFileName As String 

strDir = "C:\csv\" 'location of csv files 
strOut_Dir = "C:\converted\" 'location of xls files 
strFile = Dir(strDir & "*.csv") 

Do While strFile <> "" 

Set wb = Workbooks.Open(filename:=strDir & strFile, Local:=True) 

    With wb 
     .SaveAs strOut_Dir & Replace(wb.Name, ".csv", ".xls"), 56 
     .Close True 
    End With 
Set wb = Nothing 

Set wb = Workbooks.Open(filename:=strOut_Dir & Replace(strFile, ".csv", ".xls")) 

Rows("1:1").Select 
With Selection.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .ThemeColor = xlThemeColorDark2 
    .TintAndShade = -0.249977111117893 
    .PatternTintAndShade = 0 
End With 
Selection.RowHeight = 60 
Selection.ColumnWidth = 30 
With Selection 
    .HorizontalAlignment = xlGeneral 
    .VerticalAlignment = xlBottom 
    .WrapText = True 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 
With Selection 
    .HorizontalAlignment = xlGeneral 
    .VerticalAlignment = xlTop 
    .WrapText = True 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 
Columns("E:E").Select 
With Selection 
    .HorizontalAlignment = xlLeft 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 
Cells.Select 
Selection.AutoFilter 
Range("E2").Select 
ActiveWindow.FreezePanes = True 

For i = 1 To ActiveSheet.UsedRange.Columns.Count 

    DataFound = False 
    j = 2 
    While DataFound = False And j <= ActiveSheet.UsedRange.Rows.Count 
     If Cells(j, i).Value <> "" Then 
      DataFound = True 
     End If 
     j = j + 1 
    Wend 
    If DataFound = False Then 
     Columns(i).Hidden = True 
    End If 
Next 

strFile = Dir 

Application.ActiveWindow.Close SaveChanges:=True ActiveWorkbook.Close 
SaveChanges:=False 

Loop 

End Sub 
+0

Я не уверен, но если вы хотите, чтобы сохранить изменения, не должен то этот 'ActiveWorkbook.Close SaveChanges: = False' должен быть установлен на' True'? – newguy

ответ

0

Вы можете попробовать wb.Close SaveChanges:=False, так как вы установили книгу как wb, что может заставить его закрыть без окна сообщения выскакивать.

Также вы можете попробовать Application.DisplayAlerts = False (это идет в начале вашего кода), он останавливает всплывающие сообщения большинства типов (есть некоторые ошибки, которые нельзя остановить, хотя (у меня нет списка, но «из memory "- ошибка, которая не может быть предотвращена, например)).

Я буду смотреть в него немного больше синусоидальных им делать это с верхней частью моей головы и обновить пост, если я получаю больше