返回列表 上一主題 發帖

[發問] 使用VBA將公式以文字型態於原位置顯示

回復 10# ML089
試看看這樣可不可以。
  1. Sub Test()
  2.   Dim C As Range, Sh As Worksheet
  3.   Dim fs
  4.   
  5.   fs = Application.GetOpenFilename("Excel Files (*.xls;*.xlsx;*.xlsm), *.xls;*.xlsx;*.xlsm") '開啟檔案
  6.   If StrComp(TypeName(fs), "String", vbTextCompare) <> 0 Then Exit Sub  '使用者取消選擇檔案
  7.   
  8.   
  9.   With Workbooks.Open(fs)
  10.     Application.EnableEvents = False
  11.    
  12.     For Each Sh In .Sheets
  13.       For Each C In Sh.UsedRange
  14.         If C.HasArray Then
  15.           If C.CurrentArray.Count > 1 Then
  16.             C.CurrentArray.Value = "[" & C.FormulaArray & "]"
  17.           Else
  18.             C.CurrentArray.Value = "{" & C.FormulaArray & "}"
  19.           End If
  20.         ElseIf C.HasFormula Then
  21.           C.Value = "'" & C.Formula
  22.         End If
  23.       Next
  24.     Next
  25.    
  26.     Application.EnableEvents = True
  27.   End With
  28.   
  29. End Sub
複製代碼

TOP

回復 11# stillfish00

謝謝你辛苦了,
大部分可以但 多格陣列公式 還是沒有區分出來

PS
多格陣列公式 是指公式輸入時一次選取多儲存格用 CTRL+SHIFT+ENTER齊按輸入
例如:工作表[多格陣列公式]中B2:J10是一次選取同時輸入公式 =A2:A10*B1:J1,以 CTRL+SHIFT+ENTER齊按輸入
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 12# ML089

不行嗎?
我跑7#的新範例,H欄是有分出來的

TOP

回復 13# stillfish00

CurrentArray.Count 這個指令單獨測試是OK的,不知我就是跑不出來

我在程式裡加 Debug.Print,並沒有被執行到,不知問題在哪裡

If C.CurrentArray.Count > 1 Then
            C.CurrentArray.Value = "[" & C.FormulaArray & "]"
            Debug.Print "[" & C.FormulaArray & "]"
Else
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 13# stillfish00

不好意思,多格陣列公式 已經可以了,CurrentArray.Count這指令可以
因為測試檔案已經被改過沒注意到


後續作業完程後
還要另一個程式執行,將這些 "文字公式" 轉為公式儲存格

再麻煩幫忙一下
PS:有些格式可能需要調整,
單格陣列公式 {...} OK
多格陣列公式 [...] OK ,但如何來判斷他的範圍?
一般公式 '=.... 可能會與原有文字公式衝突,或許將改為 '@=....前2字元 "@=" 來判別
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 原諒別人就是善待自己。
返回列表 上一主題