在任何打开的工作簿中检测刚刚停用的工作表中的选择类型

2023-12-21

我想要一个方法来查询,改变后ActiveSheet (编辑:任何开放的Workbook):

  1. 检测类型Selection在上一个活动表中(最重要的是,如果它是ChartObject or Range).
  2. 如果它是一个Range,获取地址。

这可能吗 ...?

EDIT:...(续)

  1. 无需额外的激活/停用来查询(首选)。
  2. 通过额外的激活/停用来查询。

请注意,将代码添加到ThisWorkbook仅影响该工作簿。 所以,我想 Jon Peltier 为图表事件发布的内容可能会起作用(http://peltiertech.com/chart-events-microsoft-excel/ http://peltiertech.com/chart-events-microsoft-excel/)。 我一直在寻找 Excel VBA 原生的东西(第一选择),或者对我提到的选项或其他替代方案(第二选择)的一些见解。

到目前为止,通过使用基于Section的代码4. 启用所有工作簿中所有工作表上的所有图表的应用程序事件 of 上面的链接 http://peltiertech.com/chart-events-microsoft-excel/,我已成功检测到任何工作簿中任何工作表的停用。 然后,我可以想象点代码2. 额外开启/关闭查询。 但我不知道第1点。

(勉强?)相关问题:VBA:获取工作表中选择的范围,其中选择是图表 https://stackoverflow.com/questions/24965291/vba-get-selected-range-in-a-worksheet-where-the-selection-is-a-chart


尝试将其放在下面ThisWorkbook:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim Sh2         As Worksheet
Dim rAddress    As String

Set Sh2 = ActiveSheet

Application.EnableEvents = False
Application.ScreenUpdating = False

Sh.Activate
If TypeName(Selection) = "Range" Then rAddress = Selection.Address
Sh2.Activate

MsgBox rAddress

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

EDIT

要检测任何打开的工作簿中最近停用的工作表的选择类型,请在 PERSONAL.XLSB 文件(如果是 Windows XP 则为 PERSONAL.XLS)中添加以下内容:

名为 cAppEvent 的类模块:

Option Explicit
Public WithEvents EventApp As Excel.Application

Private Sub EventApp_SheetDeactivate(ByVal Sh As Object)

Dim wb As Workbook
Dim ws As Worksheet

Set ws = Sh
Set wb = ws.Parent
CheckPreviousSelection ws, wb

End Sub

常规模块,无论您想要什么名称:

Public cXLEvents As New cAppEvent

Sub CheckPreviousSelection(Sh As Worksheet, wb As Workbook)

Dim Sh2 As Worksheet
Dim wb2 As Workbook
Dim r   As Range
Dim cht As ChartObject
Dim chk As Long

Set Sh2 = ActiveSheet
Set wb2 = Sh2.Parent

Application.EnableEvents = False
Application.ScreenUpdating = False

Sh.Activate
If TypeName(Selection) = "ChartArea" Then
    Set cht = Sh.ChartObjects(Right(ActiveChart.Name, Len(ActiveChart.Name) - Len(Sh.Name) - 1))
    chk = 1
ElseIf TypeName(Selection) = "Range" Then
    Set r = Selection
    chk = 2
End If
Sh2.Activate

If chk = 1 Then
    MsgBox wb.Name & vbNewLine & Sh.Name & vbNewLine & cht.Name
    'Do whatever you need to for a chart here.
ElseIf chk = 2 Then
    MsgBox wb.Name & vbNewLine & Sh.Name & vbNewLine & r.Address
    'Do whatever you need to for a range here.
End If

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

在本工作簿下:

Private Sub Workbook_Open()

Set cXLEvents.EventApp = Application

End Sub

Notes:

  1. 您可能需要关闭 Excel 并重新打开才能开始工作。
  2. 这将为您提供有关任何打开的工作簿中的工作表中先前选择的信息。但是,如果选择了新工作簿,它不会为您提供有关先前选择的信息。如有必要,可以添加更多代码来捕获该片段。
  3. 此方法使用额外的激活/停用。既然没有Workbook_BeforeSheetDeactivate,我不确定是否有一种方法可以在不额外激活/停用的情况下完成您想要的任务。
  4. 这将在您打开的任何工作簿上运行,即使您不希望它这样做。您很可能希望将 ThisWorkbook 中的代码更改为如下所示:

    If MsgBox("Turn on AppEvents?", vbYesNo) = vbYes Then Set cXLEvents.EventApp = Application

    或者将其从 Workbook_Open 事件中取出并仅在需要时运行它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在任何打开的工作簿中检测刚刚停用的工作表中的选择类型 的相关文章

  • Excel - 确定排列的奇偶性

    我正在处理一个 Excel 工作表 需要确定大小数字的垂直数组的奇偶校验N 该数组包含来自的每个数字1 to N每一次正好一次 在这种情况下 奇偶校验被定义为将加扰数组转换为从小到大排序的数组所需的交换次数 例如 数组 3 1 2 4 具有
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 将最后几个功能添加到我的调度模板生成器中

    感谢 StackOverflow 上的一些出色的人 我几乎完成了调度模板生成器的代码 我还想补充三件事 但我遇到了一些麻烦 当前细分 我有两张表 2 员工列表 和 X 模板 员工列表中的值是从单元格 D9 开始的一列员工姓名 然后将员工值转
  • 文本到行 VBA Excel

    我有一个电子表格 其中包含大约 4000 行数据 其中一列数据具有唯一的订单号 我希望使用 作为分隔符将其分隔 所以本质上我想要 Name Order Date Jane 123 001 111 08 15 2013 Gary 333 12
  • 运行代码(而不是查询)时如何在状态栏上显示进度

    我已经发布了有关在 MS Access 2010 中运行查询时更新状态栏的问题 请参阅在 MS Access 中运行一系列查询时如何在状态栏上显示进度 https stackoverflow com questions 27765376 h
  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • excel 2010刷新BackgroundQuery中运行时错误1004

    我正在尝试用 vba 编写一个脚本 用于将多个文本文件导入 Excel 一张纸 然后将它们绘制在一张图表上 我面临一个问题刷新后台查询命令并出现 1004 运行时错误 我怎样才能解决它 谢谢 埃亚勒 这是我的代码 Sub fring1 Di
  • Excel 工作簿 - 从 C# 读取速度非常慢?

    正在尝试读取 Excel 工作簿 发现读取 3560 行 7 列的工作表需要很长时间 大约需要 1 分 17 秒 我所做的就是循环遍历整个工作表并将值存储在列表中 这是正常现象 还是我做错了什么 static void Main strin
  • 如何让VLOOKUP在VBA中选择到最低行?

    希望自动在单元格中插入 VLOOKUP 公式 录制宏时 我指示它使用相同的公式填充下面的列 效果很好 但是 当 VLOOKUP 搜索的表发生变化 更多或更少的行 时 就会出现问题 在记录时 VLOOKUP 下降到表中的最后一行 273 但是
  • 如何找到特定程序的安装目录?

    我已经成功地编写了一些用于工作的 VBA 宏 这些宏基本上创建了一个数据文件 将其提供给一个程序并对该程序的输出进行后处理 我的问题是程序安装路径是硬编码在宏中的 并且安装在我同事的计算机上可能会有所不同 我首先想到的是 我可以从每个人那里
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • Excel FILTER() 对于空白单元格返回 0

    我怀疑以前有人问过这个问题 但我找不到 FILTER 即使指定了返回字符串 通常也会为空白行返回 0 Using filter 我经常收到空单元格的 0 返回值 假设 A 列中有 6 行数据 abc xyz abc xyz abc If I
  • 我可以获取VBA代码中的注释文本吗

    可以说我有以下内容 Public Sub Information TEST End Sub 有没有办法得到 TEST 结果 不知何故通过VBA 例如 在 PHP 中 有一个获取注释的好方法 这里有什么想法吗 编辑 应该有办法 因为像 MZ
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 两个日期之间的小时数在 Excel 中不起作用

    根据要求 我提供了一张简化的屏幕截图来说明该问题 如您所见 我减去了两个日期并将其格式化为 h mm ss 为什么这不能提供两个日期之间经过的总小时数 有一个更好的方法吗 下面有一个很好的答案 但我试图弄清楚为什么按照此屏幕截图中所示的方式
  • 标志状态的 VBA 替换

    根据文档 Outlook 中的 MailItem FlagStatus 属性是已弃用 https msdn microsoft com en us library microsoft office interop outlook maili
  • 使用输入作为显示日期的基础

    我需要一种方法来使用用户窗体上的输入来确定将在输出上显示的日期 这是我的代码 If StatusBox Value lt 23 59 And ShiftCode Value AP Then Cells emptyRow 8 Value Da
  • 检查未绑定控件是否具有值的正确方法

    简单场景 一个表单和一个文本框 未绑定 Text1 If lt gt Text1 Then MsgBox Not Empty End If 上面的代码有效 表达方式 lt gt Text1如果文本框包含字符 则计算结果为 True 无论文本

随机推荐

  • swiftui 将变量传递到另一个视图

    嘿 你可以在下面找到我的源代码 我想做的是 提取 Json 后 我希望可以在其他视图中访问它 请帮我 我的意思是提取的值 n users Name 所以我只想将响应数据放入另一个视图中 struct User Codable let Nam
  • 如何在Mac上使用python更改文件的创建日期?

    我需要更新 mp4 文件的创建时间 以便它出现在按创建日期排序的媒体文件列表的顶部 我可以使用 os utime 轻松更新文件的访问日期和修改日期 但尚未找到将文件的创建日期更改为 现在 的好方法 我的最终目标是使用 appium 将媒体文
  • 为什么 JasperViewer(基于 Swing 的组件)在 JavaFX 项目中不显示报告?

    我有 2 个运行 JasperReports 的项目 一种在 JavaFX 上运行 另一种仅使用普通 Java 和一个主类 现在 如果我运行普通的 Java 项目 jasperReport 就会工作并显示 vai贾斯珀浏览器类 但对于 Ja
  • 四分之一圆形状,容器在颤动

    我想要一个四分之一圆形的容器 想象一下整个披萨的四分之一片 我该如何实现这一目标 基本上 我想使用堆栈小部件将其放置在右下位置的另一个容器的顶部 圆形部分朝内 并且角度当然与底部容器的右下角相匹配 Thanks 您可以使用CustomPai
  • 在 CSS 样式表之间切换

    因此 与其他问题不同 我想使用这里的代码 如何使用 jQuery 切换 CSS 样式表 https stackoverflow com questions 7846980 how do i switch my css stylesheet
  • 防止 SKNode 相互施加力量

    我有两个SKNode对象 当它们碰撞时 它们的位置会发生变化 我怎样才能防止这种情况发生 同时 我仍然希望能够通过以下方式回复他们的联系 void didBeginContact 我尝试设置他们的mass财产给0 0f但这没有用 您可以通过
  • Xgrid 与 Xcode 并行编译的配合效果如何?

    我对使用 Xgrid 来加速跨多台机器编译 Xcode 的想法很感兴趣 但似乎很难找到有关人们使用它的经验 任何陷阱等的任何信息 我 没有多台 Mac我现在就可以测试它 所以我很好奇 你尝试过吗 它对你来说效果如何 您看到过什么样的加速 我
  • 不间断 utf-8 0xc2a0 空格和 preg_replace 奇怪的行为

    在我的字符串中 我有 utf 8 不间断空格 0xc2a0 我想用其他东西替换它 当我使用 str preg replace xc2 xa0 X str 它工作正常 但是当我使用 str preg replace x C2A0 siu W
  • Postgres 列名或表名何时需要引号,何时不需要?

    让我们考虑以下 postgres 查询 SELECT FROM MY TABLE WHERE bool var FALSE AND str var something 当我删除周围的引号时 查询无法正确响应 str var 但当我做同样的事
  • 如何使用我们的 T4 模板生成器包含自定义实用程序类?

    如何使用我们的 T4 模板生成器包含自定义实用程序类 我尝试向项目添加一个模块 但似乎无法将其包含在内 以便我的生成器使用其中的方法 Thanks 您无法从模板访问项目中的任何代码 即使可以 它会如何执行 该模板在设计时执行 使用 Inhe
  • 运行 selenium 独立服务器和集线器/节点设置有什么区别

    我从 selenium 独立服务器设置开始 java jar selenium server standalone 2 32 0 jar 这使我能够成功连接并运行我的测试 同时运行多个浏览器 当我使用以下设置作为集线器时有什么区别 java
  • DropDownList 的 SelectedIndexChanged 事件未触发

    我的网页中有一个 DropDownList 对象 当我单击它并选择不同的值时 没有任何反应 即使我有一个函数连接到SelectedIndexChanged event 首先 实际对象的 HTML 代码
  • 在 Axis2 中创建自定义异常

    我正在使用 Axis2 1 5 2 和 Eclipse 我使用 Eclipse 生成 WSDL 并根据生成的 WSDL 生成客户端代码 我创建了一个我的服务可以抛出的自定义异常 创建网络服务时一切看起来都正常 Web 服务成功启动 我可以通
  • Golang 模板变量 isset

    我创建了一个函数来检查变量是否已定义 fm isset func a interface bool if a nil a a 0 fmt Println is not set return false fmt Println is set
  • IE8 预期标识符错误

    IE 7 和 8 抛出错误 通过 jQuery 预期标识符 jQuery document ready function jQuery i18n properties name messages path myproject js i18n
  • 请提供 ENGINE 值 Django 数据库配置

    伙计们 我很困惑 我已经安装了 Django 并正常运行服务器 但是当尝试配置数据库并运行 db 同步命令时 它崩溃 返回我的 ENGINE 参数不正常 但设置文件正常 按照设置文件操作 DATABASES default ENGINE d
  • 嵌入式 Jetty - IllegalStateException:没有 SessionManager

    我在谷歌上找到了很多关于这个问题的参考 但没有答案 我正在使用最新版本的 jetty 8 1 2 v20120308 但我似乎无法获得能够使用会话的嵌入式 servlet 当然 该示例是用 scala 编写的 但任何 java 程序员都应该
  • 突然无法推送到heroku:“无法协商密钥交换方法”

    git Push heroku 突然失败了 我安装了 Node js 我认为它可能升级了一些东西并以某种方式破坏了它 我读过所有类似的帖子 它没有告诉我 提供 了哪个交换 并且一切看起来都匹配 但是调用失败 我不知所措 我成功执行了hero
  • asp.net mvc 单选按钮状态

    我正在为一个新项目尝试 asp net mvc 并且遇到了一些奇怪的事情 当我对文本框使用 MVC UI 帮助程序时 这些值在调用之间会保留下来 但是 当我使用一系列单选按钮时 选中状态不会持续存在 这是我认为的一个例子 li li
  • 在任何打开的工作簿中检测刚刚停用的工作表中的选择类型

    我想要一个方法来查询 改变后ActiveSheet 编辑 任何开放的Workbook 检测类型Selection在上一个活动表中 最重要的是 如果它是ChartObject or Range 如果它是一个Range 获取地址 这可能吗 ED