0

Excel ドキュメント全体で特定のテキストを検索して置換する関数を作成しました。を使用して、ドキュメント全体とそのすべてのセルを問題なく調べることができます

For Each WS In Worksheets
    For Each ActiveCell In WS.UsedRange
        If ActiveCell <> "" Then
            ActiveCell.Value = ReplaceWord(ActiveCell.Value, Search, Replacement)
        End If
     next
next

これは機能しますが、多くのドキュメントにはテキストボックスやその他の場所にタイトルが付いたチャートがあり、正確な名前などを知らずにそれらにアクセスする方法がわかりません。基本的に、Excelドキュメント内のすべての文字列を検索したいと思います私のReplaceWord関数を使用して単語を置き換えます。しかし、私は方法がわかりません:)

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

2

これは、テキストボックスを含む形状、シートに含まれるチャート、および独自のシート上のチャートを扱います。

Sub ReplaceTextInShapesAndCharts()
Dim ws As Excel.Worksheet
Dim chtObject As Excel.ChartObject
Dim chtChart As Excel.Chart
Dim shp As Excel.Shape

For Each ws In ThisWorkbook.Worksheets
    'textboxes and other shapes
    For Each shp In ws.Shapes
        'charts don't have TextFrames - handled separately
        If Not shp.Type = msoChart Then
            shp.TextFrame.Characters.Text = Replace(shp.TextFrame.Characters.Text, "great", "fantastic")
        End If
    Next shp
    'in-sheet charts
    For Each chtObject In ws.ChartObjects
        ChartTextReplace chtObject.Chart
    Next chtObject
    'charts on their own sheets
    For Each chtChart In ThisWorkbook.Charts
        ChartTextReplace chtChart
    Next chtChart
Next ws
End Sub

Sub ChartTextReplace(chtChart As Excel.Chart)
Dim shp As Excel.Shape

With chtChart
    'textboxes in chart
    For Each shp In .Shapes
        shp.TextFrame.Characters.Text = Replace(shp.TextFrame.Characters.Text, "great", "fantastic")
    Next shp
    'expand this section as needed
    .ChartTitle.Text = Replace(.ChartTitle.Text, "great", "fantastic")
End With
End Sub
于 2013-04-26T14:17:14.340 に答える
1

チャートのプロパティを反復処理する必要があるようです。cht変数が設定されたら、VBE のローカル ウィンドウを使用して、変数の他のプロパティを表示できます。これはオプションの完全なリストではありませんが、開始するには十分です。

Sub ReplaceTextInChart()

Dim cObj As ChartObject
Dim cht As Chart
Dim ax As Axis
Dim legEnt As LegendEntry
Dim srs As Series

Dim str As String 'this variable will use to hold the various text of the chart.'
Dim strSearch As String
Dim strReplace As String

strSearch = "s"  '<-- test that I used, modify as needed.'
strReplace = "##" '<-- test that I used, modify as needed.'

For Each cObj In ActiveSheet.ChartObjects

    Set cht = cObj.Chart
    With cht

        '## Check if the chart has a title, if so, do the replace.'
        If .HasTitle Then
            str = .ChartTitle.Characters.Text
            .ChartTitle = Replace(.ChartTitle, strSearch, strReplace)
        End If

        '## Check if the chart has a legend, if so, do the replace'
        If .HasLegend Then
            For Each legEnt In .Legend.LegendEntries
            str = legEnt.Format.TextFrame2.TextRange.Characters.Text
            legEnt.Format.TextFrame2.TextRange.Characters.Text = _
                Replace(str, strSearch, strReplace)
            Next

        End If


        For Each ax In .Axes
            '## Check if each Axis has a Title, if so, do the replace'
            If ax.HasTitle Then
                str = ax.AxisTitle.Characters.Text
                ax.AxisTitle.Characters.Text = Replace(str, strSearch, strReplace)

            End If

        Next

        '## For each series, do the replace in series.name'
        For Each srs In .SeriesCollection
            str = srs.Name
            srs.Name = Replace(str, strSearch, strReplace)

        Next

    End With
Next

End Sub
于 2013-04-26T14:08:50.540 に答える