日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

union all动态表_Excel VBA——动态显示图表

發布時間:2023/12/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 union all动态表_Excel VBA——动态显示图表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文講述將柱形圖和折線圖做成動態圖表的方法。所謂動態是指鼠標點到哪個單元格,就顯示活動單元格所在列或行的圖表,其中折線圖可以讓數據點依次顯示,使得整個圖表不再死板,像變 了一樣!在開始之前,需要先介紹VBA中的一個概念:事件

事件

VBA中的事件可以理解為一種觸發開關,某些對象有對應的事件開關,一旦對象識別了事件動作,就會自動執行事件過程中的程序。比如,一旦打開某個工作簿,就怎么樣,一旦工作表中單元格被更改,就怎么樣,等等,都是一個事件。要寫關于某個對象的事件過程,就必須打開該對象所在模塊,并打開該模塊的代碼窗口進行程序編寫。只有將事件過程寫在對應的模塊中,程序才能自動觸發。在代碼窗口的 列表框和 ?列表框中選擇相應的對象和事件名稱,完成選擇后,代碼窗口會自動生成事件過程的頭部代碼。當然,熟練后這兩行代碼也可以自己直接編寫,但必須要保證和自動生成的完全一致。

圖1? 列表框

圖2?列表框

示例數據源

表1 示例數據源

動態柱形圖

根據表1的示例數據源創建一個簇狀柱形圖表,在圖表中動態顯示活動單元格所在列的設計方案數據。代碼分享Option?ExplicitPrivate?Sub?Worksheet_SelectionChange(ByVal?Target?As?Range)????????'工作表單元選擇改變觸發的事件過程 Application.ScreenUpdating = False????Application.DisplayAlerts?=?False Dim chtchart As ChartObject Dim rngrange As Range, lngc As Long????Dim?sourange?As?Range????Dim?sngleft?As?Single,?sngtop?As?Single sngleft = Range("G5").Left????sngtop?=?Range("G5").Top??? On Error Resume Next Set rngrange = Application.Intersect(ActiveCell, Range("B1:F5")) '判斷活動單元格與數據區域是否有交集 If Not rngrange Is Nothing Then '如果有交集,執行以下程序 lngc = ActiveCell.Column '提取活動單元格所在列號 Set sourange = Application.Union(Range("A2:A5"), Range(Cells(2, lngc), Cells(5, lngc))) '通過Union合并畫圖區域數據 ChartObjects.Delete '刪除已有圖表 Set chtchart = ChartObjects.Add(sngleft, sngtop, 400, 250) '新建圖表 With chtchart.Chart .SetSourceData Source:=sourange, PlotBy:=xlColumns .ChartType = xlColumnClustered .ApplyDataLabels .HasTitle = True .HasLegend = False .ChartTitle.Text = Cells(1, lngc) With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = "流量/L·min-1" .AxisTitle.Font.Size = 12 End With End With????End?If Set rngrange = Nothing Set sourange = Nothing????Set?chtchart?=?Nothing Application.ScreenUpdating = True????Application.DisplayAlerts?=?TrueEnd Sub

運行效果

圖3?動態柱形圖

動態折線圖

將折線圖上的每個數據點動態顯示出來,可以更加直觀地感受數據的變化趨勢。

代碼分享

Option?ExplicitPrivate?Sub?Worksheet_SelectionChange(ByVal?Target?As?Range) Dim chtchart As ChartObject Dim rngrange As Range, lngrow As Long Dim sourange As Range Dim sngleft As Single, sngtop As Single????Dim?i?As?Integer sngleft = Range("G5").Left????sngtop?=?Range("G5").Top???? On Error Resume Next????ChartObjects.Delete Set rngrange = Application.Intersect(ActiveCell, Range("A2:F5")) If Not rngrange Is Nothing Then lngrow = ActiveCell.Row Set chtchart = ChartObjects.Add(sngleft, sngtop, 400, 250) Set sourange = Application.Union(Range("B1:F1"), Range("B" & lngrow, "F" & lngrow)) With chtchart.Chart .SetSourceData Source:=sourange, PlotBy:=xlRows .ChartType = xlLine .ApplyDataLabels .HasTitle = True .HasLegend = False .ChartTitle.Text = Cells(lngrow, 1) With .SeriesCollection(1) .MarkerStyle = xlMarkerStyleCircle .MarkerSize = 8 End With With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = "流量/L·min-1" .AxisTitle.Font.Size = 12 End With????????End?With For i = 1 To 5 chtchart.Chart.SeriesCollection(1).Values = Range("B" & lngrow).Resize(1, i) delay 0.5????????Next????End?If Set rngrange = Nothing Set sourange = Nothing Set chtchart = NothingEnd Sub'delay過程定義Sub delay(t As Single) Dim t1 As Single t1 = Timer Do DoEvents Loop While Timer - t1 < tEnd?Sub

運行效果

圖4?動態折線圖

總結

本文分享了制作動態柱形圖和動態折線圖的方法。盡管看起來貌似高大上,其實只是在作圖程序的基礎上加入了數據區域的判斷和更新,以及增加了一個延時函數來控制數據點依次顯示。

總結

以上是生活随笔為你收集整理的union all动态表_Excel VBA——动态显示图表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。