返回列表 上一主題 發帖

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

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

各位論壇的先進大家好,小弟從學習vba語法以來將近有半個月的時間了,目的是為了設計一套成績計算系統。多虧論壇上多位熱心人士的幫忙,得以解決許多問題。也因為如此,所以有些語法一知半解。有勞各位熱心的大大出手相助。
        小弟最近遇到了一個問題,原本我已經寫好了語法,目的是保護sheet2和sheet3的部分資料,而且前幾天也已經執行成功,可是今天又執行時,卻又出現了錯誤訊息「物件不支援此屬性或方法」而此列反黃   .Selection.Locked = True  老實說,我也不知哪裡出錯,所以來這兒尋求協助,是不是自己有些盲點沒發現。
語法
Sub Worksheet_Activate()
    With Worksheets("期中評量")
    .Range("A1:v2").Select
    .Range("a3", cells(3, 1).End(xlDown)).Select
    .Selection.Locked = True
    .Selection.FormulaHidden = True
    .ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
    End Sub
Sub Worksheet_Deactivate()
    With Worksheets("期中評量")
    .cells.Select
    .Selection.Locked = False
    .Selection.FormulaHidden = True
    .ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
    End Sub

這是我所拜訪過,回應速度最快,態度最熱心的程式論壇,(只因我是用撥號上網56k,所以久久才能上來一次)

TOP

抱歉!有勞兩位又讓小弟上了一課。原來發現是自己的問題。問題在這裡,為了保護成績單的標題列,所以我寫了(當然是兩位修正的)下列語法:
Option Explicit
Sub Worksheet_Activate()
    With Worksheets("期中成績")
        .Activate
        .Range("b1").Select
        .Range("A3:j3").Select
        .Range("a5", .cells(5, 1).End(xlDown)).Select
        Selection.Locked = True
        Selection.FormulaHidden = True
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=6323
    End With
End Sub
但是成績單的號碼列必須跟隨基本資料欄(就是填班級、人數就會自動出現所有座號)這時語法就會出現錯誤,因為無法更動。所以我又寫了
Sub Worksheet_Deactivate()
    Worksheets("期中成績").Unprotect
    End Sub
但是這樣的話,一離開這個工作表,訊息列就會問我解開的密碼,所以:1.該怎麼解決呢?2.或是有其他可以保護標題列的語法嗎?(又要麻煩了)

TOP

真是抱歉!我自己在書上找到答案了。我想改用scrollarea(限制移動範圍語法)

TOP

兩個有問題的語法,煩請協助看一下,謝謝!

抱歉又來打擾了,這應該是簡單的語法,可能是我腦袋打結了,所以一直無法執行,構想如下;sheet1(基本設定)是設定科目加權,然後sheet2(期中評量)的標題列,我想秀出各科的加權比例,如國語加權是7,我想秀出國語x7,但是失敗了,不知語法哪裡出問題,再麻煩各位了。   
   
    '月考科目加權'
    Dim chall As Integer, enall As Integer, maall As Integer, naall As Integer, soall As Integer
    chall = Worksheets("基本設定").Range("d2").Value
    enall = Worksheets("基本設定").Range("d3").Value
    maall = Worksheets("基本設定").Range("d4").Value
    naall = Worksheets("基本設定").Range("d5").Value
    soall = Worksheets("基本設定").Range("d6").Value
    Worksheets("期中評量").Range("c2").Value = "國語x" & "chall"
    Worksheets("期中評量").Range("d2").Value = "英語x" & "enall"
    Worksheets("期中評量").Range("e2").Value = "數學x" & "maall"
    Worksheets("期中評量").Range("f2").Value = "自然x" & "naall"
    Worksheets("期中評量").Range("g2").Value = "社會x" & "soall"

(與考人數)是調查有幾人參加考試,所以我想出了下列的語法,看似沒問題,結果執行時,如果開頭第一個資料欄位(如c3、d3)只要是空的,電腦就會顯示找不到儲存格,如果有輸入就不會,哪ㄟ安捏?

    '與考人數'
    Dim aa As Integer, bb As Integer, cc As Integer, dd As Integer, ee As Integer
    aa = Worksheets("期中評量").Range("c3", Range("c3").End(xlDown)).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    bb = Worksheets("期中評量").Range("d3", Range("d3").End(xlDown)).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    cc = Worksheets("期中評量").Range("e3", Range("e3").End(xlDown)).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    dd = Worksheets("期中評量").Range("f3", Range("f3").End(xlDown)).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    ee = Worksheets("期中評量").Range("g3", Range("g3").End(xlDown)).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    Worksheets("期中統計").Range("d4").Value = aa
    Worksheets("期中統計").Range("h4").Value = bb
    Worksheets("期中統計").Range("l4").Value = cc
    Worksheets("期中統計").Range("p4").Value = dd
    Worksheets("期中統計").Range("t4").Value = ee

TOP

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

TOP

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

TOP

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

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

TOP

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

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

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題