iT邦幫忙

2

excel vba 按下按鈕後 如何將 表單內的資料 儲存入 想對應的行中?

我現在有用個 按鈕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

求解惑 謝謝.

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
海綿寶寶
iT邦大神 1 級 ‧ 2018-02-04 16:15:00
最佳解答

按鈕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 
xweb999 iT邦新手 5 級 ‧ 2018-02-04 19:02:58 檢舉

海綿大你好,那如果我是要用B按鈕 去對應我想要的"行" 該如何寫?
目前卡在 例如A按鈕 輸入了 三筆不同資料 ( 1 2 3 行)
而B按鈕的第一筆資料 想對應在 第2行 第二筆想對應在第3行
還需要增加哪種變數?

最簡單的做法,增加「想對應的列數」的變數
例如:第3列就輸入 3
這樣就可以任意對應了

0
小魚
iT邦大師 1 級 ‧ 2018-02-03 11:57:48

因為你是判斷D空白啊,
在這個地方

For i1 = 2 To 100000
    If Range("D" & i1).Value = "" Then Exit For
Next i1

除非你要判斷A有文字的最後一個
(就是空白的前一個)
再填到DEF裡面,
但是如果每次需求不一樣,
就很難用程式去判斷了.

xweb999 iT邦新手 5 級 ‧ 2018-02-04 19:03:38 檢舉

目前B按鈕寫法 的確都是對應在空白qq

1
賽門
iT邦超人 1 級 ‧ 2018-02-03 20:34:54

你可以找個位置, 例如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

提供你參考.

0
tn353780
iT邦新手 5 級 ‧ 2018-02-04 20:59:10

按鈕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應該對應的值

xweb999 iT邦新手 5 級 ‧ 2018-02-04 22:00:24 檢舉

我B按鈕還需變動嗎 還是改A就好? ty

xweb999 iT邦新手 5 級 ‧ 2018-02-04 22:02:33 檢舉

喔喔 看懂了 我試試看~

我要發表回答

立即登入回答