Код, который вы использовали повторно, представляет собой простую демонстрационную программу, которая позволяет управлять осями диаграммы при изменении одной из 6 определенных ячеек на листе. Однако эти изменения предназначены для внесения пользователем с клавиатуры. Внесение такого изменения запускает событие Worksheet_Change
и позволяет идентифицировать измененную ячейку. Код внутри процедуры обработки событий изменяет оси диаграммы, в соответствии с которыми была изменена конкретная ячейка рабочего листа.
Ваша проблема, как отметил в своем комментарии Дэвид Зименс, заключается в том, что если ячейка меняет значение из-за того, что оно пересчитывается по формуле, это изменение не вызывает событие Worksheet_Change
. (Конечно, вполне возможно, что внесенное вручную изменение в другом месте на листе вызовет как событие Worksheet_Change
, так и пересчет, в результате чего интересующая ячейка изменит свое значение с помощью формулы. Однако в этом случае аргумент Target
будет определить ячейку, которая была изменена вручную, а не пересчитанная по формуле.)
Выбросьте структуру Select ... Case
, которая действительно полезна только в контексте демонстрационной программы, которую вы пытаетесь использовать повторно. Вместо этого измените код так, чтобы он безоговорочно обновлял все 4 свойства вашей диаграммы непосредственно из ячеек G161
и F163
(поэтому используйте ws.Range("G161").Value
и ws.Range("F163").Value
вместо Target.Value
для назначения свойств диаграммы, где ws
представляет тот лист, на котором расположены эти ячейки, например ActiveSheet
или Worksheets("Sheet1")
или как там называется рабочий лист). Оберните назначение свойств диаграммы во вложенный элемент Workbook_SheetChange
, а не Worksheet_Change
, и ваша диаграмма будет обновляться при каждом пересчете книги.
Это не очень чистое решение, поскольку оно не определяет, действительно ли ячейки F163
и G161
изменяются при пересчете. Таким образом, существует риск того, что 4 свойствам без необходимости будут присвоены неизменные значения. Однако, если у вас нет очень большой книги и вы не выходите за пределы возможностей своего компьютера, это не имеет значения с практической точки зрения.
person
DMM
schedule
23.08.2017
case
оператора для данного значения. Не могли бы вы уточнить, что вы имеете в виду под словом «не работает», и более подробно рассказать о структуре вашего рабочего листа, в частности, являются ли литералы значений этих ячеек G161 и F163 или они содержат формулу (которая не запускаетWorksheet_Change
событие. - person David Zemens   schedule 23.08.2017