在 Excel 宏中设置图表坐标、标题和添加文本的代码格式建议

2024-01-25

编写了一个宏,用 Excel 绘制带有标记的线,它在单个宏 xlsm 文件中运行良好。但是当我尝试将其转换为 Excel 插件(xlam 文件)时,它出现了很多错误。所有错误都与 X 和 Y 坐标的格式、图表标题的位置、字体类型和大小以及添加文本的位置、字体类型和大小有关。不确定是什么原因,需要知道它们的正确格式。任何调试建议或帮助,非常感谢。请参阅错误消息和我的完整宏代码,如下所示。谢谢。

错误消息是运行时错误'-21474627161 (800004003)':对象不再有效。

单击调试后,代码“.left=358”以黄色突出显示。

但是你用Excel检查过,绘图是在没有图表标题和添加文本(我想要的)的情况下绘制的,并且坐标的格式不是我试图设置的。同样,所有这些错误仅发生在 xlam 文件中,该宏与 xlms fie 配合良好。

Sub strain_plot()


    sh_rows = ActiveWorkbook.ActiveSheet.Range("B65535").End(xlUp).Row


    For i = 1 To sh_rows

        If ActiveSheet.Cells(i, 1).Value < 0.000001 Then

            ActiveSheet.Cells(i, 1).Value = 1000000000# * ActiveSheet.Cells(i, 1).Value

        End If
    Next i


    ii = sh_rows


    c_name = "chart1"

    On Error GoTo err:
    ActiveWorkbook.ActiveSheet.ChartObjects(c_name).Delete
    err:
    Set ch = ActiveWorkbook.ActiveSheet.ChartObjects.Add(330, 120, 480, 270)  'set graph position and size
    ch.Name = c_name



    With ch.Chart

    For iii = 1 To 2

    .SeriesCollection.NewSeries
    .SeriesCollection(iii).Values = Range(ActiveWorkbook.ActiveSheet.Cells(1, iii + 1), ActiveWorkbook.ActiveSheet.Cells(ii, iii + 1))
    .SeriesCollection(iii).XValues = Range(ActiveWorkbook.ActiveSheet.Cells(1, 1), ActiveWorkbook.ActiveSheet.Cells(ii, 1))


    .SeriesCollection(iii).ChartType = xlLineMarkers

    Next iii

    .SeriesCollection(1).Name = "[110]"
    .SeriesCollection(1).MarkerStyle = 2
    .SeriesCollection(1).MarkerSize = 12
    .SeriesCollection(1).MarkerForegroundColor = RGB(255, 0, 0)
    .SeriesCollection(1).MarkerBackgroundColor = RGB(255, 0, 0)
    .SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)



    .SeriesCollection(2).Name = "[001]"
    .SeriesCollection(2).MarkerStyle = 2
    .SeriesCollection(2).MarkerSize = 12
    .SeriesCollection(2).MarkerForegroundColor = RGB(96, 96, 96)
    .SeriesCollection(2).MarkerBackgroundColor = RGB(96, 96, 96)
    .SeriesCollection(2).Format.Fill.ForeColor.RGB = RGB(96, 96, 96)


       With .Legend

            .IncludeInLayout = False
            .Position = xlLegendPositionRight
            .AutoScaleFont = False
            .Font.Size = 14
            .Top = 25
            .Left = 392
            .Width = 72
            .Height = 40

        End With



    With .ChartArea.Fill

      .Visible = msoTrue
          .ForeColor.SchemeColor = 33

          .Solid

    End With


     With .SeriesCollection(1).Format.Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)  'red
            .Transparency = 0

    End With



     With .SeriesCollection(2).Format.Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(96, 96, 96) 'grey
            .Transparency = 0
    End With



    .HasTitle = True
        With .ChartTitle

        .Text = ActiveWorkbook.ActiveSheet.Cells(5, 8)
         .Left = 358
         .Top = 236

        With .Font

        .Name = "Tahoma"
        .Size = 10


        End With

    End With


      With .Axes(xlCategory)

        .HasTitle = True
        .AxisTitle.Text = "Position(nm)"  'X-axis title
        .TickLabels.Font.Size = 10 'X-axis coordinate number size
        .AxisTitle.Font.Size = 14  'X-axis title word font size
        .TickMarkSpacing = 3
        .TickLabelSpacing = 5
        .TickLabels.NumberFormatLocal = "#,##0._);[red](#,##0.)"
        .TickLabels.NumberFormatLocal = "#,##0_);[red](#,##0)"
        .TickLabels.NumberFormatLocal = "0_);[red](0.)"

    End With

      With .Axes(xlValue)

       .HasTitle = True
       .AxisTitle.Text = "Strain"   'Y-aixs title
       .AxisTitle.Font.Size = 14  'y-axis title word font size
       'Minimum value of Y axis
       .Axes(xlValue).MinimumScale = -0.005
       .Axes(xlValue).TickLabels.NumberFormatLocal = "0.0%"

       End With

    End With


      Dim thechartobj As ChartObject

    Set thechartobj = ActiveWorkbook.ActiveSheet.ChartObjects(ch.Name)

    Dim thechart As Chart

    Set thechart = thechartobj.Chart

    Dim thetextbox As Shape

    Set thetextbox = thechart.Shapes.AddTextbox(msoTextOrientationHorizontal, 688, 372, 122, 20)
    With thetextbox.TextFrame.Characters

    .Text = ActiveSheet.Cells(6, 8)

    With .Font

      .Name = "tahoma"
      .Size = 10
      .Bold = msoTrue

      End With

     End With


    End Sub

None

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

在 Excel 宏中设置图表坐标、标题和添加文本的代码格式建议 的相关文章

  • 当存储在集合中时,如何更改类属性的值

    我想将一个类存储在集合中 并且能够更改该类的属性 而不必删除集合项并再次将其添加回来 我的研究表明 如果不进行删除 替换操作 则无法更改项目本身 但是项目的属性又如何呢 下面的代码展示了如何执行此操作 当您运行宏时 调试窗口将显示存储对象的
  • 如何从 Outlook 的“收件人”字段中提取电子邮件地址?

    我在某种程度上一直在使用 VBA 使用以下代码 Sub ExtractEmail Dim OlApp As Outlook Application Dim Mailobject As Object Dim Email As String D
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • 消除多个 Elseif 语句

    我试图保持我的代码干净 特别是在用户表单中使用组合框 可能会有很多 if Elseif 语句 应该有一种更简单的方法 让一个组合框不再需要多页代码 是吗 现在如何完成的示例 Sub Example Dim Variable as Strin
  • 如何获取数据透视表的 ListObject 对象?

    这个问题最初是作为answer https stackoverflow com a 21321664 2712565作者 休 西格雷夫斯 Hugh Seagraves 关于相关问题的文章 他 想要引用一个工作表上的列表对象 表格 而另一工作
  • VBA 中的求和函数

    我在 vba 中对单元格求和时遇到问题 我需要使用单元格 a b Range A1 function SUM Range Cells 2 1 Cells 3 2 但它不起作用 函数不是范围内的属性 方法 如果您想对值求和 请使用以下命令 R
  • 使用 C# 在 Excel 中查找和替换文本

    我想使用 C 在 Excel 中查找并替换一组文本 而且我希望此替换仅发生在第一行中的文本 我已经使用Google并找到了一些付费资源 例如Aspose API Spire Xls等 但我正在寻找开源资源或任何其他有效的方法来实现这一目标
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • 使用 FileSystemObject 读取和写入 csv 文件

    是否可以使用 VBA 中的 FileSystemObject 读取和写入 csv 文件 必然是 基本语法如 Set objFSO CreateObject scripting filesystemobject create a csv fi
  • excel使用单元格引用作为逻辑运算符并查找值

    我有一个表来查找这样的值 logical test points lt 0 1 lt 10 2 lt 20 4 gt 20 5 如果我的单元格 例如 A1 如果我的单元格 如果我的单元格 gt 20 则结果为 5 我可以为此使用多个 if
  • 通过 Excel VBA 保存并关闭 powerpoint

    下面的代码根据定义的名称创建多个图表 然后打开具有这些定义的名称的 powerpoint 文件并转储到图表中 除了最后一部分之外 一切都正常 保存并关闭文件 我已将尝试保存和关闭文件的尝试标记为绿色 任何帮助表示赞赏 Sub Slide19
  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明
  • 如何锁定特定单元格但允许过滤和排序

    我使用以下代码来锁定某些单元格的内容 Sub LockCell ws As Worksheet strCellRng As String With ws Unprotect Cells Locked False Range strCellR
  • 自动计算Excel VBA UDF与单元格属性相关

    我编写了一个 UDF 来计算特定颜色和特定线条样式的单元格 我发布了整个函数 Function CountTime rData As Range cellRefColor As Range As Variant Dim indRefColo
  • 如何确保我的 IE 选项卡名称正确?

    我使用此代码从 Word VBA 获取 Internet Explorer 的实例 并从网页中抓取一些值 我循环遍历 4 个项目 以防万一 有时我不小心抓住了一个名为 Windows Explorer 的东西 我不知道那是什么 来抓住 In
  • 检查工作表是否存在,如果不存在则创建-VBA [重复]

    这个问题在这里已经有答案了 我已经测试了许多代码 这些代码检查工作表是否存在 基于名称 如果不存在则创建一个 其中一些循环所有工作表 一些引用工作表 如果创建错误则意味着该工作表不存在 哪一种是最合适的 正统的 更快的方式来完成这个任务 目
  • 根据关键列合并多个 Excel 工作簿

    我从不同的客户那里收到七个工作簿 xlsx 文件 每个工作簿都有一张工作表 每张工作表至少有一个公共 ID 列 UNIQ PK 其中一本工作簿包含所有可能的 id 列表 其他人可能没有所有 id 的记录 但每一行都定义了 id 值 我需要制
  • openpyxl 2.4.2:保存后公式生成的单元格值为空

    我使用 openpyxl 打开文件 编辑一些单元格并保存更改 这是一个例子 import openpyxl book openpyxl load workbook sheet path sheet book active for row i
  • 具有日期和名称标准的 SUMIFS...仅限月份和年份

    我正在尝试获取 SUMIFS 公式来检查日期列 并仅对与标准日期的匹配年份和月份相对应的值求和 我还希望此 SUMIFS 包含名称标准和日期 IE 单元格 A1 SUMIFS Sheet1 O O Sheet1 D D Sheet2 DAT

随机推荐