Excel VBA 最终用户选择图表对象

2024-05-09

我想生成一些代码,允许最终用户从工作表中选择多个图表之一,之后我将根据该选择进行一系列操作。

我正在寻找类似于 Application.Inputbox Type:=8 的东西,它允许对象选择而不是范围选择。

我对不起眼的老VBA要求太多了吗?


首先选择图表,然后在选定的图表上运行代码,这比暂停代码并尝试从代码中选择图表要容易得多。

但这是可以完成的。

您需要一个用户表单,称为F_ChartChooser有两个按钮,btnCancel and btnContinue.

中的代码F_ChartChooser module:

Option Explicit

Private Sub btnCancel_Click()
  CancelProcedure
End Sub

Private Sub btnContinue_Click()
  ContinueProcedure
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  ' so clicking red X doesn't crash
  If CloseMode = 0 Then
    Cancel = True
    CancelProcedure
  End If
End Sub

常规模块中的代码包含一个必须从用户处获取图表的主程序。它必须以非模式方式调用用户窗体,以便用户可以选择工作表中的图表。这意味着代码在显示表单时继续运行,因此要做的就是在调用用户表单时结束子程序。

根据用户表单发生的情况,代码要么继续CancelProcedure或与ContinueProcedure。这是代码:

Option Explicit

Dim mfrmChartChooser As F_ChartChooser

Sub Main()
  ' code here

  ' need to select chart(s) here
  Application.Goto ActiveCell
  Set mfrmChartChooser = New F_ChartChooser
  mfrmChartChooser.Show vbModeless
End Sub

Sub CancelProcedure()
  Unload mfrmChartChooser
  Set mfrmChartChooser = Nothing
  MsgBox "User canceled.", vbExclamation
End Sub

Sub ContinueProcedure()
  Unload mfrmChartChooser
  Set mfrmChartChooser = Nothing
  If Not ActiveChart Is Nothing Then
    ' do something with active chart

    ' this demo is announcing that it was selected
    MsgBox """" & ActiveChart.ChartTitle.Text & """ was selected.", vbExclamation
    ' end of demo code
  ElseIf TypeName(Selection) = "DrawingObjects" Then
    Dim sh As Shape
    Dim vCharts As Variant
    Dim nChart As Long
    ReDim vCharts(0 To nChart)
    For Each sh In Selection.ShapeRange
      If sh.HasChart Then
        ' do something here with each chart

        ' this demo is building a list of selected charts
        nChart = nChart + 1
        ReDim Preserve vCharts(0 To nChart)
        vCharts(nChart) = sh.Chart.ChartTitle.Text
        ' end of demo code
      End If
    Next

    ' this demo now is showing the list of selected charts
    If nChart = 0 Then
      MsgBox "No chart selected.", vbExclamation
    Else
      If nChart = 1 Then
        MsgBox """" & vCharts(nChart) & """ was selected.", vbExclamation
      Else
        Dim sPrompt As String
        sPrompt = nChart & " charts selected:" & vbNewLine & vbNewLine
        Dim iChart As Long
        For iChart = 1 To nChart
          sPrompt = sPrompt & """" & vCharts(iChart) & """" & IIf(iChart < nChart, vbNewLine, "")
        Next
        MsgBox sPrompt, vbExclamation
      End If
    End If
    ' end of demo code
  Else
    ' do nothing because no chart was selected

    ' this demo is announcing that nothing was selected
    MsgBox "No chart selected.", vbExclamation
    ' end of demo code
  End If
End Sub

The CancelProcedure and ContinueProcedure上面的例程中有多余的代码只是为了帮助演示。在真实的代码中,我会像这样简化它们,甚至可能懒得在没有选择任何内容时通知用户(他们知道他们取消了,对吧?),并且只处理选定的图表:

Sub CancelProcedure()
  Unload mfrmChartChooser
  Set mfrmChartChooser = Nothing
End Sub

Sub ContinueProcedure()
  Unload mfrmChartChooser
  Set mfrmChartChooser = Nothing
  If Not ActiveChart Is Nothing Then
    ' do something with active chart
    ProcessChart ActiveChart
  ElseIf TypeName(Selection) = "DrawingObjects" Then
    Dim sh As Shape
    Dim vCharts As Variant
    Dim nChart As Long
    ReDim vCharts(0 To nChart)
    For Each sh In Selection.ShapeRange
      If sh.HasChart Then
        ' do something here with each chart
        ProcessChart sh.Chart
    Next
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA 最终用户选择图表对象 的相关文章

  • Excel:包括过滤器中的第一行

    我正在特别考虑 Excel VBA 的 AutoFilter 方法 但我认为我的问题也适用于 GUI 当我将筛选器应用于 Excel 工作表时 未选择任何内容 筛选器将应用于所有行从第二次开始 有什么方法可以包含第一行 以便它也可以被过滤掉
  • 在 Django(Python) 中向用户提供 Excel(xlsx) 文件下载

    我正在尝试使用 Django 创建和提供 Excel 文件 我有一个 jar 文件 它获取参数并根据参数生成 excel 文件 并且它可以正常工作 但是 当我尝试获取生成的文件并将其提供给用户下载时 文件损坏了 它的大小为 0kb 这是我用
  • 如何从另一个 Excel 实例引用工作簿

    我相信我的问题相当简单 我有一个工作簿 我正在使用它从另一个软件 SAP 获取一些数据 当我从软件导出数据时 它会自动打开一个 xlsx 文件 然后我需要做的是从该文件复制一些数据 粘贴到我的原始工作簿上 然后关闭该文件 我的代码中给我带来
  • 如何使用 C# 在 MS Excel 单元格中添加数字验证

    我的目标是限制用户在 MS Excel 单元格中仅输入 1 到 100 范围内的值 我正在以编程方式生成 Excel 文件 但是当我添加上述验证时 抛出异常Exception from HRESULT 0x800A03EC 我写的代码如下
  • 突出显示 extjs4 折线图的一部分

    在 extjs 4 1 1a 中 下面的代码是折线图的工作示例 现在我需要在给定的最小和最大时间戳上突出显示该图表的一部分 xtype chart store ChartData height 100 width 100 legend po
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • 使用 VBA 使用另一个表中的值更新访问表

    我在数据库中有两个表 表 1 和表 2 我正在尝试根据表 2 中的数据使用 VBA 代码更新表 1 Example Table 1 PartNo Price Description A 100 B 200 Bad C 300 Table 2
  • 如何VBA等待Windows保存对话框和发送密钥

    我正在创建一个宏文件 用于下载并保存从 SAP 旧版本 7 20 中提取的数据 当出现保存对话框时 未检测到 Windows 对话框 因为我的客户端 SAP 版本是旧版本 7 20 现在我对此的解决方案是发送密钥 但问题是某些数据包含大量数
  • 如何获取数据透视表的 ListObject 对象?

    这个问题最初是作为answer https stackoverflow com a 21321664 2712565作者 休 西格雷夫斯 Hugh Seagraves 关于相关问题的文章 他 想要引用一个工作表上的列表对象 表格 而另一工作
  • 是什么导致我的 SSRS 图表中出现范围参数错误?

    为什么我的图表中出现此错误 图表图像 https i stack imgur com HDpnU png 我在图表中使用这个表达式 Series Sum Fields Mins Att Value Sum Fields Mins Poss
  • 使用 C# 在 Excel 中查找和替换文本

    我想使用 C 在 Excel 中查找并替换一组文本 而且我希望此替换仅发生在第一行中的文本 我已经使用Google并找到了一些付费资源 例如Aspose API Spire Xls等 但我正在寻找开源资源或任何其他有效的方法来实现这一目标
  • jQuery float bar 数字:数字定位

    我在用着jquery flot barnumbers js https github com joetsoi flot barnumbers 的插件jQuery 的 Javascript 绘图 图表 库 https github com f
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • 在 Python 中绘制 Excel 中的数据

    我必须从 Excel 文件中读取和绘制数据的代码是这样的 import pandas as pd import matplotlib pyplot as plt excel file file1 xlsx file1 pd read exc
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • Excel ISNUMBER 函数与 IF 语句

    我有一个正在使用的 Excel 文件 有一个列包含数字和文本 有时只是其中之一 我正在尝试编写一个函数来扫描单元格的最左侧部分以查看它是否以数字开头 我以为我拥有它 但显然没有 这就是我所拥有的 IF ISNUMBER LEFT E8 1
  • Excel Add In - console.log 在哪里输出它的消息 - NodeJS

    我正在尝试使用 JavaScript API 创建 Excel 插件 但我不明白 console log 在哪里输出它们的消息 所有 Microsoft 文档都包含 console log 示例 但没有解释 console log 输出消息
  • Excel,循环遍历 XLSM 文件并将行复制到另一个工作表

    我现在遇到的此代码的主要问题是处理我打开的 xlsm 文件的错误 我对这些文件的 VB 代码没有编辑权限 如果 vb 出错 有没有办法跳过文件 我有一个包含大约 99 个 xlsm 文件的文件夹 我希望循环遍历每个文件并复制每个工作簿中的第

随机推荐