2016-12-22 66 views
1

細胞我有一個打開CSV文件,應該單元在工作簿複製一個簡單的宏:Excel崩潰時,我複製在宏

Sub macro1() 
Dim build_w As Workbook 
Dim build_s As Worksheet 
Dim folder_st As String 

Application.ScreenUpdating = False 
folder_st = "c:\file.csv" 
Set build_w = Application.Workbooks.Open(folder_st) 
Set build_s = build_w.Sheets("build") 
build_s.Range("A1").Copy 
ActiveSheet.Paste Range("A284") 
build_w.Close True 
Application.ScreenUpdating = True 
End Sub 

如果我註釋掉線build_s.Range (「A1」)。複製一切都很好,但是如果我放棄這一點,Excel每次都會崩潰。

有什麼建議嗎?

+0

根據我的經驗,有時非XLS文件(特別大的文件)可能會使Excel崩潰。有時我可以解決它以XLSX或XLSB格式保存打開的CSV文件,然後使用這個新文件。 –

+0

CSV文件只有4個數據單元格。我在具有更大CSV文件的不同宏中執行完全相同的工作並且可以工作 – Birbal

回答

2

你知道,在ActiveSheet粘貼的那一刻本身就是build_s工作?使用諸如Activesheet之類的東西時,這是個問題。總是最好精確指定工作表和工作簿對象,而不必指定給定時刻處於活動狀態的對象。

最終,得到你想要的行爲,你應該做的:

build_s.Range("A1").Copy ThisWorkbook.ActiveSheet.Range("A284") 
+0

我也必須改變CSV文件,我只是增加了一些空行,似乎停止崩潰 – Birbal

+0

@Birbal是我懷疑是因爲一些計時問題。很高興知道問題解決了。 :) –

0

您是否嘗試過處理任何可能出現的錯誤有:

On Error GoTo MyHandler 

MyHandler: 
+0

如果Excel崩潰,那不是VBA錯誤。 –

0

這是因爲在打開CSV文件,它將成爲活動工作簿和其唯一的工作表中的活動工作

你可以利用這個優勢如下:

Option Explicit 

Sub macro1() 
    Dim folder_st As String 

    Application.ScreenUpdating = False 
    folder_st = "c:\file.csv" 
    With ActiveSheet '<--| reference your currently active sheet before opening csv file 
     Application.Workbooks.Open(folder_st).Sheets("build").Range("A1").Copy '<--| open csv file (and it becomes the Active Workbook) and reference its "build" sheet range "A1" and copy it... 
     .Range("A284").PasteSpecial '<--| paste it to your referenced sheet range A284 
     Application.CutCopyMode = False '<--| release clipboard 
     ActiveWorkbook.Close False '<--| close Active workbook, i.e. the csv file 
    End With 
    Application.ScreenUpdating = True 
End Sub 
0

PFB爲需要的代碼。 CSV文件不能有多張紙,所以這就是爲什麼它一定會崩潰。 CSV文件只能有一張紙,因此不需要指定紙張名稱。

Sub macro1() 

'Declared variables 
Dim build_w As Workbook 
Dim folder_st As String 

'Disabling screen updates 
Application.ScreenUpdating = False 

'Initializing the file name 
folder_st = "c:\file.csv" 

'Opening the workbook 
Set build_w = Workbooks.Open(folder_st) 

'Copying the value of cell A1 
Range("A1").Copy 

'Selecting the cell A284 
Range("A284").Select 

'Pasting the copied value 
ActiveSheet.Paste 

'Saving the workbook by saving the .CSV file 
build_w.Close True 

'Enabling screen updates 
Application.ScreenUpdating = True 

End Sub 
+0

不,不是。我有一個不同的csv文件按鈕按相同的代碼,並在那裏工作,我不明白爲什麼崩潰的宏 – Birbal

+0

正如我所說的CSV文件只能有一個工作表,所以不需要創建一個對象的工作表。我嘗試在我的系統上運行你的代碼,宏沒有崩潰,它在生成一行錯誤「Set build_s = build_w.Sheets(」build「)」默認情況下,CSV文件名被用作表格名稱,例如這裏的文件名是file.CSV,所以表名默認爲「file」。 @Birbal –