返回列表 上一主題 發帖

資料剖析(TextToColumns)對象可以不是儲存格嗎?

回復 10# chiata
  1. Sub test1()
  2.     Dim t As Integer
  3.     For t = 1 To 110
  4.         If t <= "9" Then MsgBox t & " <= 9"
  5.         If t <= "10" Then MsgBox t & " <= 10"
  6.     Next t
  7. End Sub
  8. Sub test2()
  9.     't 沒有明確宣告   
  10. For t = 1 To 110
  11.         If t > "30" Then MsgBox t & " > 30"         '當t<=9 為1位數 比對字串的第一位 "3"
  12.         If t <= "9" Then MsgBox t & " <= 9"        '當t<=9 為1位數 比對字串的第一位 "9"
  13.         If t <= "10" Then MsgBox t & " <= 10"   '當t<=9 為1位數 比對字串的第一位 "1"
  14.         MsgBox TypeName(t)
  15.     Next t
  16. End Sub
複製代碼

TOP

回復  GBKEE
謝謝G大,新年快樂,
圖中Variant/Integer不是代表此變數目前是Integer的狀態嗎 ...
chiata 發表於 2013-2-9 16:23



t 是 variant/Integer 是對的.
但是當 在if 的時候
因為右方 "10" 是 文字, 不是數字,  if會把t轉為文字再對比 (VBA來看, " "裡的是文字)

例如t = 6
if 的時候
if (t<="10") then....
會變成
if ("6"<="10") then....
而不是
if (6<=10) then....

而文字"6" 第1個字 即 "6"  比 "10"的第1個字 "1" 大
換句話說 "6"<="10" 就是等於FALSE

TEST要這樣寫才可以得出效果
  1. Option Explicit         '強制需宣告變數
  2. Sub test()
  3.    Dim t As Integer
  4.    For t = 1 To 110
  5.        If t <= 15 Then MsgBox t
  6.    Next t
  7. End Sub

  8. Sub test2()
  9.     Dim t As Variant  
  10.     For t = 1 To 110
  11.        If t <= 15 Then MsgBox t & " <= 10"
  12.    Next t
  13. End Sub
複製代碼
不指明類型,是會比較方便些, 但是會增加像這樣的錯誤機會.
微軟近年來對Variant的方針也是變來變去.
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

例如t = 6
if 的時候
if (t<="10") then....
會變成
if ("6"<="10") then....
而不是
if (6<=10) then....
kimbal 發表於 2013-2-16 17:07


謝謝各位前輩,我暸解了!
但似乎一步一步執行程式,在If t <= 10跟If t <= "10"中t的型態都還是variant/Integer,可是實際上在If t <= "10"時VBA是用variant/String去判斷?
  1. Sub test()
  2.     Dim t As Variant
  3.     For t = 1 To 10
  4.         If t <= 10 Then MsgBox t & " <= 10"
  5.         If t <= "10" Then MsgBox t & " <= 10"
  6.     Next t
  7. End Sub
複製代碼

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題