2016-10-18 3 views
0

У меня есть этот код, и я продолжаю получать ошибки Property/method в одной строке. Смотри ниже. Я уверен, что это одна из последних проблем, о которых мне нужно позаботиться, прежде чем я перейду к полноценному запуску кода. Любая помощь очень ценится.Исправление ошибок свойств/методов

"объем CT" это имя Ошибка 438 ChartSheet

SC2 = ActiveWorkbook.Sheets("Volume CT").SeriesCollection.Count 


For i = 1 To SC2 'Run the loop for all the data series [volume] 
Debug.Print SC2 'make sure program counts correct amt of series 

Dim name As String 
    name = .FullSeriescollection(i).name 
    Debug.Print name 
End With 

     'Find series names and change color for solids & area RedZone1 
resultx = InStr(1, name, x, vbTextCompare) 
     'x is the variable name for the "codeWord" to look for 
Debug.Print resultx 
If resultx <> 0 Then 
With ThisWorkbook.Sheets("Volume CT").Chart.SeriesCollection(i).ChartArea.Format.Fill 

^^: Onject не поддерживает свойство или метод

.Visible = msoTrue 
    .ForeColor.RGB = Red 
    .Transparency = 0 
    .Solid 
End With 
End If 
+1

Имеет ли объект 'Sheets' объект' Chart'?В первой строке вы делаете «Таблицы» («Volume CT»). Series ... ', но в строке ошибок у вас есть' Sheets («Volume CT»). '* Chart *' .Series .. .' –

+1

@TylerStandishMan почти. Объект 'Sheets' представляет собой коллекцию, и ее элемент' Item' (свойство по умолчанию, неявно используемое здесь) возвращает 'Object', поэтому IntelliSense не существует. Но тип выполнения возвращаемого объекта - это «Диаграмма» в этом случае ... и действительно, объект «Chart» не имеет члена «Chart». –

+0

@ Mat'sMug, спасибо. Я не был рядом с компьютером и не занимался VBA в течение довольно долгого времени, но это казалось для меня, поскольку вы получили объект, о котором вы уже имеете в виду, точно так же, как вы выяснили. –

ответ

2

ThisWorkbook.Sheets("Volume CT")являетсяChart объект. А объект Chart не имеет члена .Chart.

Если вы посмотрите на Project Explorer, вы увидите все ваши рабочие листы (и листы диаграмм) под Microsoft Excel Objects вместе с ThisWorkbook.

Вместо того, чтобы получить доступ к ThisWorkbook.Sheets коллекции и работать допоздна переплет против некоторых Object возвращенных неявной Sheets.Item добытчика, который вы используете, когда вы делаете .Sheets("Volume CT"), используйте сам объект диаграммы - там уже глобальная ссылка он, готовый к использованию:

Microsoft Excel objects

Просто дайте ему значимое имя ...

Properties toolwindow

... и затем использовать его:

With WhateverTheChartNameIs.SeriesCollection(i).ChartArea.Format.Fill 

Теперь ваша команда имеет 7 точек (SeriesCollection(i) неявно SeriesCollection.Item(i)), и с поздним связыванием Object вызовов, что довольно много точек: если вы не уверены, какие типы задействованы и какие их члены, эта ошибка 438 обязательно произойдет.

Значит, у вас есть Chart2 сейчас, и вы хотите получить доступ к определенной серии; SeriesCollection.Item свойство возвращает Object, поэтому вместо того, чтобы точки и писать код, не зная, если свойство на самом деле существует, объявить переменную для серии:

Dim s As Series 
Set s = Chart2.SeriesCollection(i) 

И тогда вы можете сделать

With s.ChartArrea.Format.Fill 

Но ждать! A Series не имеет ChartArea собственности! Что мы пытаемся сделать точно? Отформатируйте диаграмму диаграммы диаграммы - почему даже беспокоиться с SeriesCollection?

With Chart2.ChartArea.Format.Fill 'notice you get IntelliSense all the way 
    .Visible = msoTrue 
    .ForeColor.RGB = Red 
    .Transparency = 0 
    .Solid 
End With 

Voilà!

+0

Так что это то, чего я не знал и не пробовал, спасибо. Теперь у меня есть: с томом CT.SeriesCollection (i) .ChartArea.Format.Fill –

+0

И код все еще не работает, он говорит, что ожидает окончания выражения или синтаксической ошибки –

+1

Вам нужно использовать ** имя ** * идентификатор * (свойство '(name)', как показано на скриншоте), а не «имя листа» - в юридическом идентификаторе пробелов нет. –

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