Board logo

標題: [發問] 如何將產生的圖表存放在指定工作表的位置上呢? [打印本頁]

作者: dechiuan999    時間: 2012-2-28 15:00     標題: 如何將產生的圖表存放在指定工作表的位置上呢?

各位大大好:

   小弟好久沒有上來向各
位大大請安。還請各位大大見諒。
現小弟有一問題想請各位
大大相助。問題如下:

   小弟想修改下列語法,
當按下SHEET1工作表上的按鈕時,
將產生的圖表存放在指定位置。
例如H1:L12的位置

請問如何修改呢?
Private Sub CommandButton1_Click()
   
    Dim mRng As Range
    Dim mRng1 As Range
    Dim mRng2 As Range
    Dim mRng3 As Range
    Dim mTotal%
    Dim oldMonth
    Dim mSht As Worksheet
    Dim mRow As Integer
   
   
    Set mSht = Worksheets(1)
    With mSht
        mRow = .Range("a1").End(xlDown).Row
        Set mRng = .Range("g1:l" & mRow)
        Set mRng1 = .Range("a2:a12")
        Set mRng2 = .Range("f2:f12")
        mTotal = Application.WorksheetFunction.Max(mRng2)
        Set mRng3 = Union(mRng1, mRng2)
    End With
   
    oldMonth = Month(Date) - 1
    Application.ScreenUpdating = False
    Charts.Add
   
    Select Case mTotal
    Case 1 To 100
        mTotal = "100"
    Case 101 To 200
        mTotal = "200"
    Case 201 To 300
        mTotal = "300"
    Case 301 To 400
        mTotal = "400"
    Case 401 To 500
         mTotal = "500"
    Case esle
        mTotal = mTotal
    End Select
   
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
    With ActiveChart
        .SetSourceData Source:=mRng3, PlotBy:=xlColumns
        .HasTitle = True
        .ChartType = xlColumnClustered
        .HasLegend = False
        .ApplyDataLabels xlDataLabelsShowValue
        '.Axes(xlCategory).TickLabels.Orientation = xlHorizontal
        .ChartTitle.Characters.Text = oldMonth & " 月份統計表"
        .ChartTitle.Font.Bold = False
        .ChartTitle.Font.Size = 12
        .PlotArea.Top = 16
        .PlotArea.Height = 160
        .Axes(xlValue).MaximumScale = mTotal
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
        .ChartArea.Font.Size = 8
        .ChartTitle.Font.Size = 10
    End With
   
   
    Application.ScreenUpdating = True '
   
End Sub
作者: register313    時間: 2012-2-28 17:51

回復 1# dechiuan999
  1. Private Sub CommandButton1_Click()
  2. Dim mRng As Range
  3.     Dim mRng1 As Range
  4.     Dim mRng2 As Range
  5.     Dim mRng3 As Range
  6.     Dim mTotal%
  7.     Dim oldMonth
  8.     Dim mSht As Worksheet
  9.     Dim mRow As Integer
  10.         
  11.     Set mSht = Worksheets(1)
  12.     With mSht
  13.         mRow = .Range("a1").End(xlDown).Row
  14.         Set mRng = .Range("g1:l" & mRow)
  15.         Set mRng1 = .Range("a2:a12")
  16.         Set mRng2 = .Range("f2:f12")
  17.         mTotal = Application.WorksheetFunction.Max(mRng2)
  18.         Set mRng3 = Union(mRng1, mRng2)
  19.     End With
  20.    
  21.     oldMonth = Month(Date) - 1
  22.     Application.ScreenUpdating = False
  23.     '新增圖表之X位置 Y位置 寬 高
  24.     Set mychart = Sheet1.ChartObjects.Add(350, 0, 400, 200)
  25.    
  26.     Select Case mTotal
  27.     Case 1 To 100
  28.         mTotal = "100"
  29.     Case 101 To 200
  30.         mTotal = "200"
  31.     Case 201 To 300
  32.         mTotal = "300"
  33.     Case 301 To 400
  34.         mTotal = "400"
  35.     Case 401 To 500
  36.          mTotal = "500"
  37.     Case esle
  38.         mTotal = mTotal
  39.     End Select
  40.    
  41.     With mychart.Chart
  42.         .SetSourceData Source:=mRng3, PlotBy:=xlColumns
  43.         .HasTitle = True
  44.         .ChartType = xlColumnClustered
  45.         .HasLegend = False
  46.         .ApplyDataLabels xlDataLabelsShowValue
  47.         '.Axes(xlCategory).TickLabels.Orientation = xlHorizontal
  48.         .ChartTitle.Characters.Text = oldMonth & " 月份統計表"
  49.         .ChartTitle.Font.Bold = False
  50.         .ChartTitle.Font.Size = 12
  51.         .PlotArea.Top = 16
  52.         .PlotArea.Height = 160
  53.         .Axes(xlValue).MaximumScale = mTotal
  54.         .Axes(xlCategory, xlPrimary).HasTitle = False
  55.         .Axes(xlValue, xlPrimary).HasTitle = False
  56.         .ChartArea.Font.Size = 8
  57.         .ChartTitle.Font.Size = 10
  58.      End With
  59.    
  60.     Application.ScreenUpdating = True

  61. End Sub
複製代碼
[attach]9797[/attach]
作者: GBKEE    時間: 2012-2-28 20:27

回復 2# register313
Set Rng = Range("H1:L12")    ' 樓主指定圖表的位置
Set mychart = Sheet1.ChartObjects.Add(Rng(1).Left, Rng(1).Top, Rng.Width, Rng.Height)
作者: dechiuan999    時間: 2012-2-28 22:54

謝謝二位大大。
小弟引用二位大大提
供的方法測試很成功。

另想請敎版主大大
在語法中有句rng(1)
所代表用意為何
又如何應用呢?

感恩二位大大!
作者: register313    時間: 2012-2-28 23:13

回復 4# dechiuan999


Set Rng = Range("H1:L12")   
則Rng(1)=Range("H1")
   Rng(2)=Range("I1")
   Rng(6)=Range("H2")
...先橫再直 之排列方式
為儲存格之另一種表示法

[attach]9799[/attach]
作者: dechiuan999    時間: 2012-2-29 07:15

謝謝二位大大相助。

感恩大大!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)