2017-08-16 115 views
0

我已經編寫了下面的代碼,但我似乎無法檢測到它有什麼問題。該程序被設置爲從數據傳輸工作簿:VBA代碼有時會返回錯誤,有時候不會

SRJem.xlsx

到下面的代碼被寫入活動工作簿。現在,我同時打開兩個工作簿(並且我不想在執行操作時關閉它們)。問題是,代碼在某些時候是成功的,而它在某些時候會返回第15行中的錯誤。我在手術前試過挽救,但仍然發生。

線15:

ws.Cells(iRow,4)。價值= wbSource.Sheets( 「1」)的細胞(14,1)。價值

我需要一些關於我有錯誤的光解釋。非常感謝。

Sub transfer_to_masterfile() 

'find first empty row in database 
Dim iRow As Long 
Dim ws As Worksheet 
Set ws = Worksheets("1") 
Dim wbSource As Workbook 

iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _ 
SearchDirection:=xlPrevious, LookIn:=xlValues).row + 1 

Set wbSource = Workbooks.Open("C:\Users\fed.staff01\Desktop\J.G.E - QS\6. EXCEL PROGRAMS\SRJem.xlsx") ' <<< path to source workbook 

'Now, transfer values from wbSource to wbTarget: 
ws.Cells(iRow, 4).Value = wbSource.Sheets("1").Cells(14, 1).Value 
ws.Cells(iRow, 5).Value = wbSource.Sheets("1").Cells(6, 4).Value 

Dim mats As String 
Dim row As Integer 

row = 23 

Do 
    mats = mats & " " & wbSource.Sheets("1").Cells(row, 1).Value & " " & wbSource.Sheets("1").Cells(row, 3).Value & _ 
    "    " & wbSource.Sheets("1").Cells(row, 5).Value 

    If wbSource.Sheets("1").Cells(row + 1, 1).Value > 0 Then 
     mats = mats & vbNewLine 
    End If 

    If wbSource.Sheets("1").Cells(row + 1, 1).Value = "" Then 
     Exit Do 
    End If 

    row = row + 1 

Loop Until row = 42 

ws.Cells(iRow, 7).Value = mats 
'ws.Cells(iRow, 5).Value = wbSource.Sheets("1").Cells(6, 4).Value 

'wbSource.Close 
'wbTarget.Close 

End Sub 
+0

您的工作表被命名爲「」1「'?或者你正在試圖提到第一個'1'? – PatricK

+0

@PatricK,我指的是我的工作表名稱是「1」。 –

+0

要將問題標記爲已回答,只需點擊對您有幫助的答案左側的「打勾」即可。 [幫助文件。](https://stackoverflow.com/help/accepted-answer) –

回答

0

有避免錯誤在你提到的線需要許多條件:

1) there must be a file with the name specified for `wbSource` 
2) that file must open with an activeSheet named `1` 
3) the program workbook (`ws`) must also have a worksheet named `1` 
4) there must be a `*` on the activeSheet of the `ws` workbook 

注意到有2例因一個activeSheet。爲了避免這種情況,我建議爲每個參考表(例如,set sh = ws.worksheets("1"))製作一個變量,以便您不依賴於該表是否處於活動狀態。根據我的經驗,這通常是問題,但上面提到的其他條件也可能是問題所在。

+0

謝謝你。我檢查了我的條件,我沒有關於項目1到3的問題。我在源文件中只有一個工作表,它被命名爲「1」。我不明白第4項,對不起。你能詳細說明一下嗎?我會嘗試你有'sh = ws.worksheets(「1)''的建議,並且我會給你反饋。 –

+0

項目4基於你的代碼行開始:iRow = ws.Cells.Find(What:=」 *「,...如果找不到a *,那麼iRow將不確定 –

+0

我現在看到我的錯誤Sir @Tony M.我的iRow將不確定,因爲我正在複製第4列(D列)而不是第1列的數據(D列),所以它有時會返回錯誤,這是我的錯誤,我嘗試在第一列中輸入任何輸入,並且錯誤不重複,我希望我能夠upvote,但我不能做太多,但是請說聲謝謝;) –

相關問題