Предложения по формату кодов для установки координат диаграммы, заголовка и добавленного текста в макросе Excel - PullRequest
0 голосов
/ 03 октября 2019

Написал макрос для рисования линии с маркерами в Excel, он хорошо работает в одном файле макроса xlsm. Но когда я попытался преобразовать его в Excel-надстройку (файл xlam), он получил много ошибок. Все ошибки связаны с форматом координат X и Y, положением, типом шрифта и размером заголовка диаграммы, а также положением, типом шрифта и размером добавляемого текста. Не уверен, в чем причина, нужно знать правильный их формат. Любые отладочные предложения или помощь, очень ценятся. Пожалуйста, смотрите сообщение об ошибке и мои полные коды макросов, как показано ниже. Спасибо.

Сообщение об ошибке «Ошибка во время выполнения« -21474627161 (800004003) »: объект больше не действителен.

enter image description here enter image description here

После нажатия кнопки отладки код «.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...