【发布时间】:2016-09-14 16:03:18
【问题描述】:
使用 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.
如果我运行上面的代码并且当它运行输入框时,如果我单击电子表格上的一个单元格,我希望代码运行并允许代码继续,变量仍然引用代码所在的工作簿而不是“选定的”工作簿。如果在选择一个单元格时,我还最大化和最小化了电子表格(基本上是激活它),然后单击一个单元格并允许代码继续,则设置了活动的电子表格并且它似乎可以工作。我意识到单元格引用什么也没做。但是暂停允许我“激活”所需的电子表格。
我正在寻找一种更优雅的方式来处理将我的代码附加到已经打开的电子表格。我目前的解决方案很笨拙。有没有办法让用户选择打开的电子表格,然后让我的代码在该电子表格上“执行”?
我知道这是一个奇怪的问题。请善待它??!!
【问题讨论】:
-
为什么要使用
sTest = ActiveCell.Value,因为它只是为了在下一行被覆盖?另外,我认为您需要做的就是将其设为最后一行:Set oWBSource = Workbooks(sTest),除非我遗漏了什么。我高度建议阅读/学习How to avoid.Select/.Activate -
同意...正如我评论的那样,这只是为了测试目的。我试图让某人更容易“测试”代码。
-
我不太明白 - 最后设置了
oWBSource,你不能在With oWBSource块内运行代码吗? -
没有。
With oWBSource块引用了代码所在的电子表格,而不是点击的电子表格。除非我先最大化和最小化选定的工作表。然后它可以正常工作。我正在尝试找到一种使选择更加优雅的方法。 -
那么您发布的代码不是您正在运行的代码吗?它是用户选择工作表的代码,然后在该工作表上运行一些其他代码?用户选择一个范围后,
oWBSource更改为引用该工作表 - 此工作表可能有代码,也可能没有代码。如果您创建一个新工作簿,然后在该新工作簿上选择单元格A1,那里没有没有代码,这就是为什么当您说该块引用代码所在的工作表时我感到困惑.