2016-10-18 8 views
0

私はこのコードを持っており、同じ行にプロパティ/メソッドのエラーが発生しています。下記参照。私は完全にコードを実行する前に、これが私が世話をする必要がある最後の問題の1つです。すべての助けは大いに感謝しています。プロパティ/メソッドのエラーを修正する

"ボリュームCTは" 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 

^^エラー438の名前である:Onjectは

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

'Sheets'オブジェクトに' Chart'オブジェクトがありますか?最初の行ではSheets( "Volume CT")Series ...を実行していますが、エラー行にはSheets( "Volume CT")があります。 。 " –

+1

@TylerStandishManほぼ。 'Sheets'オブジェクトはコレクションであり、' Item'ゲッター(ここで暗黙的に使われているデフォルトのプロパティ)は 'Object'を返します。そのため、それを超えるIntelliSenseはありません。しかし、返されるオブジェクトの実行時の型は、この場合は 'Chart'です。実際、' Chart'オブジェクトには 'Chart'メンバがありません。 –

+0

@ Mat'sMug、ありがとう。私はコンピュータの近くではなく、かなりの時間でVBAを扱っていませんでしたが、明らかにあなたが明らかにしたように、あなたがすでに参照しているオブジェクトを取得するので、それは私には見えませんでした。 –

答えて

2

ThisWorkbook.Sheets("Volume CT")Chartオブジェクトであるプロパティまたはメソッドをサポートしていません。 Chartオブジェクトには.Chartのメンバーがありません。

あなたはプロジェクトエクスプローラを見れば、あなたはThisWorkbookとともに、Microsoft Excelのオブジェクトの下のすべてのワークシート(およびグラフシート)を参照してくださいよ。

代わりのThisWorkbook.Sheetsコレクションにアクセスし、あなたが.Sheets("Volume CT")を行うときに使用している暗黙のSheets.Itemゲッターによって返されたいくつかのObjectに対して遅延バインディング作業、チャートオブジェクト自体を使用する - そこすでには、グローバル参照ですそれ、使用する準備ができて:

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 

を行うことができますちょっと待って! 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

これは私が知らなかったし、試していなかったものです、ありがとう。今私は持っている:Volume CT.SeriesCollection(i).ChartArea.Format.Fill –

+0

コードがまだ動作していない、それは表現や構文エラーの終了を期待していると言う –

+1

あなたは**名前**を使用する必要があります* identifier *(スクリーンショットに示されているように '(name)'プロパティ)、 "シート名"ではなく、正当な識別子にスペースはありません。 –