试图弄清楚为什么Excel在第二次运行代码时会冻结

时间:2016-05-20 13:56:05

标签: excel-vba vba excel

对不起,如果代码很脏,我很新。我正在尝试编写一个复制工作表的宏,删除一些不必要的部分,然后将工作表导出到vba中 它第一次工作正常,但如果我尝试在同一个excel实例中运行代码两次,整个事情就会冻结。如果csv文件存在并不重要,我注意到当文件保存为csv时会发生错误。

Option Explicit

Sub Create_CSV()
Dim WbPath As String
    Application.ScreenUpdating = False
    Dim fso As New Scripting.FileSystemObject
    WbPath = ThisWorkbook.Path & "\" & fso.GetBaseName(ActiveWorkbook.Name) & " GRID UPLOAD.csv"
    If FileExist(WbPath) Then
        SetAttr WbPath, vbNormal
        Kill WbPath
    End If

    Sheets("GRID UPLOAD").Copy after:=Worksheets("GRID UPLOAD")
    ActiveSheet.Name = "GRID EXPORT"
    With Sheets("GRID Export")
        .Rows("1:3").Delete Shift:=xlUp
        .Cells.ClearFormats
        .Shapes("GRIDBUTTON").Delete
        .UsedRange.Value = .UsedRange.Value
        .Move
    End With
   ' Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=WbPath, _
    FileFormat:=xlCSV, CreateBackup:=False
   ' Application.DisplayAlerts = True
    Application.ScreenUpdating = True



End Sub


Function FileExist(FilePath As String) As Boolean


Dim TestStr As String

  On Error Resume Next
    TestStr = Dir(FilePath)
  On Error GoTo 0

'Determine if File exists
  If TestStr = "" Then
    FileExist = False
  Else
    FileExist = True
  End If

1 个答案:

答案 0 :(得分:0)

好的,我想我有一个答案。你有两个选择。第一个是程序化的,并保证让你的代码工作,虽然它不会“解决”未来尝试的问题。做:

If FileExist(WbPath) Then
    ActiveWorkbook.Save
Else
    ActiveWorkbook.SaveAs Filename:=WbPath, _
        FileFormat:=xlCSV, CreateBackup:=False
    Application.ScreenUpdating = True
End If

这样,它将保证您不会为给定的工作簿多次调用SaveAs。

另一方面,您可以尝试修复Excel 2013版本。由于某种原因,Office 2013套件中记录了崩溃的详细信息,您可以通过一些资源寻求帮助:

我希望我的回答能满足你的问题。如果您需要其他帮助,请与我们联系。