博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

VB6.0 用Excel生成數據分析餅圖例子

Posted on 2010-12-07 21:39  ☆Keep★Moving☆  阅读(874)  评论(0编辑  收藏  举报

我們在界面加一個按扭,點擊後就會生成Excel的分析餅圖,代碼如下:

Option Explicit
  
Private Sub Command1_Click()
   Dim oXL As Excel.Application
   Dim oWB As Excel.Workbook
   Dim oSheet As Excel.Worksheet
   Dim oRng As Excel.Range
  

   'On Error GoTo Err_Handler
  
' Start Excel and get Application object.
   Set oXL = CreateObject("Excel.Application")
   oXL.Visible = True
  
' Get a new workbook.
   Set oWB = oXL.Workbooks.Add
   Set oSheet = oWB.ActiveSheet
  
' Add table headers going cell by cell.
   oSheet.Cells(1, 1).Value = "First Name"
   oSheet.Cells(1, 2).Value = "Last Name"
   oSheet.Cells(1, 3).Value = "Full Name"
   oSheet.Cells(1, 4).Value = "Salary"
  

' Format A1:D1 as bold, vertical alignment = center.
   With oSheet.Range("A1", "D1")
      .Font.Bold = True
      .VerticalAlignment = xlVAlignCenter
   End With
  
' Create an array to set multiple values at once.
   Dim saNames(5, 2) As String
   saNames(0, 0) = "John"
   saNames(0, 1) = "Smith"
   saNames(1, 0) = "Tom"
   saNames(1, 1) = "Brown"
   saNames(2, 0) = "Sue"
   saNames(2, 1) = "Thomas"
   saNames(3, 0) = "Jane"

   saNames(3, 1) = "Jones"
   saNames(4, 0) = "Adam"
   saNames(4, 1) = "Johnson"
  
' Fill A2:B6 with an array of values (First and Last Names).
   oSheet.Range("A2", "B6").Value = saNames
  
' Fill C2:C6 with a relative formula (=A2 & " " & B2).
   Set oRng = oSheet.Range("C2", "C6")
   oRng.Formula = "=A2 & "" "" & B2"
  
' Fill D2:D6 with a formula(=RAND()*100000) and apply format.
   Set oRng = oSheet.Range("D2", "D6")
   oRng.Formula = "=RAND()*100000"
   oRng.NumberFormat = "$0.00"
  
' AutoFit columns A:D.
   Set oRng = oSheet.Range("A1", "D1")
   oRng.EntireColumn.AutoFit
  
' Manipulate a variable number of columns for Quarterly Sales Data.
   Call DisplayQuarterlySales(oSheet)
  
' Make sure Excel is visible and give the user control
' of Microsoft Excel's lifetime.
   oXL.Visible = True
   oXL.UserControl = True
  
' Make sure you release object references.
   Set oRng = Nothing
   Set oSheet = Nothing
   Set oWB = Nothing
   Set oXL = Nothing
  
Exit Sub
Err_Handler:
   MsgBox Err.Description, vbCritical, "Error: " & Err.Number
End Sub

Private Sub DisplayQuarterlySales(oWS As Excel.Worksheet)
   Dim oResizeRange As Excel.Range
   Dim oChart As Excel.Chart
   Dim iNumQtrs As Integer
   Dim sMsg As String
   Dim iRet As Integer
  
' Determine how many quarters to display data for.
   For iNumQtrs = 4 To 2 Step -1
      sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"
      iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _
         Or vbMsgBoxSetForeground, "Quarterly Sales")
      If iRet = vbYes Then Exit For
   Next iNumQtrs
  

   sMsg = "Displaying data for" & Str(iNumQtrs) & " quarter(s)."
   MsgBox sMsg, vbMsgBoxSetForeground, "Quarterly Sales"
  
' Starting at E1, fill headers for the number of columns selected.
   Set oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs)

   oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales"""
  
' Change the Orientation and WrapText properties for the headers.
   oResizeRange.Orientation = 38
   oResizeRange.WrapText = True
  
' Fill the interior color of the headers.
   oResizeRange.Interior.ColorIndex = 36
  
' Fill the columns with a formula and apply a number format.
   Set oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
   oResizeRange.Formula = "=RAND()*100"
   oResizeRange.NumberFormat = "$0.00"
  
' Apply borders to the Sales data and headers.
   Set oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
   oResizeRange.Borders.Weight = xlThin
  
' Add a Totals formula for the sales data and apply a border.
   Set oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
   oResizeRange.Formula = "=SUM(E2:E6)"
   With oResizeRange.Borders(xlEdgeBottom)
      .LineStyle = xlDouble
      .Weight = xlThick
   End With
  
' Add a Chart for the selected data
   Set oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
   Set oChart = oWS.Parent.Charts.Add
   With oChart
      .ChartWizard oResizeRange, xl3DColumn, , xlColumns
      .SeriesCollection(1).XValues = oWS.Range("A2", "A6")
         For iRet = 1 To iNumQtrs
            .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
         Next iRet
      .Location xlLocationAsObject, oWS.Name
   End With
  
' Move the chart so as not to cover your data.
   With oWS.Shapes("Chart 1")
      .Top = oWS.Rows(10).Top
      .Left = oWS.Columns(2).Left

   End With
  
' Free any references.
   Set oChart = Nothing
   Set oResizeRange = Nothing

End Sub