在Excel中获取选择范围而不激活工作表

时间:2018-03-31 07:49:16

标签: excel-vba vba excel

我有一个非常庞大而复杂的应用程序,主要基于vba(+3500行代码):它导入和分析我学校每位老师的愿望(也是Excel中的wirtten)。然后,管理员可以编辑任何设置/愿望,以便明年教师资源的计划完成。

效果很好。功能几乎就像一个数据库。

我大量使用 Application.ScreenUpdating Application.EnableEvents 来获得一个不错的无闪烁感(直观地看到工作表的变化) 但有时程序会在同一时间更新几张纸并导致闪烁问题(程序结构接近完美,但不完美)

是否有可能在没有激活此工作表的情况下获取工作表中的选择范围?获得想法:你在Sheeet1(Sheet1 激活)并想要获得Sheet2的(范围)。

我已尝试过Sheets(" Sheet2")。Selection.Address或Sheet2.Seledtion.Address,但它不起作用,因为Selection是一个Application-object。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果工作表不是活动工作表,则它不能有选择也不能有活动单元格。无论打开多少工作簿或工作表或窗口,都有一个选择整个Excel应用程序实例。

这个怎么骗:在ThisWorkbook代码表中放了这段代码。

Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    On Error Resume Next
    Sh.Names("Sel").Delete
    On Error GoTo 0
    Sh.Names.Add Name:="Sel", RefersTo:="='" & Sh.Name & "'!" & Target.Address(1, 1), Visible:=True
End Sub

无论何时在工作簿中的任何工作表上进行任何新选择,新选择都将成为工作表级别定义的名称。在Sheet1处于活动状态时,您可以使用

参考sheet2上的“选择”
worksheets("sheet2").range("Sel")
'on a worksheet as,
=SUM(Sheet2!Sel)

存储这些命名范围,关闭工作簿并重新打开它。

我不能凭良心将此视为“最佳实践”。

Time to read How to avoid using Select in Excel VBA.

答案 1 :(得分:0)

如果您不想选择

,请删除https://raw.githubusercontent.com/nlp-compromise/nlp-corpus/master/poe/man_of_crowd.txt字样
selection

答案 2 :(得分:0)

Sheets("Sheet2").Range("A1:B10").Value仅用于读取记录就足够了。