2017-08-16 129 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,但我不能做太多,但是请说声谢谢;) –

相关问题