2017-09-30 100 views
1

我使用VBA來打開一個.csv文件避免副作用workbooks.open .csv文件

Sub open_csv_file()   
    Workbooks.Open("c:\test.csv") 
    ActiveWorkbook.Close  
End Sub 

它的工作原理,但有一個副作用:CSV文件打開時,原.xlsm文件開始重新計算。

有沒有辦法避免的副作用?

ps。我已經將Excel計算設置爲手動。

回答

4

一種方法是打開文件與Excel的其他實例:

Dim app As Excel.Application 
Dim csv As Workbook 

Set app = New Excel.Application 
app.Visible = True 

Set csv = app.Workbooks.Open("c:\test.csv") 
-1

Workbooks.Open前加入這一行:

Application.Calculation = xlCalculateManual 

要手動計算,按F9鍵。

或者

避免計算
Sub open_csv_file()   
    Application.Calculation = xlCalculateManual 
    Workbooks.Open("c:\test.csv") 
    ActiveWorkbook.Close  
    Application.Calculation = xlCalculateAutomatic 
End Sub 
+0

沒有它不工作。之前,所以我已經在excel選項中將計算設置爲手動。 – athos

+0

你已經編輯了你的問題,你將計算設置爲手動後,我回答了你原來的問題。那麼爲什麼downvote?根據我當時的瞭解,我給了你一個誠實的答案。 – peakpeak

+0

我測試了一個帶有複雜公式的大型excel文件,它不起作用。 – athos

1

打開.csv文件時,調用.XLSM文件重新計算,但不是在打開.xls文件時。打開之前將.csv文件重命名爲.xls將阻止重新計算,並仍照常打開文件。

Sub open_csv_file() 
    Name "c:\test.csv" As "c:\test.xls" 
    Workbooks.Open "c:\test.xls", Format:=2 
End Sub 

應該添加一些錯誤處理來處理新文件名已經存在的情況。

+0

它不完美 - 文件打開,沒有觸發重新計算,但所有行都只有1列,逗號不再作爲分隔符... – athos

+0

因爲我的解決方案只適用於製表符分隔文件(這是什麼我通常會將其保存爲.csv文件)。我已更新我的解決方案,以使用真正的逗號分隔值文件。 「格式:= 2」表示在打開時使用逗號作爲分隔符。 – Michael

+0

謝謝你的想法! – athos

2

,這似乎是工作的唯一解決方法是Worksheet.EnableCalculation設置爲False每個工作表。

試試這個

Sub open_csv_file() 
    Dim ws As Worksheet 
    For Each ws In ThisWorkbook.Worksheets 
     ws.EnableCalculation = False 
    Next ws 
    Workbooks.Open ("c:\users\test\desktop\test.csv") 
    ActiveWorkbook.Close 
End Sub 
+0

是的,它的工作原理。但是,爲什麼必須將每個工作表enablecalculation設置爲false?因爲我已經設置好了。神祕的excel ... – athos

+0

它似乎是一個已知的問題,它與Excel的易失性行爲有關。 –

+0

就像一盒巧克力... – athos