返回列表 上一主題 發帖

[發問] 如何在 Excel 的圖表中將無資料日期不顯示

回復 1# saleen
妳將 Excel 檔案壓縮成 .rar 便可以使用附件上傳。

TOP

回復 4# saleen
問題出在妳圖表的 "選取資料(E)" ->  編輯數列 -> 數列值(Y) -> "=工作表1!$C$2:$C$67"
是否正確設定?
我觀察到妳的每一組選取資料之數列值範圍都類似為 "=(工作表1!$C:$C,工作表1!$C$1)" ????,
請將它們都修正為其相對應之確實數列值,例如: "=工作表1!$C$2:$C$67"。
我原本想進入一一修正,但是卻無能為力 (開啟檔案後等了將近十來分鐘都還在忙碌中,大概
是在處理圖表吧?)

TOP

回復 4# saleen
是不是妳的需求?

我將妳的程式碼加入了資料座標值值的動態異動,
只要資料變動,它於執行 upd() 時會同時修正。
  1. Private Sub Workbook_Open()
  2.      Call updateDate     ' 程式一啟始,便去自動執行 updateDate     
  3.     newHour = Hour(Now())
  4.     newMinute = Minute(Now())
  5.     newSecond = Second(Now()) + 20
  6.     waittime = TimeSerial(newHour, newMinute, newSecond)
  7.     Application.Wait waittime     '   稍待 20 秒後執行 upd()
  8.     Call upd
  9. End Sub

  10. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  11.     Me.Save
  12. End Sub

  13. Sub updateDate()
  14.     Dim Rng As Range

  15.     With 工作表1
  16.         If .[A2] <> Date Then
  17.             '  .Range("A2:H2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  18.             .Range("A2:H2").Insert Shift:=xlShiftDown
  19.             .[A2] = Date
  20.         End If
  21.     End With
  22. End Sub

  23. Sub upd()
  24.     Dim Rng As Range
  25.    
  26.     With 工作表1
  27.         Set Rng = .[B2].Resize(1, 5)
  28.         
  29.         If .[A2] = Date Then
  30.             '  因為原指定的 J44 會因資料之行數增減而有所變動。
  31.             Rng(1) = "=XQNET|Quote!'TSEX5.TW-StockValueRatio'"
  32.             Rng(2) = "=XQNET|Quote!'TSEX5.TW-PriceChangeRatio'"
  33.             Rng(3) = "=XQNET|Quote!'TSEX8.TW-StockValueRatio'"
  34.             Rng(4) = "=XQNET|Quote!'TSEX8.TW-PriceChangeRatio'"
  35.             Rng(5) = "=100-B2-D2"
  36.             Rng.Value = Rng.Value              '  將公式以欄值取代
  37.         End If
  38.     End With
  39.    
  40.     reDraw       '  重新繪製圖表座標值
  41. End Sub

  42. Sub reDraw()
  43.     Dim shp As Integer, EndKBarRow As Long
  44.    
  45.     With 工作表1
  46.         EndKBarRow = .Range("B" & Sheets("工作表1").Rows.Count).End(xlUp).Row
  47.         shp = 0
  48.         For Each oShape In .Shapes
  49.             If oShape.Type = 3 Then            '  既有的統計圖表
  50.                 oShape.Select
  51.                 shp = shp + 1
  52.                  
  53.                 With ActiveChart
  54.                     .SetSourceData Source:=IIf(shp = 1, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$B$1:工作表1!$B$" & CStr(EndKBarRow)), _
  55.                                            IIf(shp = 2, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$C$1:工作表1!$C$" & CStr(EndKBarRow)), _
  56.                                            IIf(shp = 3, Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$D$1:工作表1!$D$" & CStr(EndKBarRow)), _
  57.                                                         Range("工作表1!$A$1:工作表1!$A$" & CStr(EndKBarRow) & ", 工作表1!$E$1:工作表1!$E$" & CStr(EndKBarRow)))))
  58.                     With .Axes(xlCategory)
  59.                         .CategoryType = xlTimeScale
  60.                         .MajorUnit = 1
  61.                         .MajorUnitScale = xlDays
  62.                         .MinorUnit = 1
  63.                         .MinorUnitScale = xlDays
  64.                     End With
  65.                 End With
  66.             End If
  67.         Next
  68.         .[A1].Select
  69.     End With
  70. End Sub
複製代碼

TOP

回復  saleen


    請問開啟檔案時會出現,無法執行 XQNET.EXE,這是要安裝什麼程式
ML089 發表於 2013-11-2 20:17

當第一次開啟含有 DDE 連結的 Excel 檔案時,其步驟如下:
1.  如你目前之案例,首先將你已匯入處裡的檔案刪除掉,再重新下載一次。
2.  開啟該檔案,其上方列會提示你是否 "啟動",請你先檢查程式碼
      Workbook_BeforeClose(Cancel As Boolean) 內是否有 Me.Save,
      如有則將它先行 Mark (  '  Me.Save ) ,然後將此修正予以儲存 (是 VBA 的檔案儲存),
      接後再去點選 "啟動",啟動該 Excel。
3.  按完 "啟動",則再次將該 Excel 檔關閉不儲存
4.  再次開啟該檔案,選擇不連線。之後就一切 OK 了!

TOP

回復 10# saleen
問題一:
妳的附件原始檔,之前我在開啟它時曾經足足等了 五 ~ 十分鐘不等還無法進入,
所以我採用分段方式才將妳圖表的問題 (#5 樓  -  回文) 消除。這也是妳說的:
" Excel 的圖表繪圖速度好慢喔..  每次開檔案之後都要等它畫完圖 "
" upd 不知道為什麼還是不會自動執行,一定要我手動點執行巨集它才會跑
  我都已經給它 20 秒的等候時間了 "
事實上、妳那 20 秒的等候時間早就過了不知多久時候了,這亦是不會執行
upd() 的真正原因。除非你有權限能下載附件去覆蓋掉妳的 "成交比重分析.xlsm"
問題二:
TimeScale 的問題是圖表內部控制,無法任由使用者異動。這方面可能要直接去
請教微軟了。

TOP

回復 10# saleen
成交比重分析.rar (35.04 KB)

TOP

回復 10# saleen
我想到了一個解決良方!
剛才我試了一下開啟到完全進入作業的時間
大約需時 30 秒 ~ 或之上,妳把等候時間加上
newSecond = Second(Now()) + 30    '   或者 35 秒
便解決問題了。

TOP

我改成 40 秒它還是一樣
都顯示 #N/A
>
saleen 發表於 2013-11-6 14:25

請你查看一下  J44 到 M44 資料數據是否為 都顯示 #N/A,
如果答案是 Yes:
1.   妳的券商軟體是否已開啟?
2.  開啟順序應為: 券商軟體  --->   Excel  --->  連線作業。
如果答案是 No:
1.  B2 到 E2 欄內容為何?

TOP

回復 17# saleen
妳把 upd()  更換成以下的程式碼便OK 了。
  1. Sub upd()
  2.     Dim Rng As Range
  3.    
  4.     With 工作表1
  5.         Set Rng = .[B2].Resize(1, 5)
  6.         
  7.         If .[A2] = Date Then
  8.             Rng(1) = "=J44"
  9.             Rng(2) = "=K44"
  10.             Rng(3) = "=L44"
  11.             Rng(4) = "=M44"
  12.             Rng(5) = "=100-B2-D2"
  13.             Rng.Value = Rng.Value              '  將公式以欄值取代
  14.         End If
  15.     End With
  16.    
  17.     reDraw       '  重新繪製圖表座標值
  18. End Sub
複製代碼
試試看!

TOP

        靜思自在 : 謊言像一朵盛開的鮮花,外表美麗,生命短暫。
返回列表 上一主題