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

时间:2016-09-14 16:03:19

标签: excel vba excel-vba

使用Excel 2013 VBA,我熟悉使用以下方法设置Workbook变量的值:

    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. 

如果我运行上面的代码并且当它运行输入框时,如果我单击电子表格上的一个单元格,我希望代码可以运行并允许代码继续,变量仍然引用代码所在的工作簿而不是“选定的”工作簿。如果,在选择一个单元格时,我还最大化并最小化电子表格(基本上是激活它),然后单击一个单元格并允许代码继续,活动电子表格已设置并且似乎有效。我意识到单元格引用什么都不做。但暂停允许我“激活”所需的电子表格。

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

我知道这是一个奇怪的问题。请善待它评价!! !!

1 个答案:

答案 0 :(得分:1)

如果我理解您正在尝试做的事情,只需使用rng解析所选的工作簿:

Set oWBSource = rng.Parent.Parent

rng.Parent是工作表范围的一部分,工作表的.Parent是其工作簿。