請教VBA裡用varType偵測作用格的型態,傳回為10是什麼意思

不好意思來請教下網查暫時查不到的疑惑

因我做了個回圈,目的是當發現作用格內為空值時,就直接抓取上一列同欄位內的值
判斷的條件有1,必須是空值 和 2、作用格內不能有公式
這樣想想好像我條件2可要可不要...哈..
不過都打了就先不管它

問題來了,我試Run了下,共計100多欄
然後它跑到一半就自己中止..
我用了vartype(cells(xx,xxx))
來看它傳回什麼..
因為出錯的那格內有公式,公式為:
=IF(AF3714="",NA(),((AG3714-AF3714)/AF3714)*100%-((AI3714-AH3714)/AH3714)*100%)

而?vartype(cells(xx,xxx))後,只給我傳回10

同樣的方法,我試著用vartype(cells(xx,"AE"))
因為此欄位也是有公式,其公式為
=IF(AD3715="",NA(),SUM(AD3666:AD3715)/50)

但是此時?vartype(cells(xx,xxx))是傳回5

於是我再試著用?vartype(cells(xx,"B"))
因為B欄就只是純數字,也可以說就是它成功的複製與貼上了上一列同欄位的值了
但其型態是傳回5
這不免讓我好奇了,怎麼前兩個都是公式的地方,一個是傳回5,跟數值時一樣,但卡住的地方卻傳回10...且程序就不再讓我繼續往下跑了..
TT...
感謝達人幫忙..Orz

PS:錯誤訊息
請教VBA裡用varType偵測作用格的型態,傳回為10是什麼意思

剛剛我把內有公式時就不複製的條件去掉,僅剩若作用格內為""空值時才做複製、貼上

但我重跑後發現,它現在提早在某作用格內為 #N/A 的地方就不動作了
錯誤訊息同上圖..
用?var(cells(x,y)),結果回傳的也是10
所以這10代表的是什麼...

還是我該換個方法,條件改設只要作用格內沒東西時,就複製貼入..
但這樣的條件式跟我原先打的好像一樣..
我打的是(列的部份先不丟入,避免看的人看的雜了些)
dim AllCol&,Coltimes
allcol=cells(1,columns.count).end(xltoleft).column

'從B欄至最後欄
For ColTimes = 2 To AllCol

'當儲存格內值 內為空值時 才做貼入
If Cells(myRow, ColTimes) = "" Then
Cells(myRow, ColTimes) = Cells(myRow - 1, ColTimes)
Else:
End If
next coltimes
---------------------------------------------------
剛我繼續試了下,在回圈裡加了秀狀態的陳述式

大致內容如下:
MsgBox "列:" & myRow & Chr(10) & _
"欄:" & ColTimes & Chr(10) & _
"內值為:" & Cells(myRow, ColTimes)

就是想看看它跑到哪一格時,內容是什麼時...會給我莫名出問題
恩..發現呢,如果是有公式的..它就會直接顯示公式計算出來的值
當然,若僅是值,就顯示值
問題來了..若此欄位我用了文字
#N/A來代表無資料...
它就會被迫中斷了...
奇怪咧。。這裡的變數型態...應該跟內容沒關係啊...為什麼它管這麼大..
變數myrow..是long 型態..
變數coltimes是int
變數allCol是long..
用Cells(myRow, ColTimes)來看內容..
恩..怎麼到了文字型態就中斷了...怪哉啊怪哉...

============
暫解的方法
因為不知是何故...所以我用on error的方法來做pass

語法大致如下,變數可能不太一樣,因為我懶得再改
On Error Resume Next
If Cells(RSRow, ColTimes) = "" Then
Cells(RSRow, ColTimes) = Cells(RSRow - 1, ColTimes)
If Err <> 0 Then
Err.Clear
MsgBox "列:" & RSRow & Chr(10) & _
"欄:" & ColTimes & Chr(10) & _
"內值為:" & Cells(RSRow, ColTimes) & Chr(10) & _
"該格有不知原因之異常狀況。"
End If

然後神奇的事發生了,它遇到我在格內有#n/A的地方時,實際上還是會有錯誤.
err的代碼是13

但因為我用了on error...所以它忽略往下,但問題來了,err<>0所以會進入msgbox
但是鬼怪的事又來了..它跑是跑了所有陳述式,但是..它就是不會顯示出來錯誤的提醒訊息框...
一個下午在鬼打中..= ="先醬唄,留給達人來幫忙..我盡力了..
2023-04-05 21:45 發佈
MsgBox ActiveCell.HasFormula
MsgBox Cells(3, 3).HasFormula
MaverickRay wrote:
不好意思來請教下網查...(恕刪)

就是公式中的NA()導致Vartype回傳10,因為Vartype無法判讀NA()是什麼所以回傳10這個錯誤值代碼,如果你程式要正確運作二樓有解答,先判斷儲存格有沒有公式,有的話再去判斷Vartype的值做相對應的處理。
MaverickRay
MaverickRay 樓主

好的謝謝您,我再抽時間來研究一下..

2023-04-08 20:42
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?