![](/img/trans.png)
[英]In Excel, I want to iterate through two drop down lists to run all possible combinations using VBA
[英]Iterate through all text (in cells, charts, textboxes) in Excel using vba
我構建了一個函數來搜索和替換整個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函數來替換單詞。 但我迷失了怎么樣:)
任何幫助將非常感激。 謝謝!
看起來您將不得不迭代圖表的屬性。 您可以使用VBE中的locals窗口查看cht
變量的其他屬性。 這不是一個詳盡的選項列表,但它應該足以讓你開始!
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
這涉及形狀,包括文本框,工作表中包含的圖表,以及自己工作表上的圖表:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.