返回列表 上一主題 發帖

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

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

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

我又學到一招了,我一直以為中文字要加""才行,不然電腦會出現錯誤!

TOP

本帖最後由 c_c_lai 於 2012-9-9 09:47 編輯

回復 24# skyutm
沒錯!變數或者是函式是可以以中文字來表現的, 譬如:
  1. Option Explicit
  2. Public Ar, 圖表底色
  3. Public Const 資料數區 = "A8:F8"
  4. 'Public Const 圖表底色 = 6

  5. Private Sub Auto_Open()
  6.     Sheets("Omega").Activate
  7.     控制項
  8. End Sub

  9. Private Sub Auto_Close()
  10.     Sheets("Omega").Activate
  11.     控制項
  12.     ThisWorkbook.Save
  13. End Sub

  14. Private Sub 控制項()
  15.     ' ...........
  16. End Sub
複製代碼
是比較易於清晰易懂,但如果該程式用於其它國家地域的話
會造成困擾的 (變成亂碼)。

TOP

請教一下,這算是vba的語法嗎?因為裡面有中文字?這是我從vba專案裡頭複製出來的一部份
Sub Worksheet_Deactivate()
     原年級 = Val(Cells(12, 2))
     新年級 = Val(Cells(1, 18))
     Cells(12, 2) = 新年級
  If 新年級 > 2 And Cells(14, 20) <> 0 Then '強迫3~6年級時,基本工作表 T14儲存格值為0
     Cells(14, 20) = 0
  End If

TOP

回復 22# luhpro


    恩!果然看起來舒服多了

TOP

回復 21# skyutm
善用 With 與 縮排(次一級區塊內的程式左方多幾個空格) 會讓程式更容易閱讀與維護:
  1. Sub Worksheet_Activate()
  2.     '個人成績單標題列↓'
  3.     Dim a, b, c, x, y
  4.    
  5.     With Sheets("基本設定")
  6.       a = .Range("j1").Value
  7.       b = .Range("j2").Value
  8.       c = .Range("j3").Value
  9.     End With
  10.    
  11.     d = Fix(c / 2)
  12.    
  13.     For i = 0 To d
  14.       With Sheets("期中評量")
  15.         x = .Range("a" & 3 + i * 2).Value
  16.         y = .Range("b" & 3 + i * 2).Value
  17.         x1 = .Range("a" & 4 + i * 2).Value
  18.         y1 = .Range("b" & 4 + i * 2).Value
  19.       End With
  20.    
  21.       With Sheets("期中成績單")
  22.         .Range("a" & 1 + 12 * i).Value = a & "年" & b & "班 期中評量 成績單" & "(" & x & ")" & y
  23.         .Range("o" & 1 + 12 * i).Value = a & "年" & b & "班 期中評量 成績單" & "(" & x1 & ")" & y1
  24.       End With
  25.     Next i
  26.     '個人成績單標題列↑'
  27. End Sub
複製代碼

TOP

抱歉!分享一下,我想出來的語法是這樣,結果試了也沒問題。
Sub Worksheet_Activate()
    '個人成績單標題列↓'
    Dim a, b, c, x, y
    a = Sheets("基本設定").Range("j1").Value
    b = Sheets("基本設定").Range("j2").Value
    c = Sheets("基本設定").Range("j3").Value
    d = Fix(c / 2)
    For i = 0 To d
    x = Sheets("期中評量").Range("a" & 3 + i * 2).Value
    y = Sheets("期中評量").Range("b" & 3 + i * 2).Value
    x1 = Sheets("期中評量").Range("a" & 4 + i * 2).Value
    y1 = Sheets("期中評量").Range("b" & 4 + i * 2).Value
    Sheets("期中成績單").Range("a" & 1 + 12 * i).Value = a & "年" & b & "班 期中評量 成績單" & "(" & x & ")" & y
    Sheets("期中成績單").Range("o" & 1 + 12 * i).Value = a & "年" & b & "班 期中評量 成績單" & "(" & x1 & ")" & y1
    Next i
    '個人成績單標題列↑'
End Sub

TOP

回復 19# GBKEE
報告版主大人,小弟我又遇到瓶頸了,因為在個人成績單輸出方面遇到問題,總成績單已經完成,也就是說資料如下:
座號  姓    名  國語  英語  數學  自然  社會
001  某某某   90      100    85      75     90
但在次頁的個人成績單,我想輸出成為a4頁大小,每頁有8筆資料,我知道最簡單卻麻煩的方法,就是把每筆成績,利用相對應的位置,輸入到個人成績欄位,但是無法控制資料的數量,因為有幾筆成績,是由「基本設定」工作表的班級人數欄控制的,該怎麼辦呢?有沒有其他的構想呢?附上檔案以便參考!

TOP

回復 18# skyutm
Application.Transpose(ar) 是使用工作表 轉置函數  本帖 10# 已有介紹如何使用工作表
對於不懂的VBA  方法, 屬性, 函數 可多看 VBA中的說明練習它的範例 會進步的
這有整理   新手 VBA 入門常見問題

TOP

回復 17# GBKEE
抱歉又打擾了!因為最近遇到一些結解不開。所以就把語法重新整理一下,因為當初多是靠別人幫忙的,所以有些一知半解,知道版主功力深厚,特來請教一下,如有叼擾,還請見諒。就是這一句
    '期中評量自動輸入座號↓'  (這我知道)
    If Intersect(Target, [J1:J3]) Is Nothing Or [j3] = 0 Then Exit Sub  (我只知道後面:如果沒填資料或j3是0 語法就不執行,但前面不懂)
    ReDim ar(1 To [j3])    (不懂)
    YC = [j1] & Format([j2], "00")   (不懂)
    For i = 1 To [j3]   (瞭解)
    ar(i) = YC & Format(i, "00")  (不懂)
    Next   (瞭解)
    With Sheets("期中評量")    (瞭解)
    .Cells.Rows.Hidden = False  (所有儲存格不隱藏)
    .Cells.Columns.Hidden = False  (所有儲存格不隱藏)
    .[A:A] = ""  (不懂)
    .[a3].Resize([j3], 1) = Application.Transpose(ar)  (不懂)
    .Range("W1", .Cells(1, .Columns.Count)).EntireColumn.Hidden = True(w1到總計幾列都隱藏)
    .Range(.[a3].Offset([j3], 0), .Cells(Rows.Count, 1)).EntireRow.Hidden = True  (不懂)
    .Range("a1").Value = "座號"   (瞭解)
    End With   (瞭解)
    '期中評量自動輸入座號↑'  (瞭解)

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題