返回列表 上一主題 發帖

[發問] 請教語法是哪裡出問題?

本帖最後由 GBKEE 於 2012-8-30 07:01 編輯

回復 15# skyutm
這些變數 a11 , b11, c11, d11, e11, f11    Dim   As Integer  程序尚未給值時 都為 0     
這式是多此一舉  a11 = b11 = c11 = d11 = e11 = f11 = 0   傳回   True 或 False   (++=+ ,  +-=- , --=+)
  1. Option Explicit
  2. Sub Ex()
  3. Dim xlBoolean As Boolean
  4. Dim a11 As Integer, b11 As Integer, c11 As Integer, d11 As Integer, e11 As Integer, f11 As Integer
  5. a11 = b11
  6. xlBoolean = a11
  7. Debug.Print xlBoolean & " " & a11 '即時運算視窗終可察看
  8. a11 = b11 = c11
  9. xlBoolean = a11
  10. Debug.Print xlBoolean & " " & a11
  11. a11 = b11 = c11 = d11
  12. xlBoolean = a11
  13. Debug.Print xlBoolean & " " & a11
  14. a11 = b11 = c11 = d11 = e11
  15. xlBoolean = a11
  16. Debug.Print xlBoolean & " " & a11
  17. a11 = b11 = c11 = d11 = e11 = f11
  18. xlBoolean = a11
  19. Debug.Print xlBoolean & " " & a11
  20. a11 = b11 = c11 = d11 = e11 = f11 = 0
  21. xlBoolean = a11
  22. Debug.Print xlBoolean & " " & a11
  23. End Sub
複製代碼

Boolean 資料型態Boolean 變數係以 16 位元( 2 個位元組)數字的形式儲存,但只能是 True 或是 False。Boolean 變數的值不是 True 就是 False ( 在使用 Print 的時候 ),或是 #TRUE# 和 #FALSE# ( 在使用 Write # 的時候 )。使用關鍵字 True 與 False 可將 Boolean 變數指定為這兩個狀態中的一個。
當轉換其他的數值型態為 Boolean 時,0 會轉成 False,而所有其他的值則變成 True。當轉換 Boolean 值為其他的資料型態,時,False 成為 0 ,而 True 成為 -1。

TOP

抱歉!我又來打擾了。上次有討論過。但是這一次有做修正,卻出現問題
語法如下:
    Dim  ...
skyutm 發表於 2012-8-29 23:48


經測試的結果,
若執行過 a11 = b11 = c11 = d11 = e11 = f11 = 0 以後,
a11 固定會被改成 -1
我猜有可能是該指令被解晰成 :
a11= (a11 = 0) (中間的指令都被直接忽略掉了)
會這樣判斷是因為上式若改為 = 1 或 = 5 時,
a11 都會 = 0
而若變更中間參數名稱則那些參數值都不會變. (然而若有非事先定義的參數名稱出現,則會新增該參數出來)

偷懶的方法是在該行後再加上一個 :
a11 = 0

或是將該行改成 :
a11 = 0 : b11 = 0 : c11 = 0 : d11 = 0 : e11 = 0 : f11 = 0

其實不跑該行也是可以的,
因為整數於 Dim 後初值本來就是 0

C 的語法有些是不能在 Basic 上用的,
因為可能會造成非我們所預期的結果.

TOP

回復 13# GBKEE
抱歉!我又來打擾了。上次有討論過。但是這一次有做修正,卻出現問題
語法如下:
    Dim a11 As Integer, b11 As Integer, c11 As Integer, d11 As Integer, e11 As Integer, f11 As Integer, x11 As Integer
    a11 = b11 = c11 = d11 = e11 = f11 = 0
    myrowcount = Sheets("基本設定").Range("j3").Value + 5
    For x11 = 6 To myrowcount
    Set myrange = Sheets("期中成績").Range("c" & x11)
    Select Case myrange
        Case 100
            a11 = a11 + 1
        Case 90 To 99
            b11 = b11 + 1
        Case 80 To 89
            c11 = c11 + 1
        Case 70 To 79
            d11 = d11 + 1
        Case 60 To 69
            e11 = e11 + 1
        Case 0 To 59
            f11 = f11 + 1
    End Select
    Next x11
    Sheets("期中成績").Range("c108").Value = a11
    Sheets("期中成績").Range("c109").Value = b11
    Sheets("期中成績").Range("c110").Value = c11
    Sheets("期中成績").Range("c111").Value = d11
    Sheets("期中成績").Range("c112").Value = e11
    Sheets("期中成績").Range("c113").Value = f11
修正的地方,是把0~9 10~19 20~29 30~39 40~49 50~59 全部改成0~59 ,問題在於顯示100有幾人的地方會出現-1

TOP

回復 13# GBKEE
感謝版主大大,我又學到了一課。原來只是一個空格之差。從學習vba以來,我的心得就是:別人寫的不算,自己要試過才知道,當頭腦打結時,就要趕快問人,不然會原地打轉!

TOP

本帖最後由 GBKEE 於 2012-8-29 06:35 編輯

回復 12# skyutm
& 運算子與前後的字串或變數須空一格
&與前面連接的字串或變數空一格 , 系統會自動在&後空一格
A= B &C                 系統會自動在&後空一格    A= B & C
A=B &C &D &E   系統會只會 在&後空一格    A= B & C & D & E

TOP

回復 11# skyutm
問題又來了,又有一個解不開的問題,在秀出中文字時,是不是在中文加上""就可以了,然後加上&就可以連結變數,連結一個變數沒問題,可是我要再加第二個變數時,就顯示語法錯誤?不懂,煩請解惑,不勝感激!(我想秀出?年?班)

    '期中成績標題'
    Dim a1, a2
    a1 = Sheets("基本設定").Range("j1").Value
    a2 = Sheets("基本設定").Range("j2").Value
    With Sheets("期中成績")
    .Range("b2").Value = "新路國民小學" & a1&"年"

TOP

回復 10# GBKEE
感謝版主,我又學了一課。

TOP

本帖最後由 GBKEE 於 2012-8-27 06:04 編輯

回復 9# skyutm
Dim  變數  As  型態(或 物件)   (沒有指明就是  Variants型態)
並非所有工作表函數皆可用於VBA
圖中可選用V BA可用之工作表函數



上圖 須有此設定

TOP

回復 8# GBKEE
原來版主也是早起的鳥兒,再次感謝。不過小弟還是有些疑問想提出:1.dim chall,aa 這兒是不是省略了什麼?書上說要定義變數2.application後面所加的函數是不是excel工作表使用的函數?

TOP

本帖最後由 GBKEE 於 2012-8-26 06:22 編輯

回復 1# skyutm
SpecialCells(xlCellTypeConstants, xlNumbers)  沒有傳回指定的儲存格會有錯誤
工作表函數 Count  :計算含有數字的儲存格數量
工作表函數 CountA :計算不是空白的儲存格數量
  1. Sub Ex()
  2. Dim chall, aa
  3. chall = Worksheets("基本設定").Range("d2").Value
  4. With Worksheets("期中評量")
  5. .Range("c2").Value = "國語x" & chall
  6. aa = Application.Count(.Range("c3", .Range("c3").End(xlDown)))
  7. End With
  8. Worksheets("期中統計").Range("d4").Value = aa
  9. End Sub
複製代碼

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題