首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel宏只在打开某些工作簿时才能工作。

Excel宏只在打开某些工作簿时才能工作。
EN

Stack Overflow用户
提问于 2015-07-30 20:11:29
回答 1查看 1.4K关注 0票数 1

我有一个用于Excel的宏,用于在三个工作簿之间传输数据。其中两本工作簿保持不变,只是模板。第三个工作簿是业务管理系统的输出。它会改变,但总是以"RFQ_“开头。例如,RFQ_14787,RFQ_14839,RFQ_63528。

下面的代码是用来循环打开的工作簿,选择以"RFQ_“开头的代码,并将该名称存储在一个变量中,以便在整个代码中使用。

在测试这段代码时,我发现只有首先打开题为"RFQ_XXXXX“的工作簿,它才能工作。

代码的所有功劳都归于@Tim以及他对我的另一个问题here的回答。

代码语言:javascript
复制
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_“工作簿的情况下运行宏,我会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 23:22:05

不幸的是,我不被允许发表评论,所以我必须给出一个答案,但正如我所看到的那样,问题就在:

代码语言:javascript
复制
For Each wb In Workbooks
    If wb.Name Like sName & "*" Then GetRfqWbName = wb.Name
    Exit For
Next wb

Exit For不是if-clause的一部分,所以每次检查第一本工作簿之后,它都会中断循环--不管是否成功.

编辑:修改代码如下,以解决问题

代码语言:javascript
复制
For Each wb In Workbooks
    If wb.Name Like sName & "*" Then 
       GetRfqWbName = wb.Name
       Exit For
    End If
Next wb
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31733138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档