• 2

Excel VBA請益

小揮 wrote:
人員存檔關閉檔案後


樓主,終於等到您這句了~~原來是把檔案(表單)關閉了~~所以下次開啟,才有必要去抓取最新一筆資料。

小揮 wrote:
是否能讓表單內的textbox自動抓取上次人員輸入的值

可以喔,樓主可以在
Private Sub UserForm_Activate() '表單開啟初始化'
這句的後面,加上抓取的程式。


底下是完整的程式碼:

Private Sub UserForm_Activate() '表單開啟初始化'
ComboBox1.AddItem "彭湘云"
ComboBox1.AddItem "吳振宏"
ComboBox1.AddItem "潘國均"
ComboBox1.AddItem "羅國菘"
ComboBox1.AddItem "張益誠"
ComboBox1.AddItem "徐明義"

If Range("A5") <> "" Then '如果A4往下已經有輸入資料,就執行「自動抓取上次人員輸入的值」
Range("A4").Select '輸入游標(作用儲存格)先放在A4格
Selection.End(xlDown).Select '作用格移到資料最底下(最新,上次人員輸入的資料列)
'MsgBox ActiveCell.Row '顯示目前作用格所在列數 ,除錯用
'以下不使用offset位移

Tb1 = Range("b" & ActiveCell.Row)
ComboBox1.Value = Range("c" & ActiveCell.Row)
Tb2 = Range("d" & ActiveCell.Row)
Tb3 = Range("e" & ActiveCell.Row)
Tb23 = Range("f" & ActiveCell.Row)
Tb24 = Range("g" & ActiveCell.Row)
Tb25 = Range("h" & ActiveCell.Row)
Tb26 = Range("i" & ActiveCell.Row)
Tb27 = Range("j" & ActiveCell.Row)
Tb29 = Range("l" & ActiveCell.Row)
Tb30 = Range("m" & ActiveCell.Row)
Tb31 = Range("n" & ActiveCell.Row)
Tb32 = Range("o" & ActiveCell.Row)
Tb33 = Range("p" & ActiveCell.Row)
Tb34 = Range("q" & ActiveCell.Row)
Tb35 = Range("r" & ActiveCell.Row)
Tb36 = Range("s" & ActiveCell.Row)
Tb37 = Range("t" & ActiveCell.Row)
Tb38 = Range("u" & ActiveCell.Row)
Tb39 = Range("v" & ActiveCell.Row)
Tb4 = Range("w" & ActiveCell.Row)
Tb5 = Range("x" & ActiveCell.Row)
Tb6 = Range("y" & ActiveCell.Row)
Tb7 = Range("z" & ActiveCell.Row)
Tb8 = Range("aa" & ActiveCell.Row)
Tb9 = Range("ab" & ActiveCell.Row)
Tb10 = Range("ac" & ActiveCell.Row)
Tb11 = Range("ad" & ActiveCell.Row)
Tb12 = Range("ae" & ActiveCell.Row)
Tb13 = Range("af" & ActiveCell.Row)
Tb14 = Range("ag" & ActiveCell.Row)
Tb15 = Range("ah" & ActiveCell.Row)
Tb16 = Range("ai" & ActiveCell.Row)
Tb17 = Range("aj" & ActiveCell.Row)
Tb18 = Range("ak" & ActiveCell.Row)
Tb19 = Range("al" & ActiveCell.Row)
Tb20 = Range("am" & ActiveCell.Row)
End If
End Sub

樓主試試結果,回報看看?
Der,misser1
小揮 wrote:
目前使用(-3,0)剛剛好可以符合要求,可以的話,可以稍微跟我說明一下嗎~?

樓主,您在寫入資料時,用了:
..........
Else '----如果A5不是空白(代表已有輸入資料)
Range("A4").Select '-----作用儲存格移到A4
Selection.End(xlDown).Select '------作用儲存格跳到現有資料的最底下一列。(再往下就是空白列了)
With ActiveCell.Offset(-3, 0) '-------作用儲存格往上調(跳)3列
.Range("A5") = Date '----將目前作用儲存格的所在列,往下數5列,A欄開始輸入資料.....
..........

假設目前最後一筆資料是第10列(A10有資料,而A11是空白).....
一般來說,執行到Selection.End(xlDown).Select 就已經差不多了,游標已經放在資料最底列(第10列),這時只要游標再往下一列,就是新空白列(11列),可以在該列新增一筆(次)資料。(.....程式再往後的跳列其實有點「多餘」,沒必要)

可是樓主您用了:With ActiveCell.Offset(-3, 0) ...........代表作用儲存格要往上調(跳)3列,輸入點變成了10-3=第7列(這時底下的8、9、10列都是有資料的)
還好您沒馬上指定要丟資料到輸入點所在列(模擬往上-3),不然第7列的資料就會被新增的資料取代......

您後面是用了.Range("A5") = Date ........代表要在目前A7(前面用ActiveCell.Offset(-3, 0)的結果),開始起算往下5列(就是把目前的格子--A7,當成A1,然後取A5的相對位置),所以實際就是A7往下,移到A11,輸入Date
後面的.Range("B5") = Tb1.........代表以ActiveCell.Offset(-3, 0)---A7---取相對位置B5(就是A7往下5列,B欄)放進Tb1.....

有點複雜不是?......所以其實不用搞成這麼複雜啊,您可以參考一下我上面修改的:讀取上次最後一筆資料到TextBox內容,反向修改成:將Textbox的資料送到工作表中~~~不需要用offset(-3),模擬跳來跳去,這麼刺激~~(數錯數字,跳錯就糟糕了...........)

樓主有時間不妨google ActiveCell.Offset 看看,網路應該有很多範例可看。

以上回覆,希望有幫助到樓主喔~~
Der,misser1
剛剛依大大的方式,已經會將資料開啟表單的時候,自動抓儲存格的值到Textbox了

依大大的意思,應該是使用

Range("A4").Select '-----作用儲存格移到A4
Selection.End(xlDown).Select '------作用儲存格跳到現有資料的最底下一列。(再往下就是空白列了)

range(''a" & activecell.row+1) = tb 這樣以此類推嗎? (不知道是否有誤解)

剛開始學習,我會再上網找找範本(沒有底子,有時候很難完全理解方法或屬性的用法)
小揮 wrote:
range(''a" & activecell.row+1) = tb 這樣以此類推嗎?


樓主要不要「大膽」的實際執行看看?.......只要您的檔案不要按下儲存,所做的內容修改都不用擔心,搞砸了大不了檔案關閉(不存檔),然後重開檔案,一切重來囉。

加油!
Der,misser1
看起來這個語法,也是可行的


另外想請教一下,在VBA內部,有辦法邊改程式碼,邊開者表單嗎?

(目前需要常常切換來找相對應物件的name,我才可以在程式裡面填寫,有點不方便)
小揮 wrote:
有辦法邊改程式碼,邊開者表單嗎


請參考下圖喔~~(抱歉,該畫面是選「垂直並排」,畫面圈選處有誤)
Der,misser1
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?