Excel VBA允许用户选择已打开的工作簿,并将变量附加到所选工作簿

Excel VBA允许用户选择已打开的工作簿,并将变量附加到所选工作簿,vba,excel,Vba,Excel,使用Excel 2013 VBA,我熟悉使用以下命令设置工作簿变量的值: Set oWBSource = Workbooks.Open(strFileToOpen) 'Works well. 但在我的情况下,有时候工作簿已经在桌面上打开了。我正试图找到一种更优雅的方式来“选择”该电子表格,然后将我的变量附加到工作簿上进行操作。代码运行在一个单独的“主”电子表格上 目前,我正在询问用户该文件是否已打开。若有,则: Dim rng As Range Set rng = Ap

使用Excel 2013 VBA,我熟悉使用以下命令设置工作簿变量的值:

    Set oWBSource = Workbooks.Open(strFileToOpen) 'Works well.
但在我的情况下,有时候工作簿已经在桌面上打开了。我正试图找到一种更优雅的方式来“选择”该电子表格,然后将我的变量附加到工作簿上进行操作。代码运行在一个单独的“主”电子表格上

目前,我正在询问用户该文件是否已打开。若有,则:

    Dim rng As Range
    Set rng = Application.InputBox("Select any cell on workbook to operate on.", "Click Workbook Cell", Type:=8) 'Stops code and allows user to select a cell on an open spreadsheet
    Dim sTest As String 'variable used to test. 
    sTest = ActiveCell.Value 'Testing to see what value code is seeing. 
    sTest = ActiveWorkbook.Name 'Testing to see what value code is seeing
    Set oWBSource = Workbooks(ActiveWorkbook.Name) 'Works if selected Workbook is maximized and minimized. 
如果我运行上述代码,并且当它运行inputbox时,如果我单击电子表格上希望代码操作的一个单元格并允许代码继续,那么变量仍然引用代码所在的工作簿,而不是“选定”工作簿。如果在选择一个单元格的同时,我也将电子表格最大化和最小化(基本上激活它),然后单击一个单元格并允许代码继续,那么激活的电子表格将被设置,并且似乎可以工作。我意识到cell引用什么都没做。但暂停允许我“激活”所需的电子表格

我正在寻找一种更优雅的方法来处理将代码附加到已经打开的电子表格的问题。我目前的解决方案很笨拙。难道没有办法让用户选择打开的电子表格,然后让我的代码在该电子表格上“执行”吗


我知道这是个奇怪的问题。请客气一点

如果我正确理解您的意图,只需使用
rng
解析所选工作簿即可:

Set oWBSource = rng.Parent.Parent

rng.Parent
是一个范围所属的工作表,而工作表的
.Parent
是它的工作簿。

为什么要使用
sTest=ActiveCell.Value
,以便在下一行覆盖它?另外,我认为您所需要做的就是将此作为最后一行:
Set oWBSource=Workbooks(sTest)
,除非我遗漏了什么。我强烈建议阅读/学习同意。。。正如我所评论的,这只是为了测试目的。我试图让别人更容易“测试”代码。我不太明白-在最后设置了
oWBSource
的情况下,你不能在带有oWBSource块的
中运行你的代码吗?不。带有oWBSource
块的
引用了代码所在的电子表格,而不是单击的电子表格。除非我先最大化和最小化所选图纸。然后它就正常工作了。我正在试图找到一种方法使选择更加优雅。那么您发布的代码不是您正在运行的代码?这是用户选择工作表,然后在该工作表上运行其他代码的代码吗?用户选择范围后,
oWBSource
更改为引用该工作表-此工作表可能有代码,也可能没有代码。如果创建一个新工作簿,然后在该新工作簿上选择cell
A1
,则那里没有代码,这就是为什么当您说块引用代码所在的工作表时,我感到困惑的原因。