返回列表 上一主題 發帖

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

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

各位論壇的先進大家好,小弟從學習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

本帖最後由 kevin681024 於 2012-8-21 14:11 編輯

回復 1# skyutm
試試看這樣呢?
  1. Sub Worksheet_Activate()
  2. With Worksheets("期中評量")
  3.     With Union(.Range("A1:V2"), .Range("a3", Cells(3, 1).End(xlDown)))
  4.         .Locked = True
  5.         .FormulaHidden = True
  6.     End With
  7.     .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  8. End With
  9. End Sub
複製代碼
80 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 GBKEE 於 2012-8-21 14:25 編輯

回復 2# kevin681024
少一的 .
With Union(.Range("A1:V2"), .Range("a3", .Cells(3, 1).End(xlDown)))

回復 1# skyutm
Selection 屬性   如果是 Application 物件,則傳回現用視窗中的選定物件,如果是 Windows 物件,則傳回指定視窗。
  1. Option Explicit
  2. Sub Worksheet_Activate()
  3.     'Worksheet_Activate: 選擇 **此工作表**的所觸動的事件程序
  4.     '---如有開啟2個視窗-------------------------------------------------
  5.     'MsgBox Windows(2).Selection.Address(, , , 1)  '第二個視窗 使用中儲存格
  6.     '--------------------------------------------------------------------
  7.     MsgBox Selection.Address(, , , 1)         '使用中視窗的 使用中儲存格
  8.    
  9.     'Worksheets("期中評量") 是物件  沒有Selection 這屬性
  10.    
  11.     With Worksheets("期中評量") '如不是**此工作表**
  12.         
  13.         .Activate
  14.         'Activate: 轉到"期中評量"  <--** 因有.Select 不然會出錯
  15.         .Range("A1:v2").Select
  16.         .Range("a3", .Cells(3, 1).End(xlDown)).Select
  17.         '.Selection.Locked = True
  18.         '.Selection.FormulaHidden = True
  19.         Selection.Locked = True
  20.         Selection.FormulaHidden = True
  21.         .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
  22.         'Protect: 是工作表的方法 前面加上 . 無須指定 ActiveSheet
  23.     End With
  24. End Sub
複製代碼

TOP

這是我所拜訪過,回應速度最快,態度最熱心的程式論壇,(只因我是用撥號上網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

本帖最後由 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

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

TOP

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

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



上圖 須有此設定

TOP

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