2015-03-30 2 views
0

я в состоянии контролировать вес графа в Excel VBA используя следующий код:Использование MS Word VBA для увеличения веса осей в графике, внедренных в документ Word,

ActiveChart.Axes(xlCategory).Select 
With Selection.Border 
    .ColorIndex = 57 
    .Weight = xlMedium 
    .LineStyle = xlContinuous 
End With 

При попытке запуска это в Word, VBA, я получаю ошибку

ошибку компиляции: Метод или член данных не найден.

.Border подсвечивается.

Я экспериментировал с кодом

salesChart.Axes(xlCategory).Select 
Selection.Borders(wdBorderBottom).Visible = True 

и получил сообщение

Ошибка выполнения «4605» Этот метод или свойство не доступен, так как объект относится к графическому объекту.

Я хочу, чтобы выяснить способ выделения осей на графике я внедренная в документе MS Word с помощью Word, VBA

+1

Каково происхождение этой диаграммы? Если это из экземпляра copy/paste-special (расширенный метафайл), вы не сможете получить доступ к тем же свойствам/etc. которые доступны для полномасштабной диаграммы MS Excel. –

+0

Благодаря, @DavidZemens Это встроенный граф генерируется в Word: Тусклого salesChart Как Диаграмма Тусклое chartWorkSheet как объект Набор salesChart = ActiveDocument.Shapes.AddChart.Chart Набор chartWorkSheet = salesChart.ChartData.Workbook.WorkSheets (1) Возможно, вы столкнулись с проблемой, и в этом случае мне придется вернуться к открытию Excel из Word и с помощью кода VBA, который здесь размещается, что, конечно же, работает как шарм. Однако это позор. Открытие и закрытие Excel - это гораздо больше времени, а также как-то неэлегантное. – khargushoghli

ответ

0

Я вижу несколько вещей теперь, когда я смотрю на это более подробно. Первый фрагмент Excel код, это не работает и не может работать в Word, и на самом деле он поднимает компиляцию ошибки.

When I try running this in Word VBA, I get the error

ActiveChart.Axes(xlCategory).Select 
With Selection.Border 
    .ColorIndex = 57 
    .Weight = xlMedium 
    .LineStyle = xlContinuous 
End With 

Компилятор выделяет .Border, потому что нет Border свойства Selection объекта в Word.

Объект Selection является немного неоднозначным, because it can be different things. Подумайте об этом как о варианте, который относится к тому, что выбрано, или к точке курсора, если ничего не выбрано.

Так что это объясняет method or data member not found, который не является ошибкой во время выполнения, но ошибка компиляции, предполагающая, что ваш код не может выполнить как есть.

Если заменить Select и Selection с самим объектом, например, так:

With ActiveChart.Axes(xlCategory).Border 
    .ColorIndex = 57 
    .Weight = xlMedium 
    .LineStyle = xlContinuous 
End With 

Вы получите другую ошибку, потому что нет такого понятия, как ActiveChart в Word, то есть только объект Excel. (Использование Option Explicit предупредило бы вас об этой проблеме). Словом, вам нужно обратиться к форме или диаграмме, и вы можете сделать это с помощью дескриптора формы, как вы это сделали, с переменной.Попробуйте:

With salesChart.Axes(xlCategory).Border 
    .ColorIndex = 57 
    .Weight = xlMedium 
    .LineStyle = xlContinuous 
End With 

Это может быть полезно:

How to avoid using Select in Excel VBA macros

Хотя написана для Excel конкретно, это лучше программирование концепция: Select является довольно грубым способом делать большинство вещей, и хотя некоторые исключения, почти все, что вы можете сделать с VBA, можно сделать более эффективно, непосредственно работая с объектом, а не сначала , выбрав, а затем действуя на выбор - это redundan т. Это также беспорядочно, потому что вам нужно постоянно держать , выбрав, и ваш код обязательно двусмыслен, ссылаясь на неопределенный Selection объект (вариант), а не сильно набранный объект и т. Д.

+0

Булл глаз! Спасибо за ответ ... и за урок. – khargushoghli

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