返回列表 上一主題 發帖

[發問] VBA 函數公式無法執行

[發問] VBA 函數公式無法執行

本帖最後由 ziv976688 於 2020-12-19 00:35 編輯

未命名-1.png
2020-12-19 00:24


未命名-2.png
2020-12-19 00:27


測試檔.rar (141.04 KB)

說明︰
將函數版範例的B65函數公式,貼到程式主檔的列147
不知何故?列147程式碼無法執行,會呈現如圖片的偵錯(其餘公式的程式執行都沒有問題)。
列147
[B65].FormulaArray = "=IF(MAX((COUNTIF($B1:B1,""<>"")=COUNTIF(OFFSET($B1,,,,COLUMN($A:$AW)),""<>""))*(SMALL(IF($A3:$A60=""小計"",ROW(3:60)),COUNTIF($B1:B1,""<>""))=ROW(3:60))*$B3:$AX60)=N(OFFSET($A1,SMALL(IF($A3:$A60=""小計"",ROW(3:60)),COUNTIF($B1:B1,""<>""))-1,COLUMN(A1))),OFFSET($A1,SMALL(IF($A3:$A60=""小計"",ROW(3:60)),COUNTIF($B1:B1,""<>""))-1,COLUMN(A1)),"""")"

PS︰列147程式碼目前點綠沒有執行。

請問︰
如何才能解決執 行公式程式的Bug問題?
謝謝!

本帖最後由 ziv976688 於 2020-12-19 13:06 編輯

回復 1# ziv976688
爬文找到造成"無法設定種類Range的FormulaArray屬性"的原因是 : 公式超過255個字元
但只有找到2007以後的版本的解決方法 : 勾選“信任對VBA工程對象模型的訪問”

不知有哪位大大能提供2003版本的操作和解決方法?
謝謝!

TOP

回復 2# ziv976688


太複雜了, 沒辦法

TOP

回復 2# ziv976688


既用vba, 何須複雜, 將各區段位址取出即可
對角五段區域的最大數-01.rar (12.64 KB)

TOP

本帖最後由 ziv976688 於 2020-12-19 16:57 編輯

回復 4# 准提部林
准提版主 :
除非不得已,不太敢請教VBA,因為怕下載源的表格不相同時,自己不一定會修改
這一題的貴解,位址很容易懂,而且竟然還可以適用於各種欄位數的不同區段分布~
真是神解

謝謝版主的熱心幫忙~感恩再感恩

TOP

本帖最後由 ziv976688 於 2020-12-19 19:21 編輯

回復 4# 准提部林
未命名-1.png
2020-12-19 19:19

未命名-2.png
2020-12-19 19:20

TEST_2.rar (174.7 KB)
准提版主 : 您好 !
不好意思,將貴解程式碼置入實務的Ori主檔中,執行時產生一些小問題(多一點小手續,但最終還是能執行完畢) ~
每執行完成5個測試檔後,就會產生一次偵錯提示框(請詳見程式碼的列155) :
EX : 目前提供的13個測試檔,執行後會在第6個(11-20)和第11個(12-08)各產生一次偵錯(如附件圖片)
也就是說 : 每次只執行5個測試檔,就不會產生偵錯,執行一次即可完成。
敬請您再賜正。謝謝您

PS︰目前13個測試檔的操作細況說明
點→按鈕1
當跳出偵錯提示框→選結束
再跳出已開啟檔案→關閉
再跳出是否儲存檔案→選否
再點→按鈕1
再跳出是否取代檔案→選是
直到執行完畢。

TOP

回復 6# ziv976688


N = 0: Cx = 0  '換檔後, 變數要歸零
For Each xR In [A2:A60]
    If xR Like "*_*" Then N = N + 1
    If xR = "小計" Then
       S1 = xR(1, Cx + 2).Resize(1, N).Address
       S2 = xR(1, Cx + 2).Address(0, 0)
       Cells(65, Cx + 2).Resize(1, N) = "=IF(MAX(" & S1 & ")=" & S2 & "," & S2 & ","""")"
       Cx = Cx + N: N = 0
    End If
Next

TOP

回復 7# 准提部林
完成了
謝謝版主的熱心幫忙和耐心指導~感恩

TOP

本帖最後由 ziv976688 於 2020-12-24 08:18 編輯

回復 7# 准提部林
浮動迄止列的語法。
程式碼進階.rar (12.68 KB)
准提版主︰
想將For Each xR In [A2:A60]的範圍迄止列(A60),
改為最後1個"小計"列或"總計"位址列 – 2
以利程式碼能適用各種不同的段落排序。

請問︰這樣可行嗎?
如果可行~
能否再請您幫忙編寫浮動迄止列的語法?
謝謝您
未命名.png
2020-12-24 08:14

TOP

回復 9# ziv976688


N = 0: Cx = 0  '換檔後, 變數要歸零
dim xE as range
set xE=[A:A].find("總計",lookat:=xlwhole)
For Each xR In range("A2:A" & xE.row-2)
    If xR Like "*_*" Then N = N + 1
    If xR = "小計" Then
       S1 = xR(1, Cx + 2).Resize(1, N).Address
       S2 = xR(1, Cx + 2).Address(0, 0)
       Cells(65, Cx + 2).Resize(1, N) = "=IF(MAX(" & S1 & ")=" & S2 & "," & S2 & ","""")"
       Cx = Cx + N: N = 0
    End If
Next

TOP

        靜思自在 : 愛不是要求對方,而是要由自身的付出。
返回列表 上一主題