1

Excelファイルにテキスト(レッツコールは「sasテキスト」)を書き込むsasコードがあり、VBAはExcelでグラフを作成し、タイトルに「sasテキスト」をコピーします。「sas テキスト」の長さが小さい場合はいつでも VBA は正常に動作しますが、「SAS テキスト」の長さが長い場合は常に、VBA は実行時エラー - 「VBA、オブジェクトのメソッド "テキスト" エラー」を返します。

私のコードは次のとおりです。

Sub FormatChart()
Let Title = Sheets("Sheet1").Cells(2, 1)
Let Title1 = Sheets("Sheet1").Cells(2, 2)
Let Title2 = Sheets("Sheet1").Cells(2, 3)
Let Title3 = Sheets("Sheet1").Cells(2, 4)
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection(1).Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).ReversePlotOrder = True
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartTitle.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartTitle.Text = Title & Title3 & Chr(10) & Title1 & "to " & Title2 & ": People with 25 or more visits" & Chr(10) & "Source: www.xxxxxxxxxxx.xxx.xxx"
    With ActiveChart.ChartTitle.Font
    .Name = "Arial"
    .FontStyle = "Bold"
    .Size = 8
    End With
    With ActiveChart.Axes(xlCategory).TickLabels.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 7
    End With
    With ActiveChart.Axes(xlValue).TickLabels.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 7
    End With
    With ActiveChart.PlotArea.Interior
    .ColorIndex = 2
    .PatternColorIndex = 1
    .Pattern = xlSolid
    End With
    Range("S4").Select
    ActiveWindow.SmallScroll Down:=48
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Legend.Select
    Selection.delete
    ActiveWindow.SmallScroll Down:=45
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.PlotArea.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveWindow.SmallScroll Down:=-45
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveWindow.SmallScroll Down:=-54
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Width = 500
    ActiveChart.ChartArea.Height = 1000
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    ActiveChart.Axes(xlValue).MinimumScale = 0
    ActiveChart.Axes(xlValue).MaximumScale = 100
    ActiveChart.Axes(xlValue).MajorUnit = 20
    ActiveChart.Axes(xlValue).MajorUnit = 10
        With ActiveChart.SeriesCollection(1)
        .Interior.Color = RGB(0, 51, 153)
    End With
        ActiveSheet.ChartObjects("Chart 1").Activate
        Dim c As Chart
Dim s As Series
Dim iPoint As Long
Dim nPoint As Long

Set c = ActiveChart
Set s = c.SeriesCollection(1)

nPoint = s.Points.Count
For iPoint = 1 To nPoint
    If s.XValues(iPoint) = "MINNESOTA STATE AVERAGE " Then
        s.Points(iPoint).Interior.Color = RGB(80, 116, 77)
    End If
        If s.XValues(iPoint) = "NATIONAL AVERAGE " Then
        s.Points(iPoint).Interior.Color = RGB(80, 116, 77)
    End If
Next iPoint

        ActiveSheet.ChartObjects("Chart 1").Activate
    Selection.Cut
    Sheets("Chart1").Select
    ActiveChart.Paste
End Sub

デバッグ時に、コードのこの行を強調表示します

"        ActiveChart.ChartTitle.Text = Title & Title3 & Chr(10) & Title1 & "to " & Title2 & ": People with 25 or more visits" & Chr(10) & "Source: www.xxxxxxxxxxx.xxx.xxx"
"

どうもありがとう!

4

2 に答える 2

4

ChartTitle.Text は 255 文字に制限されています。

x = 256 の場合、以下は失敗することが実験で確認されています。

Sub Macro2()
'
    Dim x as long
    With ActiveChart
        .HasTitle = True
        For x = 1 To 500
        .ChartTitle.Text = Characters(x)
        Next
    End With
End Sub
Function Characters(x As long)
dim charCount as long
For charCount = 1 To x
    Characters = Characters & "."
Next
End Function

私のアドバイスは、あなたのタイトルを切り捨てることですChartTitle.Text = Left("your built string",255)

于 2012-11-01T17:34:58.840 に答える
2

Excel のいくつかの項目は、(古いスタイルの) Pascal が最初のバイトの長さで文字列をカウントするため、255 文字に制限されています。

この問題を回避するには、a をスーパーインポーズTextBoxしてタイトルに入力します。対話時の制限時間は 255 文字のままですが、積み上げることはできます。

以下は機能しません。

Sub WillNotWork()
    Const LongString As String = _
         "Pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164..."
    Dim title As TextFrame

    Set title = ActiveSheet.Shapes("Text Box 1").TextFrame
    title.Characters.Text = LongString 'fails silently
End Sub

しかし、これは:

Sub Works()
    Const LongString As String = _
         "Pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164..."
    Dim title As TextFrame

    Set title = ActiveSheet.Shapes("Text Box 1").TextFrame
    title.Characters.Text = ""
    For i = 0 To Len(LongString) \ 255
        title.Characters(i * 255 + 1).Insert Mid$(LongString, 255 * i + 1, 255)
    Next
End Sub
于 2012-11-01T17:43:11.867 に答える