Cách tạo Form nhập dữ liệu trong excel

Liên hệ QC

mrhuacb

Thành viên mới
Tham gia
27/5/10
Bài viết
14
Được thích
0
Tôi muốn tạo một form ,Trên đó có một Textbox dùng cho người dùng nhập dữ liệu , một command button để sau khi click vào thì số liệu người dùng nhập vào Textbox trên sẽ được nhập tự động(cộng) đến các ô cụ thể như C6, D8, D10, F5 trong sheet cụ thể, mong anh chị giúp đỡ. connect026@yahoo.com. Thực ra tôi cần 20 textbox và 20commandbutton như vậy,

Xin được trình bày là Tôi muốn tạo một textbox để nhập số tiền nhưng các command button đó sẽ định hướng là số tiền sẽ được cộng vào những ô cụ thể ví dụ , tôi nhập 2000 vào textbox và bấm command button 1 thì 2000 sẽ được cộng vào các ô như A2 ,A3 ,B4, C5 , nhưng nếu tôi nhập 2000 vào textbox mà tôi lại bấm command button2 thì nó lại cộng 2000 vào các ô khác , xin chân thành cảm ơn
 

File đính kèm

  • delaptreinh.xls
    25 KB · Đọc: 1,098
  • anh2.jpg
    anh2.jpg
    91 KB · Đọc: 327
Chỉnh sửa lần cuối bởi điều hành viên:
Xin cảm ơn anh đã giúp đỡ nhưng , khi tôi bấm nhập lần thứ 2 thì nó không những không cộng thêm mà lại xoá mất dữ liệu của lần nhập trước, mong anh giúp đỡ
 
Upvote 0
Xin được trình bày là Tôi muốn tạo một textbox để nhập số tiền nhưng các command button đó sẽ định hướng là số tiền sẽ được cộng vào những ô cụ thể ví dụ , tôi nhập 2000 vào textbox và bấm command button 1 thì 2000 sẽ được cộng vào các ô như A2 ,A3 ,B4, C5 , nhưng nếu tôi nhập 2000 vào textbox mà tôi lại bấm command button2 thì nó lại cộng 2000 vào các ô khác , xin chân thành cảm ơn

Qua tin nhắn riêng và cái "hình" ở trên, tôi sơ bộ có thể hiểu được ý bạn. Bây giờ bạn làm thê`1 này nhé
1/ Tạo một mảng Option, mỗi một option khi chọn nó thì sau khi kích nút NhapLieu sẽ làm nhiệm vụ ghi vào các ô cố định
2/ Vẽ 4 textbox và 1 command. Xử lý sự kiện click của command đó tùy thuộc vào option nào được chọn
Bạn hiểu ý chư
Làm theo hướng này rồi gặp khó khăn gì ta gỡ tiếp
Mong rằng qua cách bạn tự làm, bạn sẽ hiểu sâu vấn đề hơn
Chúc vui
Thân

Nói thêm : Nếu mỗi lần nhập chỉ nhập một dữ liệu chung cho tất cả các ô thì thực tế chỉ cần 1 textbox là đủ. Bạn xem thêm cái ví dụ này sẽ biết cách làm
Thân
 

File đính kèm

  • NhapLieu.xls
    34 KB · Đọc: 1,538
  • NhapLieu - 1textbox.xls
    32.5 KB · Đọc: 1,297
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em chào anh ThanhPhuong , cảm ơn anh đã nhiệt tình giúp đỡ, nhân tiện gặp cao thủ anh giúp em một lần nữa nhé, em muốn các ô khi có giá trị là 4 con số thì sẽ tự động chuyển thành mầu đỏ, anh vui lòng giúp em với nhé
 
Upvote 0
Em chào anh ThanhPhuong , cảm ơn anh đã nhiệt tình giúp đỡ, nhân tiện gặp cao thủ anh giúp em một lần nữa nhé, em muốn các ô khi có giá trị là 4 con số thì sẽ tự động chuyển thành mầu đỏ, anh vui lòng giúp em với nhé
cái này minh nghĩ không khó với bạn chứ nhỉ? nếu viết code thì có code:
'gia su co vung du lieu tu a1: j9
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
For Each rng In ActiveSheet.Range("a1:j9")
If rng.Value >= 1000 Then
rng.Interior.ColorIndex = 3
Else
rng.Interior.ColorIndex = 0
End If
Next
End Sub
'PM : đây là mình viết tính cho 4 con số trở lên ( tính cả 5,6.. con số trở lên) tiếp theo bạn tự biết phải làm gì nếu nhất thiết chỉ lấy điều kiện là 4 con số.
 
Lần chỉnh sửa cuối:
Upvote 0
Các anh giúp em một chút nữa nhé em muốn tạo một command button để copy những cell nào có giá trị vượt quá 1500(copy phần thừa của 1500) sang một sheet mới và đồng thời chỉ để lại 1500 ở cell hiện tại.
 
Upvote 0
cái này minh nghĩ không khó với bạn chứ nhỉ? nếu viết code thì có code:

'PM : đây là mình viết tính cho 4 con số trở lên ( tính cả 5,6.. con số trở lên) tiếp theo bạn tự biết phải làm gì nếu nhất thiết chỉ lấy điều kiện là 4 con số.
Gởi Khoa:
Đừng lạm dụng VBA quá, nhất là VBA gán vào các sự kiện Worksheet_Change, Worksheet_SelectionChange. Hơi nhúc nhích gì trong sheet là chạy code. Nếu vùng dữ liệu vài ngàn dòng là khỏi làm gì luôn. Đã thế lại còn dùng vòng lặp nữa chứ.

Cái vụ này dùng Conditional Format là đủ. Nếu dữ liệu nhiều, Conditional Format có thể làm nặng file, thì dùng code nhưng lâu lâu chạy 1 lần, thí dụ worksheet_Activate, workbook_BeforeSave, ...

Còn file vídụ.xls bài #12, sao phải ghi ra cột K, L làm gì? sao không ghi thẳng vào sheet2?
 
Upvote 0
Gởi Khoa:
Đừng lạm dụng VBA quá, nhất là VBA gán vào các sự kiện Worksheet_Change, Worksheet_SelectionChange. Hơi nhúc nhích gì trong sheet là chạy code. Nếu vùng dữ liệu vài ngàn dòng là khỏi làm gì luôn. Đã thế lại còn dùng vòng lặp Trả Lời Với Trích Dẫnnữa chứ.

Cái vụ này dùng Conditional Format là đủ. Nếu dữ liệu nhiều, Conditional Format có thể làm nặng file, thì dùng code nhưng lâu lâu chạy 1 lần, thí dụ worksheet_Activate, workbook_BeforeSave, ...

Còn file vídụ.xls bài #12, sao phải ghi ra cột K, L làm gì? sao không ghi thẳng vào sheet2?
Dạ cảm ơn bác nhiều ạ.
Bác PTM ơi cái khoản Conditional Format thì em có thể làm được rùi còn cái khoản mà không dùng vòng lặp thì em chưa sành lắm nên cứ đi theo lối mòn bác ạ, nếu có thể bác cho bọn em các ví dụ cụ thể để em và mọi người học hỏi thêm bác nhé, em nghĩ mãi không được..
Chân thành cảm ơn bác nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Khoa thử bằng AutoFilter >=1000, rồi SpecialCell xem.
 
Upvote 0
Em rất cảm ơn Anh Khoa , nó cũng đưa ra một hướng rất tốt để giải quyết công việc của mình , tuy nhiên trong sheet1 của em có thể có đến 100 số, và em muốn chỗ thừa của 1500 (sheet1) được copy vào các cell tương ứng ở sheet2, mong anh giúp đỡ
 
Upvote 0
Em rất cảm ơn Anh Khoa , nó cũng đưa ra một hướng rất tốt để giải quyết công việc của mình , tuy nhiên trong sheet1 của em có thể có đến 100 số, và em muốn chỗ thừa của 1500 (sheet1) được copy vào các cell tương ứng ở sheet2, mong anh giúp đỡ
vẫn làm theo cách cũ đó thì làm như trong file .
PM: sửa lại file theo chỉ dẫn của bác PTM
 
Lần chỉnh sửa cuối:
Upvote 0
Tuy nhiên vẫn chưa nghĩ được ra cách chuyển trực tiếp dữ liệu sang sheet2 như bác PTM nói
Thay câu này

rng.Offset(, 10).Value = rng.Value - 1500

bằng:

Sheet2.Range(rng.Address) = rng.Value - 1500

Xoá các câu lênh thừa.

Nhưng vẫn dùng vòng lặp? Sao không dùng filter - special cell Visible?
 
Upvote 0
Bác ơi Cháu lại học thêm được một cái rồi, đúng là tuyệt diệu. thế mà cháu nghĩ cách chuyển sang mãi không được.
Cảm ơn bác nhiều ạ.
- Cháu đang tìm hiểu dần nên chưa kịp làm bác ạ.
 
Upvote 0
vẫn làm theo cách cũ đó thì làm như trong file .
PM: sửa lại file theo chỉ dẫn của bác PTM
Xem file này nhé... Tôi chẳng dùng vòng lập và bất cứ cột phụ nào
PHP:
Private Sub CommandButton1_Click()
  With Sheet1.Range([A1], [A65536].End(xlUp))
    With Intersect(.Offset(1), .Cells)
      .Value = Evaluate(.Address & "-1500")
    End With
    .AutoFilter 1, ">0"
    .Copy Sheet2.Range("A1")
    .SpecialCells(12).Value = 1500
    .AutoFilter 1, "<0"
    Range("A1").Copy
    Intersect(.Offset(1), .SpecialCells(12)).PasteSpecial 3, 2
    .AutoFilter: Range("A1").Select
  End With
End Sub
Trong đó:
- Dữ liệu nhập từ A2 trở xuống
- Cell A1 có giá trị = 1500 và dùng làm tiêu đề cho AutoFilter
 

File đính kèm

  • VD.xls
    38.5 KB · Đọc: 204
Upvote 0
[ndu96081631;244494]
hình như code này không cho phép người dùng bổ sung dữ liệu rùi Anh Ndu ơi. nếu người dùng muốn bổ sung thêm dữ liệu hoặc nhỡ tay bấm nhầm hai lần nút Cmd thì tèo mất. Anh xem lại chút nhé.
PM: Anh làm kiểu gì mà kích vào cell a1 thì hiện lên 1500 còn ko kích gì thì thấy tên là số liệu vậy ạ. anh giải thích luôn em với nhé.
Thank bác. nhiều khi ngớ ngẩn ko nhớ ra cái Custom Format này
 
Lần chỉnh sửa cuối:
Upvote 0
hình như code này không cho phép người dùng bổ sung dữ liệu rùi Anh Ndu ơi. nếu người dùng muốn bổ sung thêm dữ liệu hoặc nhỡ tay bấm nhầm hai lần nút Cmd thì tèo mất. Anh xem lại chút nhé.
Đây là thuật toán ---> Phát triển thêm thế nào là tùy các bạn (chẳng hạn bẩy lỗi bấm Cmd 2 lần)
Ở đây tôi chỉ "nhấn mạnh" việc dùng PasteSpecial\Add và AutoFilter thôi
PM: Anh làm kiểu gì mà kích vào cell a1 thì hiện lên 1500 còn ko kích gì thì thấy tên là số liệu vậy ạ. anh giải thích luôn em với nhé
Custom Format thôi mà
 
Upvote 0
Em cảm ơn các anh đã nhiệt tình giúp đỡ giải quyết vấn đề của em , nồi cơm của em. Em rất thích tập tin của bác ndu96081631 , nhưng có nhiều đoạn trong đó em chưa được học nên không hiểu, do đó em cũng chỉ đang cố gắng hiểu và điều chỉnh để nó phù hợp hơn với vấn đề của em. em làm như sau :private Sub CommandButton155_Click()
Dim max As Double: max = TextBox2.Value
For Each rng In ActiveSheet.Range("a1:j20")
If rng.Value > max Then
rng.Offset(, 12).Value = rng.Value - max
rng.Value = max
Range("l:l").Copy Sheet2.Range("a1")
Else
End If
Next
nó không copy số thừa của max sang sheet mới mà sang b cell M (Mg.Offset(,12)) , tuy nhiên các cell đều bỏ đúng vị trí đúng yêu cầu , thực tình thì em muốn nó nhảy sang sheet2 nhưng thôi cũng được , mong các bác giúp đỡ
 
Upvote 0
Em cảm ơn các anh đã nhiệt tình giúp đỡ giải quyết vấn đề của em , nồi cơm của em. Em rất thích tập tin của bác ndu96081631 , nhưng có nhiều đoạn trong đó em chưa được học nên không hiểu, do đó em cũng chỉ đang cố gắng hiểu và điều chỉnh để nó phù hợp hơn với vấn đề của em. em làm như sau :private Sub CommandButton155_Click()
Dim maxx As Double: maxx = TextBox2.Value
For Each rng In ActiveSheet.Range("a1", [a65536].End(xlUp))
If rng.Value > maxx Then
Sheet2.Range(rng.Address) = rng.Value - maxx
rng.Value = maxx
Else
End If
Next
sửa lại như vậy.hihii ko nên đặt tên biến trùng hàm trong exx
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom