返回列表 上一主題 發帖

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

回復 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

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

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

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

TOP

回復 2# stillfish00

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

希望繼續指導一下

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

TOP

回復 1# ML089
  1. Sub ex()
  2. Dim A As Range
  3. For Each A In Cells.SpecialCells(xlCellTypeFormulas)
  4. If A.HasArray Then A = "{" & A.FormulaLocal & "}" Else A = "'" & A.FormulaLocal
  5. Next
  6. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 1# ML089
  1. Sub TEST()
  2.   Dim ar()
  3.   Dim rngSrc As Range
  4.   
  5.   With Sheets(1)
  6.     Set rngSrc = .Range("A1:O6")
  7.    
  8.     ReDim ar(1 To rngSrc.Rows.Count, 1 To rngSrc.Columns.Count)
  9.     For i = 1 To UBound(ar)
  10.       For j = 1 To UBound(ar, 2)
  11.         If rngSrc.Cells(i, j).HasArray Then
  12.           ar(i, j) = "{" & rngSrc.Cells(i, j).FormulaArray & "}"
  13.         ElseIf rngSrc.Cells(i, j).HasFormula Then
  14.           ar(i, j) = "'" & rngSrc.Cells(i, j).Formula
  15.         Else
  16.           ar(i, j) = rngSrc.Cells(i, j).Value
  17.         End If
  18.       Next
  19.     Next
  20.    
  21.     rngSrc.Copy
  22.     With .[A9]
  23.       .PasteSpecial Paste:=xlPasteFormats '格式
  24.       .Resize(UBound(ar), UBound(ar, 2)).Value = ar
  25.     End With
  26.   End With
  27. End Sub
複製代碼

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題