Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Графики Добавлено: 01.08.08 12:16  

Автор вопроса:  bear
Есть точечный график в Excel, там куча подписей, которые постоянно наезжают друг на друга. Эти графики приходится обновлять каждый день и ручками затем растаскивать надписи, чтобы выглядело все красиво. Кто какие способы может предложить решения этой проблемы? Понятно, что идеально эта задача не решается, но хотя бы как-нибудь упростить себе жизнь думаю, что можно

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 04.08.08 12:34
Пока могу предложить только такой вариант:
Sub SpillingValue()
  'удаление всех диаграмм на листе
  For Each ch In ActiveSheet.ChartObjects
    ch.Activate
    ActiveChart.ChartArea.Select
    ActiveWindow.Visible = False
    Selection.Delete
  Next ch
  
  'создание новой диаграммы
  Charts.Add
  ActiveChart.ChartType = xlXYScatter
  ActiveChart.SetSourceData Source:=Sheets("Sheet1";).Range("F7:P11";), PlotBy:=xlRows
  ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
  ActiveChart.ApplyDataLabels AutoText:=True, LegendKey:=False, _
                              HasLeaderLines:=False, ShowSeriesName:=False, _
                              ShowCategoryName:=True, ShowValue:=True, _
                              ShowPercentage:=False, ShowBubbleSize:=False
  
  'растаскивание надписей (Категория и значение) на 10 пунктов
  'одна вверх-влево на 10, другая вниз-вправо
  pr = 7
  For Each s In ActiveChart.SeriesCollection
    For Each p In s.Points
      p.DataLabel.Select
      p.DataLabel.Top = p.DataLabel.Top - pr
      p.DataLabel.Left = p.DataLabel.Left - pr
      pr = pr * -1
    Next p
  Next s
  
  ActiveWindow.Visible = False
  Range("J38";).Select
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #2 Добавлено: 04.08.08 12:35
На 7 пунктов :-)

Ответить

Номер ответа: 3
Автор ответа:
 bear



Вопросов: 1
Ответов: 1
 Профиль | | #3 Добавлено: 04.08.08 14:56
Спасибо. Но боюсь, что это не так просто, как вы написали. Проблема в том, что при таком подходе решения проблемы. Очень часто оказывается так, что близь лежащие надписи смещаются в одну сторону и поэтому такой способ практически не решает проблему, а иногда даже усложняет ее.
У меня есть кое-какие мысли как все это можно сделать, но есть небольшой вопрос: как найти сколько по высоте и в длину занимает надпись места на листе?

Ответить

Номер ответа: 4
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #4 Добавлено: 04.08.08 20:20
Если бы так просто все было. :-) Нет такого свойства для надписей. (По крайней мере я не нашла.) Только левая сторона и верх. Дальше идет шрифт и его размер. А они могут быть самые разные. Можно найти длину текста, но это в данном случае не поможет.

Ответить

Номер ответа: 5
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #5 Добавлено: 04.08.08 22:01
Свойств нет, но может методы есть?

Что-то типа

Picture1.TextWidth("Smith";)
Picture1.TextHeight("Smith";)

только естессно в надписи.

В крайнем случае можно и схитрить.

Ответить

Номер ответа: 6
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #6
Добавлено: 27.08.08 11:06
Не пожалуй никакого способа. Если подписи привязаны к точкам графика, то кроме как сделать график с таблицей внизу ничего не получится. Пересмотри дизайн графика, ты же не показал как он выглядит.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам