繁体   English   中英

仅当首先打开某些工作簿时,Excel宏才起作用

[英]Excel macro only works when certain workbook is opened first

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

编写下面的代码是为了循环浏览打开的工作簿,选择以“ RFQ_”开头的代码,然后将该名称存储在一个变量中,以在整个代码中使用。

在测试此代码时,我发现只有首先打开名为“ RFQ_XXXXX”的工作簿,它才起作用。

该代码的全部功劳归于@Tim Williams,他对这里的其他问题之一的回答。

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_”工作簿的情况下运行宏,我将不胜感激。

不幸的是,我不允许发表评论,因此我必须做出回答,但就我所见,问题出在以下方面:

For Each wb In Workbooks
    If wb.Name Like sName & "*" Then GetRfqWbName = wb.Name
    Exit For
Next wb

Exit For不是if -clause的一部分,因此每次检查第一个工作簿后-不管是否成功,它都会中断循环。

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

For Each wb In Workbooks
    If wb.Name Like sName & "*" Then 
       GetRfqWbName = wb.Name
       Exit For
    End If
Next wb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM