#excel #vba
Вопрос:
Я записал макрос в Excel. Когда я пытаюсь запустить его на новом листе, я получаю сообщение об ошибке:
«Ошибка во время выполнения» -2147024809 (80070057)»: Указанное значение выходит за пределы диапазона»
Когда я нажимаю «отладка», он подсвечивается:
ActiveSheet.Shapes("Chart 1").TextFrame2.TextRange.Font.Size = 12
Я попытался заменить «Диаграмму 1» на ActiveChart
весь код, но это не сработало.
Rows("2:2").Select Selection.ClearContents Selection.Delete Shift:=xlUp Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B$496"), , xlYes).Name = _ "Table1" Range("Table1[#All]").Select Application.CutCopyMode = False Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Table1", Version:=7).CreatePivotTable TableDestination:="Sheet1!R3C1", _ TableName:="PivotTable10", DefaultVersion:=7 Sheets("Sheet1").Select Cells(3, 1).Select With ActiveSheet.PivotTables("PivotTable10").PivotFields("Program Area") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable10").AddDataField ActiveSheet.PivotTables( _ "PivotTable10").PivotFields("Payment Amount"), "Sum of Payment Amount", xlSum ActiveSheet.PivotTables("PivotTable10").PivotFields("Sum of Payment Amount"). _ Orientation = xlHidden ActiveSheet.PivotTables("PivotTable10").AddDataField ActiveSheet.PivotTables( _ "PivotTable10").PivotFields("Payment Amount"), "Sum of Payment Amount", xlSum Columns("B:B").Select Selection.NumberFormat = "$#,##0" Range("B7").Select ActiveSheet.Shapes.AddChart2(251, xlPie).Select ActiveChart.SetSourceData Source:=Range("Sheet1!$A$3:$B$8") ActiveChart.SetElement (msoElementDataLabelBestFit) ActiveChart.FullSeriesCollection(1).DataLabels.Select Selection.ShowPercentage = True Selection.ShowSeriesName = True Selection.ShowSeriesName = False Selection.ShowCategoryName = True Selection.Separator = " " Selection.Separator = "" amp; Chr(13) amp; "" ActiveChart.SetElement (msoElementLegendNone) ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = _ "Edmond J. Safra Philanthropic Foundation (Vaduz)" amp; Chr(13) amp; "Donations: DATE" amp; Chr(13) amp; "GRAND TOTAL" Selection.Format.TextFrame2.TextRange.Characters.Text = _ "Edmond J. Safra Philanthropic Foundation (Vaduz)" amp; Chr(13) amp; "Donations: DATE" amp; Chr(13) amp; "GRAND TOTAL" With Selection.Format.TextFrame2.TextRange.Characters(1, 49).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(1, 40).Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = " mn-cs" .NameFarEast = " mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = " mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With With Selection.Format.TextFrame2.TextRange.Characters(41, 9).Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = " mn-cs" .NameFarEast = " mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = " mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With With Selection.Format.TextFrame2.TextRange.Characters(50, 16).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(50, 16).Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = " mn-cs" .NameFarEast = " mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = " mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With With Selection.Format.TextFrame2.TextRange.Characters(66, 11).ParagraphFormat .TextDirection = msoTextDirectionLeftToRight .Alignment = msoAlignCenter End With With Selection.Format.TextFrame2.TextRange.Characters(66, 11).Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = " mn-cs" .NameFarEast = " mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = " mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With ActiveChart.ChartArea.Select ActiveSheet.Shapes("Chart 1").TextFrame2.TextRange.Font.Size = 12 With ActiveSheet.Shapes("Chart 1").TextFrame2.TextRange.Font .NameComplexScript = "Times New Roman" .NameFarEast = "Times New Roman" .Name = "Times New Roman" End With ActiveSheet.Shapes("Chart 1").TextFrame2.TextRange.Font.Bold = msoTrue With ActiveSheet.Shapes("Chart 1").TextFrame2.TextRange.Font.Fill .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorText1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 .Transparency = 0 .Solid End With ActiveChart.ChartTitle.Select ActiveChart.ChartArea.Select ActiveChart.Location Where:=xlLocationAsNewSheet Application.PrintCommunication = False With ActiveChart.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "" .LeftFooter = "" .CenterFooter = "" .RightFooter = "" .LeftMargin = Application.InchesToPoints(0.7) .RightMargin = Application.InchesToPoints(0.7) .TopMargin = Application.InchesToPoints(0.75) .BottomMargin = Application.InchesToPoints(0.75) .HeaderMargin = Application.InchesToPoints(0.3) .FooterMargin = Application.InchesToPoints(0.3) .ChartSize = xlScreenSize .CenterHorizontally = False .CenterVertically = False .Orientation = xlLandscape .Draft = False .OddAndEvenPagesHeaderFooter = False .DifferentFirstPageHeaderFooter = False .EvenPage.LeftHeader.Text = "" .EvenPage.CenterHeader.Text = "" .EvenPage.RightHeader.Text = "" .EvenPage.LeftFooter.Text = "" .EvenPage.CenterFooter.Text = "" .EvenPage.RightFooter.Text = "" .FirstPage.LeftHeader.Text = "" .FirstPage.CenterHeader.Text = "" .FirstPage.RightHeader.Text = "" .FirstPage.LeftFooter.Text = "" .FirstPage.CenterFooter.Text = "" .FirstPage.RightFooter.Text = "" .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .BlackAndWhite = False .Zoom = 100 End With Application.PrintCommunication = True ActiveChart.ChartArea.Select ActiveChart.FullSeriesCollection(1).DataLabels.Select ActiveChart.FullSeriesCollection(1).LeaderLines.Select ActiveChart.ChartArea.Select ActiveChart.FullSeriesCollection(1).DataLabels.Select ActiveChart.FullSeriesCollection(1).Points(4).DataLabel.Select Selection.Left = 136.5 Selection.Top = 34 ActiveChart.PlotArea.Select ActiveChart.FullSeriesCollection(1).DataLabels.Select ActiveChart.FullSeriesCollection(1).Points(4).DataLabel.Select Selection.Left = 112.591 Selection.Top = 54 ActiveChart.ChartArea.Select End Sub
Комментарии:
1. это означает, что
Chart 1
его нет на активном листе.Chart1
возможно, это было название диаграммы, когда она была записана, но теперь у нее другое название.2. Я попытался заменить его на «ActiveChart», но пока это не сработало. Есть ли способ сделать его переменной и выбрать любую диаграмму на листе?
3. @EF3328 вы можете заменить его индексом, но вы должны быть уверены, что индекс правильный, иначе вы получите ту же ошибку. если на вашем активном листе есть только одна фигура, которую вы можете использовать
ActiveSheet.Shapes(0).TextFrame2.TextRange.Font.Size = 12
, и вы можете сделать то же самое для следующей строки. вы можете выполнить цикл, используяfor
все фигуры, чтобы получить их индексы (или выполнить поиск по диаграмме).