2017-09-30 12 views
1

の効果私は、.csvファイルを開くには、VBAを使用してい避け側workbooks.open .csvファイル

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

それは動作しますが、副作用を持つ:csvファイルが開かれ、元.xlsmファイルが再計算を開始します。

副作用を避ける方法はありますか?

ps。私は既にExcelの計算をManualとして設定しています。手動で、F9キーを押しを計算するには

Application.Calculation = xlCalculateManual 

答えて

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前にこの行を追加します。計算を避けるために

それとも

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ファイルとして保存されて参照してください)。真のカンマ区切り値ファイルで動作するように私のソリューションを更新しました。 "Format:= 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

はい、動作します。ただし、各ワークシートの有効な計算をfalseに設定する必要があるのはなぜですか?私はすでに設定されているので、とても優秀です。神秘的な優秀さ... – athos

+0

それは既知の問題と思われ、それはExcelの揮発性の振る舞いと関係がある。 –

+0

チョコレートの箱のような... – athos