我有一个用于Excel的宏,用于在三个工作簿之间传输数据。其中两本工作簿保持不变,只是模板。第三个工作簿是业务管理系统的输出。它会改变,但总是以"RFQ_“开头。例如,RFQ_14787,RFQ_14839,RFQ_63528。
下面的代码是用来循环打开的工作簿,选择以"RFQ_“开头的代码,并将该名称存储在一个变量中,以便在整个代码中使用。
在测试这段代码时,我发现只有首先打开题为"RFQ_XXXXX“的工作簿,它才能工作。
代码的所有功劳都归于@Tim以及他对我的另一个问题here的回答。
Sub Tester2()
Dim wbName As String, shtSrc As Worksheet, shtDest As Worksheet
wbName = GetRfqWbName("RFQ_")
If Len(wbName) = 0 Then
MsgBox "Didn't find the RFQ workbook!"
Exit Sub
Else
'for example: you can substitute the sheet names instead
Set shtSrc = Workbooks(wbName).Sheets(1)
Set shtDest = Workbooks("Transfer Template.xlsm").Sheets(1)
End If
shtSrc.Range("J51").Copy shtDest.Range("B1")
End Sub
'get the name of the first workbook which begins with sName...
Function GetRfqWbName(sName As String) As String
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name Like sName & "*" Then GetRfqWbName = wb.Name
Exit For
Next wb
End Function出于好奇,我只是在寻找一个解释,但是如果有人能够在不打开"RFQ_“工作簿的情况下运行宏,我会很感激的。
发布于 2015-07-30 23:22:05
不幸的是,我不被允许发表评论,所以我必须给出一个答案,但正如我所看到的那样,问题就在:
For Each wb In Workbooks
If wb.Name Like sName & "*" Then GetRfqWbName = wb.Name
Exit For
Next wbExit For不是if-clause的一部分,所以每次检查第一本工作簿之后,它都会中断循环--不管是否成功.
编辑:修改代码如下,以解决问题
For Each wb In Workbooks
If wb.Name Like sName & "*" Then
GetRfqWbName = wb.Name
Exit For
End If
Next wbhttps://stackoverflow.com/questions/31733138
复制相似问题