2017-02-15 368 views
0

我有一個VBA代碼(如下),它將x軸的最小值和最大值設置爲指定的單元格(B4和B15)。但是,我的工作簿中有很多圖,並且都需要不同的最小和最大x軸範圍。我想要一個VBA代碼進入繪製的x軸範圍,然後找到該範圍內的最小值和最大值,並將軸設置爲這些值。我如何改變下面的代碼來做到這一點?謝謝。Excel VBA代碼將x軸設置爲繪製範圍內的最小值和最大值

Sub Resize_Fonts() 
Dim Sht As Worksheet 
Dim Cht As ChartObject 

For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     Cht.Chart.ChartArea.Font.Size = 9 
     Cht.Chart.ChartArea.Font.Name = "Cambria" 
     Cht.Chart.ChartArea.Border.LineStyle = xlNone 
     Cht.Chart.Axes(xlValue).MinimumScale = 0 
     Cht.Chart.Axes(xlCategory).MinimumScale = Range("B4").Value 
     Cht.Chart.Axes(xlCategory).MaximumScale = Range("B15").Value 


    Next Cht 
Next Sht 

End Sub 

回答

0

你可以添加一個dim count as long,把你的最大/最小值在相鄰列。然後在您的For each循環中增加您的count,並使用Cells([row], [n+] count).value來獲取單元格值。 順便說一句,你可以使用:使用WorksheetFunction.Min此

With cht.Chart 
    [...] 
End with 
0

嘗試。

Cht.Chart.Axes(xlCategory).MinimumScale = WorksheetFunction.Min(Columns(2)) 
    Cht.Chart.Axes(xlCategory).MaximumScale = WorksheetFunction.Max(Columns(2)) 

這假定x軸的值是在列2中

+0

如果我想通過表格中的每個圖表查看,以便我做第2欄,然後是第2 + 9列等,那麼該怎麼辦?我想對每張表中的所有圖表進行相同的操作。 – Kate

+0

可以使用With語句設置這些設置,其中使用了Sht.Cht.Chart。這應該允許,通過For Each部分時,它適用於所有循環。 – Cyril

+0

關於附加列,您應該可以使用範圍,如.Min(Range(Columns(2),Columns(9)))。 – Cyril

0

如果最小和最大總是範圍內B14:B15Sht可以使用:

Cht.Chart.Axes(xlCategory).MinimumScale = worksheetfunction.Min(Sht.Range("B4:B15")) 
Cht.Chart.Axes(xlCategory).MaximumScale = worksheetfunction.Max(Sht.Range("B4:B15")) 
+0

如果我想要x軸的範圍不是全部位於列B中,而是以一種模式分隔開來,該怎麼辦?例如,在一張紙上,我有B列,K,P,U,Z,AE,AJ,AT等x軸值,所以列B + 9.我想要一個循環通過一張紙,然後在下一張紙上重新開始。然後下一張表是相同的模式。我如何編寫該循環? – Kate

0

嘗試使用With Cht.Chart聲明,它會縮短並清除您的編碼風格。

當尋找B列MinMax值,你需要確保你完全限定Range,加入Sht.Range

代碼

Sub Resize_Fonts() 

Dim Sht As Worksheet 
Dim Cht As ChartObject 

For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     With Cht.Chart 
      .ChartArea.Font.SIZE = 9 
      .ChartArea.Font.Name = "Cambria" 
      .cartArea.Border.LineStyle = xlNone 
      .Axes(xlValue).MinimumScale = 0 
      .Axes(xlCategory).MinimumScale = WorksheetFunction.Min(Sht.Range("B1:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)) 
      .Axes(xlCategory).MaximumScale = WorksheetFunction.Max(Sht.Range("B1:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)) 
     End With 
    Next Cht 
Next Sht 

End Sub 
0

閱讀您的意見,因爲我第一次與我的其他未註冊帳戶後說,你可以用這個方法:

Sub Resize_Fonts() 
Dim Sht As Worksheet 
Dim Cht As ChartObject 
Dim count as Long 

count = 2 ' For column B 
For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     With Cht.Chart 
      .ChartArea.Font.Size = 9 
      .ChartArea.Font.Name = "Cambria" 
      .ChartArea.Border.LineStyle = xlNone 
      .Axes(xlValue).MinimumScale = 0 
      .Axes(xlCategory).MinimumScale = Sht.Cells(4, count).Value 
      .Axes(xlCategory).MaximumScale = Sht.Cells(15, count).Value 
     End with 
     count = count + n ' with n your "pattern" 
    Next Cht 
    count = 2 ' reset the count when changing sheet 
Next Sht 

End Sub 

這個假設值總是排4第15行。

評論如果您有任何其他疑問

+0

這看起來正是我想要的。然而,當我運行這個,我得到一個類型不匹配錯誤發生在行.Axes(xlCategory).MinimumScale = Sht.Cells(4,count)。值 – Kate

+0

你能給我一個你使用的值的例子嗎? B4和B15。是第一張圖,第二張還是更多?第一張,第二張或更多? – JiheL

+0

因此,我將count定義爲long,然後count = 5.我將列移動到我想要抓取的每個列爲5的倍數以使其更容易。那麼我在代碼中有這些行:.Axes(xlCategory).MinimumScale = Sht。細胞(4,計數).value的 .Axes(xlCategory).MaximumScale = Sht.Cells(23計數).value的 – Kate