我現在有用個 按鈕A 能將 表單 框格1,2,3 內的資料 存入 儲存格 A B C (框格1是自動帶出來的編碼 每次都會不同 例如18020311 這樣)
然後按鈕B 能將表單 框格4,5,6內的資料 存入 儲存格 D E F
(該功能 是要用於 出勤系統)
因為我寫個判斷是 A跟B按鈕 按下去 補滿1行ABCDEF 後 就會往第2行儲存
但目前遇到問題是 (例)若1行已填滿需要欄位 按A扭 不小心多按兩下的話 則會儲存成 2行ABC跟3行ABC (不知道多按情況下)
然後在在按B扭 會儲存到第2行 DEF,在按A扭 他則會出現在4行ABC ,接下來我在按B扭 想把資料存到 第4行的DEF 他卻填到3行 DEF的欄位 (有測試過 因3行DEF是空白 則會填上去.)
我如何讓B按鈕 按下去 能對應 想對應的 "行" D E F (像上面例子的 想填入在第4行)?
按鈕A
Windows("系統DATA1").Activate
Workbooks.Open "C:\DATA\DATA1.xls"
' Workbooks.Open Filename:="C:\DATA\DATA1.xls"
For i1 = 2 To 100000
If Range("A" & i1).Value = "" Then Exit For
Next i1
Sheets("DATA").Range("A" & i1) = CB1.Text
Sheets("DATA").Range("B" & i1) = TBName.Text
Sheets("DATA").Range("C" & i1) = TBList.Text
Sheets("DATA").Range("E" & i1) = CB3.Text
Sheets("DATA").Range("H" & i1).Value = Now()
Sheets("DATA").Range("H" & i1).NumberFormatLocal = "e/m/d hh:mm:ss"
ActiveWorkbook.Save
ActiveWorkbook.Close
按鈕B
Windows("系統DATA1").Activate
Workbooks.Open "C:\DATA\DATA1.xls"
' Workbooks.Open Filename:="C:\DATA\DATA1.xls"
For i1 = 2 To 100000
If Range("D" & i1).Value = "" Then Exit For
Next i1
Sheets("DATA").Range("D" & i1) = CBName.Text
Sheets("DATA").Range("F" & i1) = CB2.Text
Sheets("DATA").Range("G" & i1) = TBData.Text
Sheets("DATA").Range("I" & i1).Value = Now()
Sheets("DATA").Range("I" & i1).NumberFormatLocal = "e/m/d hh:mm:ss"
ActiveWorkbook.Save
ActiveWorkbook.Close
不知道我這樣打 會不會太繁雜QQ
求解惑 謝謝.
按鈕B
Windows("系統DATA1").Activate
Workbooks.Open "C:\DATA\DATA1.xls"
For i1 = 2 To 100000
If Range("A" & i1).Value = "" Then Exit For
Next i1
i1 = i1 - 1 '對齊欄 A 最後一列
Sheets("DATA").Range("D" & i1) = CBName.Text
Sheets("DATA").Range("F" & i1) = CB2.Text
Sheets("DATA").Range("G" & i1) = TBData.Text
Sheets("DATA").Range("I" & i1).Value = Now()
Sheets("DATA").Range("I" & i1).NumberFormatLocal = "e/m/d hh:mm:ss"
ActiveWorkbook.Save
ActiveWorkbook.Close
因為你是判斷D空白啊,
在這個地方
For i1 = 2 To 100000
If Range("D" & i1).Value = "" Then Exit For
Next i1
除非你要判斷A有文字的最後一個
(就是空白的前一個)
再填到DEF裡面,
但是如果每次需求不一樣,
就很難用程式去判斷了.
你可以找個位置, 例如Range("X1")填寫按鈕A寫到那行的行號,按鈕B去取那個位置即可。
例如按鈕A最後是
Sheets("DATA").Range("I" & i1).NumberFormatLocal = "e/m/d hh:mm:ss"
Sheets("DATA").Range("X1") = i1
ActiveWorkbook.Save
按鈕B一開始改成
i1 = Sheets("DATA").Range("X1")
Sheets("DATA").Range("D" & i1) = CBName.Text
提供你參考.
按鈕A︰
for i1 = 2 to 100000
If Range("A" & i1).value="" and ActiveCell.offset(-1,1).value <> "" Then Exit For
next i1
if i1 > 100000 then exit sub '重覆按下按鈕A
其中,offset內 -1, 1為判斷上次按鈕A後未配對到後面應該按下按鈕B,避免重覆按下按鈕A造成多行按鈕B未按產生之空白的值
按鈕B︰
If Range("A" & i1).value="" or ActiveCell.offset(0,-1~-3).value = 按鈕B對應的值 Then Exit For
其中,offset內 0,-1~-3 為按鈕A在欄A、B、C的值,該值可用來確認按鈕B應該對應的值