Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как сделать процедуру для любого изменения в xls / 10 сообщений из 10, страница 1 из 1
19.07.2007, 13:23
    #34670016
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Как сделать процедуру, которая бы работала при любых изменениях в файле xls? Конкретнее - для старых версий Excel при любых изменениях в сводных таблицах нужно вызвать процедуру, которая бы передёргивала формат диаграмм (загружала сохранённый).
...
Рейтинг: 0 / 0
19.07.2007, 13:43
    #34670131
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Не очень понятно Что значит передёргивала формат диаграмм?
Если просто обновить диаграммы, так они сами обновляются при изменениии исходных данных!
...
Рейтинг: 0 / 0
19.07.2007, 13:57
    #34670215
rimsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Меня тоже интересует аналогичный вопрос, если я например из 1С создаю новую строку на листе Excel как-то можно засечь это событие средствами VBA ну там процедуркой типа CommandButton1_Click()?
...
Рейтинг: 0 / 0
19.07.2007, 14:03
    #34670252
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
С форматом всё ок - я отформатировал диаграмму как надо, записал это в специальный тип, и теперь когда надо вызову

chrt.Chart.ApplyCustomType ChartType:=xlUserDefined, TypeName:="ыыыыыы"

А вот как событие сделать - не знаю.
...
Рейтинг: 0 / 0
19.07.2007, 14:07
    #34670277
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
кстати, Worksheet_Change не помогает - не ловит изменение сводной диаграммы, вставленной в лист.
...
Рейтинг: 0 / 0
19.07.2007, 14:42
    #34670471
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
detailкстати, Worksheet_Change не помогает - не ловит изменение сводной диаграммы, вставленной в лист.

Вообще я опять ничего не понял, т.к. вы не хотите нормаль всё описать, а ещё лучше пример.

но всё же:
Изменение сводной диаграммы у вас как происходит?
Может там же указать и требуемый тип.
...
Рейтинг: 0 / 0
19.07.2007, 19:57
    #34671607
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Хммм, ну как проще объяснить-то...

Есть просто файл, в котором сводная таблица и по ней построенная сводная диаграмма. Допустим, такая:

1) категории страниц - магазины
2) категории строк - дата (неделя)
3) категория столбцов - показатель. Показателей 3: выручка, себестоимость, рентабельность. Поле Рентабельность - вычисляемое в самой сводной таблице.

По этим трём показателям я сделал диаграмму. Естественно, на одной оси невозможно отложить обороты в рублях и % рентабельности. Назначаю вторую ось для рентабельности.

Такой отчёт ложится в папку с общим доступом и его может брать пользователь. Если он поменяет категорию страниц (выберет конкретный магазин) или строк (даты), то формат диаграммы получится стандартным, т.е. рентабельность по той же оси (тут была ссылка, где написано, что "слетает", но это сейчасне важно).

Я сохранил свой формат в типах диаграмм, как дополнительный. Его можно вызвать строкой из VBA, приведённой выше.

Мне собственно нужно чтобы, когда пользователь вращает данные в сводной таблице, как описано выше, вызывался мой скрипт, устанавливающий формат диаграммы.
...
Рейтинг: 0 / 0
19.07.2007, 23:11
    #34671808
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Изменения в сводной таблице отлично отлавливаются
Private Sub Worksheet_Change(ByVal Target As Range)
А если имеется ввиду изменение сводной диаграммы, то расположи исходную сводную для диаграммы на том же листе что и диаграмма и тоже всё будет ок. или если сводная табл для диаграммы на другом листе, то код поместите в модуль того же листа где исходная сводная, а не того где диаграмма!


А вообще я лично не очень люблю сводные диаграммы.
Предпочитаю обычные, а уже данные для них можно и из сводных потянуть
или прямиком из исходных данных
...
Рейтинг: 0 / 0
27.07.2007, 12:26
    #34688528
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Проблема: если сохранить формат диаграммы под своим типом, на другом компьютере этот тип не будет доступен. Можно ли сохранить тип в самом файле?
...
Рейтинг: 0 / 0
27.07.2007, 15:09
    #34689396
detail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать процедуру для любого изменения в xls
Короче, воркэраунд:
на самом деле, при обновлении сводной диаграммы слетает не всё форматирование, а только относящееся к рядам. Поэтому обход такой: сбрасываем форматирование, запускаем запись макроса, устанавливаем нужные форматы рядов данных (только их!). Из получившегося макроса берём нужный код. В макросе запишется установка всех свойств, но на самом деле нужно менять только то, что нужно менять (каламбур), остальное будет дефолтным.

Мой код (на листе - 7 диаграмм)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Sub workbook_open()

Call update_diagrams

End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)

Call update_diagrams

End Sub

Private Sub update_diagrams()

With Worksheets("Диаграммы - Продукт")

' значения 3-го показателя должны быть отложены по вспомогательной оси
.ChartObjects( 1 ).Chart.SeriesCollection( 3 ).AxisGroup =  2 

' на пирогЕ подписываем названия категорий и их доли
.ChartObjects( 3 ).Chart.SeriesCollection( 1 ).ApplyDataLabels AutoText:=True, LegendKey:= _
        False, HasLeaderLines:=True, ShowSeriesName:=False, ShowCategoryName:= _
        True, ShowValue:=False, ShowPercentage:=True, ShowBubbleSize:=False

End With

End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как сделать процедуру для любого изменения в xls / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]