2014-03-05 267 views
0

我正在寫一個宏,它可以在保存在模板中的Excel表格中工作,然後從單獨的應用程序導出到.xls或.xlsx。該宏根據輸入到單元格中的數量複製兩列'x'次數。Excel VBA:運行時錯誤'1004':選擇範圍類失敗的方法

Sub Matrix_Quantity() 
Dim x As Integer 
x = ActiveWorkbook.Sheets("Inspection Sampling Matrix").Cells(11, 4) 
Dim n As Integer 
    n = x - 1 
    For numtimes = 1 To n 
     'Loop by using x as the index number to make x number copies. 
     Sheets("Inspection Report").Columns("F:G").Select 
     Selection.Copy 
     Selection.Insert Shift:=x1 + nToRight 
    Next 
End Sub 

我遇到的問題是,當使用模板(.xlt)運行宏時,它運行良好。只要模板轉換爲.xls或.xlsx,它就會正常工作並出現運行時錯誤。當調試宏它突出

Sheets("Inspection Report").Columns("F:G").Select 

我的感覺是,它正在尋找在名爲.xlt工作簿中選擇列,但在轉換爲.xls或.xlsx它仍試圖查找名爲.xlt工作簿和我不知道如何或爲什麼這樣做。

+1

這是因爲您的工作表「檢查報告」在宏運行的時刻未處於活動狀態。請閱讀[**如何避免使用Select/Active語句**](http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select)。您可以用'Sheets(「Inspection Report」)替換您的代碼。列(「F:G」)。複製'和'表格(「檢查報告」)列(「F:G」)。插入Shift:= x1 + nToRight' –

+0

感謝您的迴應。當我插入你推薦的代碼並運行宏時,Excel將崩潰而沒有錯誤。它只是帶來了Windows錯誤「Microsoft Excel已停止工作」 – user3384820

+0

其實,我不明白你在這裏做什麼:'Shift:= x1 + nToRight'?它應該是'Shift:= xlToRight'? –

回答

0

我遇到了同樣的問題,simoco的回答讓我走上了正軌。這應該工作:

Sub Matrix_Quantity() 
Dim n As Integer 
Dim numtimes As Integer 
n = Sheets("Inspection Sampling Matrix").Cells(11, 4) - 1 
For numtimes = 1 To n 
    Sheets("Inspection Report").Columns("F:G").Copy 
    Sheets("Inspection Report").Columns("F:G").Insert Shift:=xlShiftToRight 
Next 
End Sub 
1

當我試圖運行一個腳本與他們的工作簿的名稱拆分工作簿,並將其保存爲獨立的文件,我收到運行時錯誤1004,因爲我有隱藏的標籤之一。

確保您在運行拆分工作簿腳本之前取消隱藏所有選項卡!

1

您必須在不同的工作表上編寫參考不同的代碼。

嘗試在模塊中寫入相同的內容。

+0

我添加了行: '代碼sheet.Activate(其中sheet是我正在使用的工作表) sheet.Range(「A1」)。Select code' 並且它擺脫了錯誤。在繼續操作之前,Excel會切換到工作表一秒鐘,這很煩人,但不是那麼重要。 –

相關問題