返回列表 上一主題 發帖

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

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

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

檔案內有範例及說明
使用VBA將公式以文字型態於原位置顯示.rar (4.28 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

回復 2# stillfish00

謝謝迅速回覆,學習到很多指令與技巧

希望繼續指導一下

延伸詢問 1
1. 公式文字是要寫回原儲存格位置
2. 要能選取某個工作簿(或某一個檔案)
3. 工作簿裡面包含不定數工作表,要將所有工作表裡有關公式全部改為文字型態(陣列公式前後加 {...} )
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 3# Hsieh

謝謝
Cells.SpecialCells(xlCellTypeFormulas) 這個可以只選到公式區,真強

下面幾個指令你與stillfish00下的方式不同,這有差別(或要注意的情況嗎)嗎?
.FormulaLocal
.FormulaArray
.Formula

麻煩再看3樓新的延伸問題,謝謝
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 3# Hsieh

我改寫抓全部工作表後,遇到沒有工作表內沒有公式時就會錯誤,要如何避免
  1. Sub ex00()
  2.     Dim A As Range
  3.     For Each sh In Sheets
  4.     For Each A In sh.Cells.SpecialCells(xlCellTypeFormulas)
  5.         If A.HasArray Then
  6.            A = "{" & A.FormulaLocal & "}"
  7.         Else
  8.            A = "'" & A.FormulaLocal
  9.         End If
  10.     Next
  11.     Next
  12. End Sub
複製代碼
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 3# Hsieh
回復 2# stillfish00

有新的問題
' 1. 當該工作表沒有公式時會產生錯誤
' 2. 遇到多格陣列公式時會跑很久也會錯誤
' 3. 單格陣列公式時前後用 {}包住, 多格陣列公式時前後用 []包住 - 表示

新的範例檔案
使用VBA將公式以文字型態於原位置顯示.rar (13.41 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 8# Hsieh

執行OK
只剩 多格陣列公式 要用 [ ] 括住,用來區別與單格陣列公式用 { }  括住

因為最後還要將這文字公式復原成公式。
最難的就是多格陣列公式的轉換(公式轉文字,文字再轉回公式),這部分我在網路上找很久都沒有查到可用的,
謝謝超版已經解決一半。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 8# Hsieh

原來是文字 '=SUM(B2:M2) 會變成公式
我將 Mystr = C.C.Formula
改為 Mystr = C.Value

{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 11# stillfish00

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

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

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

        靜思自在 : 世上有兩件事不能等:一、孝順 二、行善。
返回列表 上一主題