2016-06-14 5 views
0

У меня возникли проблемы с изменением размера изображений в VBA. Я перепробовал кучу методов и вот код, который я использую:Изменение размеров участков VBA

Sub Macro17() 
    ' 
    ' Macro17 Macro 
    ' 
    ' 
    Call Macro1 
    Call Macro2 
    End Sub 

    Sub Macro1() 
    Sheets("Data").Select 
    Range("A77:N79").Select 
    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.ChartType = xlLine 
    ActiveChart.SetSourceData Source:=Range("A58:N58,A77:N79") 


    With ActiveChart 
    'chart name 
    .SetElement (msoElementChartTitleAboveChart) 
    .ChartTitle.Text = " Plot 1" 
    'X axis name 
    '.Axes(xlCategory, xlPrimary).HasTitle = True 
    '.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X-Axis" 
    'y-axis name 
    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y - label" 
End With 
    ActiveChart.Parent.Cut 
    Sheets("Plots").Select 
    ActiveSheet.Paste Destination:=Worksheets("Plots").Range("B2:B5") 
    With ActiveChart.Parent 
    .Height = 369 
    .Width = 520 
    End With 

End Sub 

Sub Macro2() 
Sheets("Data").Select 
    Range("A83:N85").Select 
    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.ChartType = xlLine 
    ActiveChart.SetSourceData Source:=Range("A58:N58,A83:N85") 


    With ActiveChart 
    'chart name 
    .SetElement (msoElementChartTitleAboveChart) 
    .ChartTitle.Text = " Plot Two" 
    'X axis name 
    '.Axes(xlCategory, xlPrimary).HasTitle = True 
    '.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X-Axis" 
    'y-axis name 
    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y - label" 
End With 
    ActiveChart.Parent.Cut 
    Sheets("Plots").Select 
    ActiveSheet.Paste Destination:=Worksheets("Plots").Range("B30:B35") 
    With ActiveChart.Parent 
    .Height = 369 
    .Width = 520 
    End With 
    ActiveChart.Axes(xlCategory).TickLabelPosition = xlTickLabelPositionLow 

End Sub 

Поэтому я использую Macro17, назвать как Macro1 и Macro2, а затем построить соответствующие данные, мой вопрос заключается в том, что, когда я называю Macro17, только первый сюжет сделан больше. Когда я запускаю оба макроса с помощью отладчика, использующего F8 (в окнах), у меня нет проблем, а код работает как expeceted, но это чрезвычайно эффективно. Вероятно, это связано с тем, как используется ActiveChart.Parent. Спасибо за вашу помощь, это очень ценится.

+0

При быстром просмотре он может иметь какое-то отношение к использованию вами '.Select'. Я настоятельно рекомендую прочитать [как избежать использования '.Select'] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros), который может облегчить некоторые проблемы в VBA. – BruceWayne

ответ

0

Проблема возникает, когда вызываются ActiveChart, причина этого вопроса в том, что он не уверен, какая карта активна. Решение состоит в использовании ActiveChart.Parent.Name = "Test", а затем до ActiveChart вызывается снова, вы должны использовать: ActiveSheet.Shapes("Test").Select. Ключевым моментом здесь является то, что при использовании ActiveSheets.Shapes() дубликаты не будут обрабатываться хорошо.

+0

Как только вы создали диаграмму, вы сможете использовать 'ActiveSheet.ChartObjects()' для ссылки на таблицу вместо 'ActiveSheet.Shapes()' – JerryT

+0

@JerryT с использованием ChartObjects() не работает для меня, я не совсем понятно почему. –

+0

'С ActiveSheet.ChartObjects (" Test ") .Height = 369 . Ширина = 520 End With' – JerryT

Смежные вопросы