如何使用 VBA 将 ShapeStyle 应用于 Excel 中图表的特定系列?

2024-02-08

如何使用 vba 以编程方式将 ShapeStyle 应用于单个图表系列中的一组点?看来我需要一个“形状”对象,其中仅包含我尝试格式化的系列中的点?

一些信息在这里:http://peltiertech.com/WordPress/programming-excel-2007-2010-autoshapes-with-vba/ http://peltiertech.com/WordPress/programming-excel-2007-2010-autoshapes-with-vba/在“设置边框和填充样式”部分下

我有伪代码,但我不知道如何创建仅包含我想要的项目的 Shapes 对象

' Applies desired shapestyle to a specific series of a chart

Sub ApplyShapeStyle(ch As Chart, sr As Series, ss As ShapeStyle)

    ' Somehow create a "Shapes" object that 
    ' contains all the points from the series as Shape objects

    Dim shps as Shapes
    'pseudocode
    shps.Add(<all points from series>)
    shps.ShapeStyle = ss

End Sub

就像我在评论中提到的(我可能是错的) 没有可用的形状属性DataLabel这会让你改变.ShapeStyle。然而,我设法使用复杂的例程实现了您想要的目标。

LOGIC

  1. 插入临时形状,例如工作表中的矩形
  2. 应用.ShapeStyle到这个形状
  3. 单独设置属性DataLabel like Fill, 边框颜色, 边框样式, Shadow等等与形状有关。
  4. 完成后,删除形状。

CODE

Sub Sample()
Dim myChart As ChartObject
Dim chrt As Chart
Dim shp As Shape
Dim sr As Series

Set myChart = ActiveSheet.ChartObjects("Chart 1")
Set chrt = myChart.Chart

'º·. Add a temporary Shape with desired ShapeStyle
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 100, 100, 100)
shp.ShapeStyle = msoShapeStylePreset42

Set sr = chrt.SeriesCollection(1)

'º·. Fill
Dim gs As GradientStop
Dim i As Integer

If shp.Fill.BackColor.ObjectThemeColor <> msoNotThemeColor Then
    sr.Format.Fill.BackColor.ObjectThemeColor = shp.Fill.BackColor.ObjectThemeColor
End If
If shp.Fill.ForeColor.ObjectThemeColor <> msoNotThemeColor Then
    sr.Format.Fill.ForeColor.ObjectThemeColor = shp.Fill.ForeColor.ObjectThemeColor
End If
Select Case shp.Fill.Type
    Case msoFillGradient
        ' Have to set the gradient first otherwise might not be able to set gradientangle
        sr.Fill.TwoColorGradient shp.Fill.GradientStyle, shp.Fill.GradientVariant
        sr.Format.Fill.GradientAngle = shp.Fill.GradientAngle

        'Removes pre-existing gradient stops as far as possible...
        Do While (sr.Format.Fill.GradientStops.Count > 2)
            sr.Format.Fill.GradientStops.Delete sr.Format.Fill.GradientStops.Count
        Loop

        For i = 1 To shp.Fill.GradientStops.Count
            Set gs = shp.Fill.GradientStops(i)

            If i < 3 Then
                sr.Format.Fill.GradientStops.Insert gs.Color, gs.Position, gs.Transparency, i
                ' ...and then removes last two stops that couldn't be removed earlier
                sr.Format.Fill.GradientStops.Delete 3
            Else
                sr.Format.Fill.GradientStops.Insert gs.Color, gs.Position, gs.Transparency, i
            End If
        Next i

    Case msoFillSolid
        sr.Format.Fill.Solid

    ' NYI
    Case msoFillBackground
    Case msoFillMixed
    Case msoFillPatterned
    Case msoFillPicture
    Case msoFillTextured
End Select

sr.Format.Fill.Transparency = shp.Fill.Transparency

'º·. Line
If shp.Line.Visible Then
    sr.Format.Line.ForeColor = shp.Line.ForeColor
    sr.Format.Line.BackColor = shp.Line.BackColor
    sr.Format.Line.DashStyle = shp.Line.DashStyle
    sr.Format.Line.InsetPen = shp.Line.InsetPen
    sr.Format.Line.Style = shp.Line.Style
    sr.Format.Line.Transparency = shp.Line.Transparency
    sr.Format.Line.Weight = shp.Line.Weight

    ' Some formatting e.g. arrowheads not supported
End If
sr.Format.Line.Visible = shp.Line.Visible

'º·. Glow
If shp.Glow.Radius > 0 Then
    sr.Format.Glow.Color = shp.Glow.Color
    sr.Format.Glow.Radius = shp.Glow.Radius
    sr.Format.Glow.Transparency = shp.Glow.Transparency
End If
sr.Format.Glow.Radius = shp.Glow.Radius

'º·. Shadows are a pain
' see http://stackoverflow.com/questions/10178990/turn-off-marker-shadow-on-vba-generated-excel-plots
If shp.Shadow.Visible Then
    sr.Format.Shadow.Blur = shp.Shadow.Blur
    sr.Format.Shadow.ForeColor = shp.Shadow.ForeColor
    sr.Format.Shadow.OffsetX = shp.Shadow.OffsetX
    sr.Format.Shadow.OffsetY = shp.Shadow.OffsetY
    sr.Format.Shadow.Size = shp.Shadow.Size
    sr.Format.Shadow.Style = shp.Shadow.Style
    sr.Format.Shadow.Transparency = shp.Shadow.Transparency
    sr.Format.Shadow.Visible = msoTrue
Else
    ' Note that this doesn't work as expected...
    sr.Format.Shadow.Visible = msoFalse
    ' ...but this kind-of does
    sr.Format.Shadow.Transparency = 1
End If

'º·. SoftEdge
sr.Format.SoftEdge.Radius = shp.SoftEdge.Radius
sr.Format.SoftEdge.Type = shp.SoftEdge.Type

'º·. 3d Effects
If shp.ThreeD.Visible Then
    sr.Format.ThreeD.BevelBottomDepth = shp.ThreeD.BevelBottomDepth
    sr.Format.ThreeD.BevelBottomInset = shp.ThreeD.BevelBottomInset
    sr.Format.ThreeD.BevelBottomType = shp.ThreeD.BevelBottomType
    sr.Format.ThreeD.BevelTopDepth = shp.ThreeD.BevelTopDepth
    sr.Format.ThreeD.BevelTopInset = shp.ThreeD.BevelTopInset
    sr.Format.ThreeD.BevelTopType = shp.ThreeD.BevelTopType
    sr.Format.ThreeD.ContourColor = shp.ThreeD.ContourColor
    sr.Format.ThreeD.ContourWidth = shp.ThreeD.ContourWidth
    sr.Format.ThreeD.Depth = shp.ThreeD.Depth
    sr.Format.ThreeD.ExtrusionColor = shp.ThreeD.ExtrusionColor
    sr.Format.ThreeD.ExtrusionColorType = shp.ThreeD.ExtrusionColorType
    sr.Format.ThreeD.FieldOfView = shp.ThreeD.FieldOfView
    sr.Format.ThreeD.LightAngle = shp.ThreeD.LightAngle
    sr.Format.ThreeD.Perspective = shp.ThreeD.Perspective
    sr.Format.ThreeD.ProjectText = shp.ThreeD.ProjectText
    sr.Format.ThreeD.RotationX = shp.ThreeD.RotationX
    sr.Format.ThreeD.RotationY = shp.ThreeD.RotationY
    sr.Format.ThreeD.RotationZ = shp.ThreeD.RotationZ
    sr.Format.ThreeD.Z = shp.ThreeD.Z
End If
sr.Format.ThreeD.Visible = shp.ThreeD.Visible

'º·. Cleanup
shp.Delete

End Sub

截屏

只需设置一些.Fill属性给了我这个msoShapeStylePreset38

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

如何使用 VBA 将 ShapeStyle 应用于 Excel 中图表的特定系列? 的相关文章

  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • Apache poi setformula 不适用于 SE

    我正在尝试在 XSSFCell With POI 中设置公式 Cell setFormula SE D87 0 D80 D87 错误是 名称 SE 在当前工作簿中完全未知 Why 看起来您正在尝试创建一个IF公式 我发现这一页 http w
  • 使用 pythoncom 在 Python 进程之间编组 COM 对象

    我希望有人可以帮助我从 Python 进行编组跨进程调用到 Excel 我有一个通过 Python 启动的 Excel 会话 我知道当需要从单独的 Python 进程访问它时 该会话将会启动并运行 我已经使用编组让一切按预期工作CoMars
  • 针对 iOS 10.3 进行编译,但模块“SwiftUICharts”的最低部署目标为 iOS 13.0

    知道如何仅在 iOS 版本超过 iOS 13 时导入 SwiftUICharts 框架吗 我通过 文件 gt Swift 包 gt 添加包依赖项 添加了此框架 我的应用程序目标必须是 iOS 10 我将此框架导入到 swiftui 控制器中
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 即使在轴上进行自动量程调整,我也可以保留积分刻度线吗?

    我 偷 了一些代码here http fxexperience com 2012 01 curve fitting and styling areachart 拥有一个AreaChart我在 FXML 中使用了 平滑线条 它的工作原理如下
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • 在组合框中显示可见工作表

    您好 我有以下代码来在组合框中显示工作表 创建工作表后 工作表会自动添加到列表中 我不希望隐藏的工作表在保管箱中可见 我怎么做 Option Explicit Private Sub ComboBox1 Change If ComboBox
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • Excels COUNTIFS 函数中的数组作为条件,混合 AND 和 OR [重复]

    这个问题在这里已经有答案了 我已经在谷歌上搜索了一段时间 但似乎无法让它发挥作用 我使用 Excel 2010 希望混合使用 AND 和 OR 运算符来计算行数 我想做的是这样的 COUNTIFS A A string1 B B strin
  • 如何在同一个html上绘制2个谷歌图表

    我正在尝试下面的代码 但它仅显示第一个代码的图表 你能告诉我哪里出错了吗 我尝试做很多改变 但仍然没有成功 i am only getting single chart as shown in below photo enter code
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • Apexcharts 项目栏上的最大宽度

    如何更改 Apexcharts 中项目栏的最大宽度 高度 https apexcharts com https apexcharts com 我有一个水平条形图 其数据是动态加载的 并且用户 项目 的数量各不相同 当用户很少或只有一个用户时
  • VBA在多个文件夹中搜索特定子文件夹并移动其中的所有文件

    你能帮助我吗 我想要一个宏vba来搜索SPECIFIC例如 所有存在并移动其文件的文件夹和子文件夹之间的子文件夹 Xfolder P Desktop Folder1 subfolder SUBFOLDER1 Xfolder 我正在使用 VB
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 使用宏打开受信任文档或启用宏时 Excel 崩溃

    正如标题所示 我无法使用宏打开受信任的文档 Excel 立即崩溃 制作文档的副本允许其打开 因为该副本不受信任 并且我可以检查 VB 编辑器中的宏 但启用宏会导致另一次崩溃 为什么会发生这种情况以及我可以采取什么措施来解决它 我今天遇到了类
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐

  • JS 传单:如何将 (Geo-)json ID 传递给单击事件?

    我的 django Web 应用程序应该执行以下操作 将 Geojson 对象传递到视图 使用传单映射点 并在用户单击点标记时显示一些附加信息 我对 js 不太熟悉 所以我陷入了将正确类型的数据绑定到click事件 这是一个示例 geojs
  • PHP 与 Pylons 的基准测试

    我想对 PHP 与 Pylons 进行基准测试 我希望两者的比较尽可能均匀 所以这就是我的想法 PHP 5 1 6 with APC 使用 smarty 模板连接到 MySQL 数据库 Python 2 6 1 使用带有 mako 模板的
  • 有没有办法在 GHCI 中查看模块中的函数列表?

    我发现在 Python 或 Common Lisp 中 您可以在运行时列出库的内容 这很方便 Haskell 是否有同样的东西 特别是在 GHCI 提示符下 GHCi 有一个 browse列出模块内容的命令 Prelude gt brows
  • 如何使用 %edit magic 打印我定义的对象的源代码

    Ipython 0 13 1 可以从 python 库打印对象的源 例如 os path abspath 但我无法打印我在 ipython 中通过 ed magic 定义的任何对象的源代码 我做错了什么吗 例如 我通过 ed 魔法定义一个类
  • 如何使用 UI 自动化(和/或 White)从外部应用程序获取控件的 DataContext

    我在用着White http white codeplex com 驱动 WPF 应用程序的 UI 到目前为止效果良好 然而 我现在需要深入研究被测应用程序的内部状态以检查某些条件 具体来说 我有一个 DataGrid 来自WPF工具包 h
  • TypeScript - 模块在运行时未定义

    我不明白我做错了什么 我在 VS2012 中创建了一个 TypeScript 项目 并在名为 Physics 的子目录中创建了一个名为 Vector ts 的文件 Module module Physics Class export cla
  • 如何在 SQL 表中查询数字 1 - 69 的所有可能的 5 个数字组合的逻辑有问题

    编辑 只是为了澄清一下 结果的顺序仅重要于 1 2 3 4 5 和 5 4 3 2 1 应该是相同的记录 所以我正在寻找不同的组合 我希望建立一个 SQL 数据库 其中包含数字 1 69 的所有可能的 5 个数字组合 其中相同的数字不能在单
  • 如何在android中对VideoView进行放大/缩小?

    我正在使用 VideoView 并从资源中运行视频 我想知道 有什么方法可以对正在运行的视频执行放大 缩小功能吗 好的 我遇到了这个问题 并通过删除 VideoView 并将其替换为纹理视图 http developer android c
  • 有没有 javascript LaTeX 方程渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个纯粹的客户端 JavaScript 库 它将乳胶方程呈现为 HTML CSS 我讨厌我看
  • 如何实现检测一个视图被拖动到另一个视图上?

    我想要一个可拖动视图 同时能够不断监视到 目标 视图的距离 并检测何时将可拖动视图拖动到目标视图上 我的想法是得到Rect s两种视图并使用intersect 检查它们是否接触 然而 我的实现工作并不顺利 有时它会检测到错误位置的重叠或未检
  • 将目录添加到 PyCharm 中的 Python 路径?

    我希望能够使用paraview simplePyCharm 中的库 我的电脑中已经安装了 paraview 该软件包无法安装pip据我所知 没有 whl 文件 网站docs https www paraview org ParaView D
  • PHP:使用 php 裁剪时出现黑色图像

    我设置了一个上传 jpeg 的脚本 然后将其裁剪为缩略图 但有些用户遇到黑色图像 老实说我不知道 他们上传的是什么 也许是压缩格式与 php 库不兼容的 jpeg 这是我的简单代码 当我尝试使用我的照片时一切正常 所以我无法理解为什么有些用
  • 如何在不同主机上向 eureka-server 注册 eureka-clients。弹簧启动

    我正在本地主机上运行我的尤里卡服务器 我能够在本地主机上注册所有其他正在运行的服务 并且一切都按预期进行 现在我想注册一个在Linux机器上运行的服务 我的属性看起来像这样 spring application name myService
  • Babel 6 更改了默认导出方式

    之前 babel 会添加以下行module exports exports default 它不再这样做了 这意味着在我能做之前 var foo require foo use foo 现在我必须这样做 var foo require fo
  • 在 Gremlin 中合并地图

    我正在尝试编写一个满足响应对象中两个要求的查询 必须包括all顶点的属性 无需在查询中指定各个字段 必须将结果展平到对象的同一水平上 作为单独的查询 我可以这样做 1 valueMap query g V 1 valueMap by unf
  • AVX __m256i 有符号 32 位元素的整数除法

    我试图在 AVX 机器上进行 SIMD 划分并收到编译错误 这是我的代码 m256i help int arr 8 int arr2 8 help mm256 load si256 m256i arr m256i temp temp mm2
  • 在javascript中将JSONArray转换为String以发送到java

    我正在使用一个使用phonegap 的Android 应用程序 java 调用一些显示网页的 HTML 而 HTML 使用 javascript 来实现功能 现在 在 javascript 中 我使用 HTML 中的参数进行 JSON 调用
  • servlet 应该执行多少个操作?

    我是 Web 开发新手 只是想知道 java servlet 的最佳实践 每个 servlet 是否应该只执行一个操作 即用于登录的 servlet 用于注册的 servlet 等 还是应该通过传递不同的参数来告诉 servlet 执行哪个
  • 通过 WinAPI 提取光标大小 (Windows 10)

    我需要提取光标图像以便在我的 swing 应用程序 Java 中使用它 首先 我发现类似的问题 https stackoverflow com questions 739870 extract cursor image in java 74
  • 如何使用 VBA 将 ShapeStyle 应用于 Excel 中图表的特定系列?

    如何使用 vba 以编程方式将 ShapeStyle 应用于单个图表系列中的一组点 看来我需要一个 形状 对象 其中仅包含我尝试格式化的系列中的点 一些信息在这里 http peltiertech com WordPress program