Board logo

標題: 請教一個用EXCEL按鈕填表的問題 [打印本頁]

作者: tku0216    時間: 2012-4-24 17:20     標題: 請教一個用EXCEL按鈕填表的問題

本帖最後由 tku0216 於 2012-4-24 17:56 編輯

各位大大好,請教一個用EXCEL按鈕填表的問題:
如附圖所示,我要按鈕之後,將某些資訊填入EXCEL表格(按鈕跟資訊都已設計好),
每按一下鈕,資料就會依序填入表格,但問題是,題號2-20題以後的程式該怎麼寫呢?

補上檔案連結,請參考,謝謝。
-----------------------------
http://db.tt/ipPHXMVM
--------------------------------
程式為 :
With Range("i23").End(xlUp)     '從i23開始往上判斷
    .Offset(1, 0) = Range("g24") '將g24的資料填入i23
    .Offset(1, 1) = Range("f6")     '將f6的資料填入j3
    End With
作者: register313    時間: 2012-4-24 17:35

回復 1# tku0216

活動廣告:幫助自己!也給答題者一個方便!
1.發問者請上傳EXCEL壓縮檔(小學生也可以)
2.配合EXCEL檔請把功能說明清楚


按鈕跟資訊都已設計好,為何不上傳?
要填入的資料在那些儲存格?不知道? 如何設計?
作者: register313    時間: 2012-4-24 18:17

回復 1# tku0216

你是要一次填入一題? 太麻煩了吧
  1. Sub aa()
  2. Set Rng = [I22]
  3. C = Application.CountA([I22], [N22], [S22], [X22], [AC22], [AH22])
  4. With Rng.Offset(0, C * 5).End(xlUp)
  5.   .Offset(1, 0) = [G24]
  6.   .Offset(1, 1) = [F6]
  7. End With
  8. End Sub
複製代碼

作者: tku0216    時間: 2012-4-24 23:32

感謝回覆,其實這是一個讓老師知道自己命題情形的表格,所以是一次只會填入一題沒錯。
本意是當老師選擇屬性、技能規範與難易度之後,按下按鈕會自動填入,減省手動填寫時間。
但目前此表只能依序往下填寫,您的程式碼我加進按鈕,發現無法運作,可以請教原因嗎?謝謝。
---------------------------------------------
Private Sub CommandButton1_Click()
Set Rng = [I22]
C = Application.CountA([I22], [N22], [S22], [X22], [AC22], [AH22])
With Rng.Offset(0, C * 5).End(xlUp)
  .Offset(1, 0) = [G24]
  .Offset(1, 1) = [F6]
End With
End Sub
--------------------------------------------
作者: register313    時間: 2012-4-24 23:53

回復 4# tku0216

沒問題的,再測試看看(你的檔案太大,無法上傳)

[attach]10648[/attach]
作者: tku0216    時間: 2012-4-25 09:39

多謝register的指教,程式運作正常,因為昨天是在家裡試,不曉得出了甚麼問題。
還有想請教您的程式碼,這三行的意思,謝謝:
--------------------------------------------
Set Rng = [I22]
C = Application.CountA([I22], [N22], [S22], [X22], [AC22], [AH22])
With Rng.Offset(0, C * 5).End(xlUp)
--------------------------------------------
作者: register313    時間: 2012-4-25 17:06

回復 6# tku0216

Set Rng = [I22]
'計算 I22, N22, S22, X22, AC22, AH22這6格有幾格不為空白
C = Application.CountA([I22], [N22], [S22], [X22], [AC22], [AH22])
'以I22為基準,向右偏移0列(C * 5)欄,再往上找第一個非空白儲存格
With Rng.Offset(0, C * 5).End(xlUp)

1. I22=""
    C=0
    I22向右偏移0欄(I22),再往上找第一個非空白儲存格 => 填I欄
2. I22<>"" 且 N22=""
    C=1
   I22向右偏移5欄(N22),再往上找第一個非空白儲存格 => 填N欄
3. I22<>"" 且 N22<>"" 且 S22=""
    C=2
    I22向右偏移10欄(S22),再往上找第一個非空白儲存格 => 填S欄
以此類推...
作者: tku0216    時間: 2012-4-25 17:58

多謝大大分享,我完全瞭解程式了。
想再請教附帶的小問題:
1.Set Rng = [I22]  '代表設定儲存格I22為基準,以利後續的欄位轉換。
換成“Set Rng = Range("i22")”的意義是否一樣?(試過程式一樣可以正確工作)

2.需要呼叫excel函式時,是否都是以Application開頭?
作者: Hsieh    時間: 2012-4-25 21:55

本帖最後由 Hsieh 於 2012-4-27 14:08 編輯
  1. Private Sub CommandButton1_Click()
  2. Dim Rng As Range, A As Range, C As Range
  3. Dim k%, x%, y%, n%, s%, m$
  4. Set Rng = Range("I3:I22,N3:N22,S3:S22,X3:X22,AC3:AC22,AH3:AH22")  '填寫區域
  5. k = Application.CountA(Rng) '計算填寫區域以填寫數量
  6. x = IIf((k + 1) Mod 20 = 0, 20, (k + 1) Mod 20)  '計算數量求其除以20的餘數,即為將被填寫的列號
  7. y = Int((k - 1) / 20) + 1 + IIf(x = 1, 1, 0)  '計算出第幾欄將被填寫
  8. Set A = Rng.Areas(y).Cells(x)  '將被填寫的儲存格
  9. n = [B17:B21].Find(ComboBox1).Row  '屬性
  10. s = ScrollBar2.Value + 2 '難易度
  11. For Each C In [C3:C6] '技能規範
  12.   If C <> "" Then m = IIf(m = "", C, m & "+" & C)
  13. Next
  14. Cells(n, s) = Cells(n, s) + 1  '寫入出題數量
  15. A.Resize(, 2) = Array(m, ComboBox1)  '填入表格
  16. End Sub
複製代碼

作者: tku0216    時間: 2012-4-27 11:21

Hsieh大大,不好意思,有點難懂,可否提供註解?
我只看得懂:
第五行:計算非零儲存格,k=0。
第六行:x=iif(1 mod 20=0, 20,1), 所以x=1。
第七行:y=Int((-1) / 20) + 1 + IIf(x = 1, 1, 0)??
之後就看不懂了...




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