2013-06-13 43 views
2

我有一個關於excel曲線的圖表。曲線表示股票的價格取決於時間(所以基本上我有一列A充滿日期,B列充滿價格和圖表)。在同一個數據標籤VBA中的兩種不同顏色

現在對於圖表中的每個點有一個datalabel文本作爲隨後

Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown 

「numpoint」是從點1進行到最後一個的變量。 「numcomptagesetup」和「numcomptagecountdown」是值即變爲從1至6「numcomptagesetup」和從1到15,用於「numcomptagecountdown」。

上面的代碼編寫「numcomptagesetup」,然後跳兩行,然後寫「numcomptagecountdown」

我需要的是,根據2個信號,改變「numcomptagesetup」的顏色爲綠色或紅色,顏色綠色和紅色的「numcomptagecountdown」也是如此。所以在某些情況下,我需要在同一個datalabeltext中有兩種不同的顏色。

我寫這個循環和它的作品至少在開始時(如步驟方法步驟),那麼一切變化和顏色是不是在好的地方(紅色,而不是綠色或相反)...真的奇怪 默認情況下,所有的點是綠色的,然後我點顏色變爲紅色時,我想:

For numpoint=1 to 100 
With Charts("CHART").SeriesCollection(1).Points(Numpoint) 
      .HasDataLabel = True 
      .DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown 
      .DataLabel.Font.Size = 6 
      .DataLabel.Font.Color = vbRed 
      .MarkerSize = 5 
End With 
If Signal = 2 Then Charts("CHART").SeriesCollection(1).DataLabels.Select 
    With Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Format.TextFrame2.TextRange.Characters(1, 3).Font.Fill 
    .Visible = msoTrue 
    .ForeColor 
    .RGB = RGB(0, 176, 80) .Solid 
    End With 
End If 

If Signal2 = 2 Then 
    Charts("CHART").SeriesCollection(1).DataLabels.Select 
    With Charts("CHART").SeriesCollection(1).Points(Numpoint).DataLabel.Format.TextFrame2.TextRange.Characters(4, 1).Font.Fill 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(0, 176, 80) 
     .Solid 
    End With 
End If 

我希望你明白我的問題!如果沒有,你可以問,我會回答儘快我可以

謝謝!!

+0

對於初學者來說,這不是一個循環(或者你需要提供更多的代碼的):)另外,請注意'ForeColor.RGB'你在這兩種情況對指定'信號2 = 2'和' Signal = 2'是一樣的。 –

+0

我已經編輯過代碼:with/end with是通過defaut(對於上邊和下邊的部分)獲取可見的文本,然後兩個條件將文本標籤的上邊部分或下邊部分或兩者 – user2460449

+0

當我嘗試運行模擬代碼時,發生在我身上的是所有數據點都得到相同的格式,即使我明確地循環遍歷系列中的每個數據標籤......我會多看一看,看看我能找出。 –

回答

2

我被這個難住了。即使宏錄製使我類似的代碼你的,但是當我運行它,顏色在Series.DataLabels應用於所有 datalabels。

我有一個可能的解決方法,這將是對文本框的形狀添加到圖表,並且將它們直接定位在數據標籤的頂部。然後,刪除最後的數據標籤。

'## This is from your original code: 
For numpoint=1 to 100 
    With Charts("CHART").SeriesCollection(1).Points(Numpoint) 
     .HasDataLabel = True 
     .DataLabel.Text = numcomptagesetup & vbCrLf & numcomptagecountdown 
     .DataLabel.Font.Size = 6 
     .DataLabel.Font.Color = vbRed 
     .MarkerSize = 5 
    End With 
Next 

'## Now, I make some changes: 
Dim srs As Series 
Dim dl As DataLabel 
Dim dlText As String 

Set srs = Charts("CHART").SeriesCollection(1) '## I find it easier to work with objects, so I use variable "srs" 

'## Delete any textboxes that might be leftover from previous. 
For Each shp In cht.Shapes 
    shp.Delete 
Next 

For Each dl In srs.DataLabels '## object-oriented programming, use a DataLabel object variable : 
    dlText = dl.Caption 
    '## Add a textbox to overlay the datalabel 
    Set tb = cht.Shapes.AddTextbox(msoTextOrientationHorizontal, dl.Left, dl.Top, dl.Width, dl.Height) 
    With tb.TextFrame2 
     .VerticalAnchor = msoAnchorMiddle 
     .WordWrap = msoFalse 
     .AutoSize = msoAutoSizeShapeToFitText 
     With .TextRange 
      .Text = dlText 
      .Font.Size = dl.Format.TextFrame2.TextRange.Font.Size 
      '## Apply character color format to the textbox: 
      If Signal = 2 Then 
       With .Characters(, 3).Font.Fill 
        .Visible = msoTrue 
        .ForeColor.RGB = RGB(0, 176, 80) 
        .Solid 
       End With 
      End If 
      '## Apply character color format to the textbox: 
      If Signal2 = 2 Then 
       With .Characters(4, 1).Font.Fill 
        .Visible = msoTrue 
        .ForeColor.RGB = RGB(0, 176, 80) 
        .Solid 
       End With 
      End If 
     End With 
    End With 
Next 

'## Finally, turn off the datalabels that you don't need anymore. 
srs.HasDataLabels = False 
+0

首先感謝您的幫助!其次,我正在翻譯這在我的分(因爲信號是不同的每個點,所以我必須刪除「爲每個」),然後我會給你一些消息:) – user2460449

+0

通過cht你意思圖表(「圖「) 對? – user2460449

+0

它的工作很棒!非常感謝 !!我只是有一個小問題,以每個點上的文本框爲中心:我使用 For i = 1 To 90 ActiveChart.Shapes.Range(Array(「TextBox」&i))。Select Selection.ShapeRange.IncrementLeft -4.2 Next 但是「-4.2」每次都不起作用。我認爲沒有代碼是這樣的文本框不鏈接到一個點: 圖表(「CHART」)。SeriesCollection(1).DataLabels.Position = xlLabelPositionCenter 如果您有任何想法,我會很高興到這裏吧。 其他謝謝! – user2460449

0

我已經想出別的東西:

With ChartObj.Chart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Characters.Font.fill          
     .TwoColorGradient msoGradientDiagonalUp, 1 
     .GradientAngle = 45 
     .GradientStops(1).Position = 0 '.2 
     .GradientStops(2).Position = 1 '0.8 
     .ForeColor.RGB = RGB(0, 0, 0) 
     .BackColor.RGB = RGB(255, 255, 255) 
End With 

至極讓我爲datalabels漸變色。

相關問題