Board logo

標題: 請教語法上的問題? [打印本頁]

作者: skyutm    時間: 2018-4-19 20:19     標題: 請教語法上的問題?

各位先進大家好!約莫六年前小弟開始學習vba語法,為的是設計一個可以計算成績的excel檔,

但是後來成績系統都已經改成網路化了,所以我的 excel檔就擱置了,一直到了最近。因為

成績系統改版,所以我又把excel檔拿出來使用了,但是人事已非,我完全忘了語法怎麼使用。

想請教一個語法問題:我想要在打開「總成績」的工作表時,「總成績」的c2欄位就會自動複製

「國平時」工作表的Q2:Q22的數值,所以寫了下列語法,但是不知哪裡有錯,還請指正。感謝

Sub 自動複製成績()
Sheets("國平時").Range("Q2:Q22").Select
Selection.Copy
Sheets("總成績").Range("C2").Select
ActiveSheet.Paste
End Sub
作者: iamaraymond    時間: 2018-4-19 22:09

回復 1# skyutm

要先切換工作表,所以要多一句Sheets("總成績").Activate,完整程式碼:
  1. Sub 自動複製成績()
  2. Sheets("國平時").Range("Q2:Q22").Select
  3. Selection.Copy
  4. Sheets("總成績").Activate
  5. Sheets("總成績").Range("C2").Select
  6. ActiveSheet.Paste
  7. End Sub
複製代碼

作者: GBKEE    時間: 2018-4-20 06:43

回復 1# skyutm
  1. '******ThisWorkbook模組的程式碼********
  2. Option Explicit

  3. '**活頁簿開啟時自動執行
  4. Private Sub Workbook_Open()
  5.     自動複製成績
  6. End Sub
  7. '**活頁簿:工作表中移動時自動執行
  8. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  9.     If Sh.Name = "總成績" Then 自動複製成績
  10. End Sub
  11. Sub 自動複製成績()
  12.     Sheets("國平時").Range("Q2:Q22").Copy Sheets("總成績").Range("C2")
  13. End Sub
複製代碼

作者: skyutm    時間: 2018-4-20 17:16

回復 5# skyutm
感謝兩位先進的解答,小弟測試之後果然可以執行,但是問題又來了,

因為前面所說的「國平時」工作表的q2到22欄位是由前面算出平均的,

所以在「總成績」複製之後會出現=AVERAGE(#REF!)這樣的訊息,我推測應該是

應該更換了工作表,所以算不出成績,不知該如何解決呢?謝謝。
作者: iamaraymond    時間: 2018-4-20 19:19

回復 6# skyutm

這種複製方法是複製相對位置,請問S大是只要複製數字就好嗎?
作者: skyutm    時間: 2018-4-20 21:04

回復 7# iamaraymond


  
是的!它應該複製到公式了。我剛剛也在網路上尋找,是否有選擇性貼上的語法嗎?
作者: iamaraymond    時間: 2018-4-20 21:20

回復 8# skyutm
  1. Sub 自動複製成績()
  2. Sheets("國平時").Range("Q2:Q22").Copy
  3. Sheets("總成績").Activate
  4. Sheets("總成績").Range("C2").PasteSpecial Paste:=xlPasteValues
  5. End Sub
複製代碼

作者: skyutm    時間: 2018-4-20 21:34

回復 9# iamaraymond

感謝您的幫助,可是程式碼無法自動執行ㄝ,我來整合看看。
作者: skyutm    時間: 2018-4-20 21:44

回復 10# skyutm

哈哈!真是有趣。我把程式碼整合在一起就可以了。

'******ThisWorkbook模組的程式碼********
Option Explicit

'**活頁簿開啟時自動執行
Private Sub Workbook_Open()
    自動複製成績
End Sub
'**活頁簿:工作表中移動時自動執行
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "總成績" Then 自動複製成績
End Sub
Sub 自動複製成績()
Sheets("國平時").Range("s2:s22").Copy
Sheets("總成績").Activate
Sheets("總成績").Range("C2").PasteSpecial Paste:=xlPasteValues
End Sub
作者: iamaraymond    時間: 2018-4-20 21:45

回復 10# skyutm

應該把程式加入版主的程式就OK了
作者: GBKEE    時間: 2018-4-21 08:53

本帖最後由 GBKEE 於 2018-4-21 09:03 編輯

回復 11# skyutm
貼上值
  1. Sub 自動複製成績()
  2.     Dim Rng As Range
  3.     With Sheets("國平時").Range("Q2:Q22")  '有固定人數嗎?
  4.         Set Rng = Sheets("總成績").Range("C2").Resize(.Cells.Count)
  5.         Rng = .Value
  6.     End With
  7.     With Rng
  8.         .Cells(.Cells.Count + 1) = "=AVERAGE(" & Rng.Address & ")"
  9.     End With
  10. End Sub
複製代碼
'整個複製
  1. Sub 自動複製成績()
  2.     With Sheets(1).Range("國平時").Range("Q2:Q22")  '有固定人數嗎?
  3.          .Copy Sheets("總成績").Range("C2").Resize(.Cells.Count)
  4.          Sheets("總成績").Range("C2").Cells(.Cells.Count + 1) = "=AVERAGE(" & Sheets(2).Range("C2").Resize(.Rows.Count).Address & ")"
  5.     End With
  6. End Sub
複製代碼

作者: skyutm    時間: 2018-4-21 16:09

回復 13# GBKEE

哇!感謝版主,果然是有深度的語法。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)