kích đúp vào listbox di chuyển lại vùng dữ liệu nguồn tương ứng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

huongtinh1929

Thành viên chính thức
Tham gia
6/10/11
Bài viết
61
Được thích
4
Giới tính
Nam
Các bác cho em hỏi một chút. em có một listbox em muốn khi kích đúp chuột vào một hàng trong listbox thì sẽ di chuyển đến hàng dữ liệu nguồn tương ứng trong listbox. Tức là khi em bật listbox lên mà có một hàng dữ liệu nguồn em muốn chỉnh sửa thi em chỉ việc kích đúp chuột vào hàng dữ liệu trên listbox đó là con chỏ chuột sẽ di chuyển đến luôn hàng dữ liệu nguồn tương ứng. Em mong các bác chỉ giúp
 

File đính kèm

Các bác cho em hỏi một chút. em có một listbox em muốn khi kích đúp chuột vào một hàng trong listbox thì sẽ di chuyển đến hàng dữ liệu nguồn tương ứng trong listbox. . . . .
1./ Mỗi 1 dòng dữ liệu nên có mã duy nhất để định vị; Vì cột [STT] bạn nhập số TT không duy nhất, nên & nhất thiết fải vậy
Với mình thì khi kích vô dòng nào đó trên ListBox, thì các dữ liệu sẽ fải hiện lên các TextBox trên Form (để bạn tiếp tục thao tác sửa chữa)
Sau sửa xong thì có nút (lệnh) để lưu lên trang tính dòng dữ liệu đã chỉnh sửa.
Đã có Form thì nên tránh tối đa quậy lên trang dữ liệu, đề fòng chuyện nó thành đống rác có ngày!

2./ Câu lệnh này trong macro
Arr = data.Range("b7:l407")
PHP:
Private Sub UserForm_Initialize()
arr = data.Range("b7:l407")
' . . . . . . '
End Sub
Nên là vầy:
Mã:
Const SoDg As Long = 1407
Private Sub UserForm_Initialize()
Arr = data.Range("b7:l: & SoDg).Value
' . . . . . . '
End Sub
Dễ bề thay đổi khi các dòng dữ liệu biến động tăng (hay giảm)
 
Lần chỉnh sửa cuối:
Upvote 0
1./ Mỗi 1 dòng dữ liệu nên có mã duy nhất để định vị; Vì cột [STT] bạn nhập số TT không duy nhất, nên & nhất thiết fải vậy
Với mình thì khi kích vô dòng nào đó trên ListBox, thì các dữ liệu sẽ fải hiện lên các TextBox trên Form (để bạn tiếp tục thao tác sửa chữa)
Sau sửa xong thì có nút (lệnh) để lưu lên trang tính dòng dữ liệu đã chỉnh sửa.
Đã có Form thì nên tránh tối đa quậy lên trang dữ liệu, đề fòng chuyện nó thành đống rác có ngày!

2./ Câu lệnh này trong macro
Arr = data.Range("b7:l407")
PHP:
Private Sub UserForm_Initialize()
arr = data.Range("b7:l407")
' . . . . . . '
End Sub
Nên là vầy:
Mã:
Const SoDg As Long = 1407
Private Sub UserForm_Initialize()
Arr = data.Range("b7:l: & SoDg).Value
' . . . . . . '
End Sub
Dễ bề thay đổi khi các dòng dữ liệu biến động tăng (hay giảm)
ý của em là có core nào trả về vị trí dòng dữ liệu nguồn tương ứng với listbox không ý.
VD: em tạo một listbox tìm kiếm các tuyến đường. khi danh sách listbox thỏa mãn em chỉ việc kích đúp vào dòng có tuyến đường đó là di chuyển ngay tới tuyến đường đó trong bản dữ liệu nguồn. Em cảm ơn bác
 
Upvote 0
ý của em là có core nào trả về vị trí dòng dữ liệu nguồn tương ứng với listbox không ý.
VD: em tạo một listbox tìm kiếm các tuyến đường. khi danh sách listbox thỏa mãn em chỉ việc kích đúp vào dòng có tuyến đường đó là di chuyển ngay tới tuyến đường đó trong bản dữ liệu nguồn.
Chắc cách đán tin cậy nhất là mã hóa từng dòng dữ liệu 1 cách duy nhất,
Đó là vấn đề thiết kế trang tính, không fải là mã lệnh VBA giúp được đâu.
Cũng giống như mỗi người có 1 số CMND hay vân tay không giống với bất kỳ ai trong 6 - 7 tỷ con người trên thế gian.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem file này & thử viết tiếp xem sao
 

File đính kèm

Upvote 0
File này làm gì hả bác.Cháu nghĩ bài trên mình tạo sự kiện ở list là DblClick.Rồi xác định vị trí của list đó ở trong file excel có được không nhỉ.
Bạn sẽ căn cứ vô cột nào để tìm đúng dòng dữ liệu trên trang tính trùng với dữ liệu trên ListBox?
Không khéo râu ông nó cắm vô má bà kia
 
Upvote 0
Bạn sẽ căn cứ vô cột nào để tìm đúng dòng dữ liệu trên trang tính trùng với dữ liệu trên ListBox?
Không khéo râu ông nó cắm vô má bà kia
Thường là người ta có ý tưởng thế này: nhập dữ liệu từ sheet vào ListBox. Khi click vào mục nào trong ListBox thì sẽ bắn dữ liệu của mục đó vào các TextBox để chỉnh sửa. Nếu nhấn một CommandButton nào đó với hàm ý sửa dữ liệu thì các giá trị TextBox được bắn trở lại mục đang được chọn trong ListBox. Khi đóng Form thì phải ghi lại ListBox cùng các mục đã sửa vào sheet.

Nhưng cũng có thể làm luôn, khi ghi TextBox về lại ListBox thì sửa luôn trên sheet. Lúc này thì ở mọi thời điểm ListBox luôn phản ánh thực trạng trên sheet.

Để sửa trên sheet mục đang được sửa trên ListBox thì phải biết mục ấy trên sheet nằm ở dòng nào. Dễ thôi. Muốn biết thì trước đóphải ghi vào "sổ tay". Tức khi nhập dữ liệu từ sheet vào ListBox thì ghi ở cột ẩn (sổ tay) của ListBox chỉ số dòng trên sheet của mỗi dòng dữ liệu nhập từ sheet vào ListBox. Khi cần sửa mục nào đó trên ListBox thì đọc chỉ số dòng trên sheet của nó từ cột ẩn (sổ tay) rồi sửa trên sheet thôi.

Nếu có cả quá trình thêm dữ liệu mới hoặc xóa dữ liệu đang tồn tại thì sau mỗi lần thực hiện các thao tác đó phải sửa lại trong cột ẩn (sổ tay) cho các mục dữ liệu khác. Vd. các mục trong ListBox có chỉ số ở cột ẩn (sổ tay) là 7, 8, ..., 94 thì sau khi xóa dòng 10 trên sheet (dòng thứ 4 tính từ 1 trên ListBox) thì phải sửa các chỉ số trong cột ẩn của các mục từ dòng thứ 4 trên ListBox (tính từ 1). Tức sửa 11, 12, ..., 94 (đã mất mục với chỉ số 10) thành 10, ..., 93. Tương tự khi thêm dữ liệu vào cuối hoặc chèn vào "giữa" các dòng đã có.
 
Upvote 0
Qui trình của bạn fức tạp thiệt đó nha!; Với mình thì CSDL nào cũng fải cột/trường làm chỉ mục
1 khi đã vậy thì làm việc với dòng dữ liệu nào cũng fải thông qua chỉ mục của dòng dữ liệu (duy nhất) ý.
Vế tốc độ thì cách của bạn có thể nhanh hơn; Nhưng với những người chưa quen thì CSDL thành đống rác mấy hồi!
 
Upvote 0
Qui trình của bạn fức tạp thiệt đó nha!; Với mình thì CSDL nào cũng fải cột/trường làm chỉ mục
1 khi đã vậy thì làm việc với dòng dữ liệu nào cũng fải thông qua chỉ mục của dòng dữ liệu (duy nhất) ý.
Vế tốc độ thì cách của bạn có thể nhanh hơn; Nhưng với những người chưa quen thì CSDL thành đống rác mấy hồi!
Không phải sheet nào, không phải bảng dữ liệu nào cũng là CSDL bạn ạ.

Không phải trong mỗi bảng dữ liệu bất kỳ nào mỗi dòng đều là duy nhất ở một cột nào đó.

Tôi nói về dữ liệu nói chung thôi chứ không nói về CSDL, không nói về các dữ liệu duy nhất, ở cột nào đó, về Mã, CMND, số dđ, số tài khoản ngân hàng v...v
--------
Tôi cho bạn vd.
Người ta có sheet danhmuc: Tên hàng, Mã hàng, DVT, ... Sheet này có thể coi là CSDL. Nhưng vd. có sheet Xuất. Cùng một loại hàng, mã hàng nhưng xuất có thể ở vô vàn ngày. Người ta nhập lên ListBox, dò tìn và phát hiện có sai sót khi đã nhập liệu. Người ta muốn sửa lại. CSDL gì ở đây? Căn cứ vào đâu để biết cần sửa dòng nào trên sheet? Tôi nói về trường hợp này bạn ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Trước tiên rất vui được thảo luận cùng bạn!
Người ta có sheet danhmuc: Tên hàng, Mã hàng, DVT, ... Sheet này có thể coi là CSDL. Nhưng vd. có sheet Xuất. Cùng một loại hàng, mã hàng nhưng xuất có thể ở vô vàn ngày. Người ta nhập lên ListBox, dò tìn và phát hiện có sai sót khi đã nhập liệu. Người ta muốn sửa lại. CSDL gì ở đây? Căn cứ vào đâu để biết cần sửa dòng nào trên sheet?
Thông thường mỗi hóa đơn như bạn ví dụ ta chỉ ghi không bao giờ 2 dòng với cùng 1 mặt hàng
Như vậy trong trường hợp này bạn nêu, ta nên chăng tìm kết hợp (tìm) theo số hóa đơn nữa.
Chuyện kết hợp như vậy sẽ thu hẹp danh sách có trên ListBox.
Nhưng để kết hợp trong khi tìm chắc phải trãi qua 2 bước: Tìm thô & tìm tinh.

Chúc bạn buổi sáng tốt lành! (Chắc đúnh hơn là phải chúc bạn ngủ ngon giấc!)
 
Upvote 0
Trước tiên rất vui được thảo luận cùng bạn!

Thông thường mỗi hóa đơn như bạn ví dụ ta chỉ ghi không bao giờ 2 dòng với cùng 1 mặt hàng
Như vậy trong trường hợp này bạn nêu, ta nên chăng tìm kết hợp (tìm) theo số hóa đơn nữa.
Chuyện kết hợp như vậy sẽ thu hẹp danh sách có trên ListBox.
Nhưng để kết hợp trong khi tìm chắc phải trãi qua 2 bước: Tìm thô & tìm tinh.

Chúc bạn buổi sáng tốt lành! (Chắc đúnh hơn là phải chúc bạn ngủ ngon giấc!)
Bây giờ bạn lại nói chuyện khác.
Chuyện nhập vào TextBox hóa đơn để tìm kiếm theo hóa đơn rồi hiển thị kết quả tìm kiếm vào ListBox, nói như bạn là hu hẹp danh sách có trên ListBox, tôi có bàn đâu?

Tôi chỉ bàn về chuyện khi có ListBox với danh sách đầy đủ hay thu hẹp sau khi tìm kiếm mà tôi phát hiện vd. nhầm lẫn và muốn sửa thì tôi biết sửa trên ListBox. Nhưng làm cách nào tôi biết là đồng thời phải sửa lại dòng nào trên sheet? Đó chỉ là 1. Còn trường hợp khi mà tôi lúc này thì thêm dòng dữ liệu trên ListBox và đồng thời thêm trên sheet, hoặc xóa. Sau một hồi thêm hoặc xóa như thế mà tôi muốn sửa mục nào đó được chọn trên ListBox thì bằng cách nào tôi biết phải sửa dòng nào trên sheet?

Bạn bình luận là cách tôi đưa ra là làm cho CSDL thành đống rác. Khi tôi nói về những trường hợp không chỉnh sửa CSDL thì bạn lại chuyển sang Tìm kiếm. Tôi có nói về Tìm kiếm theo hoá đơn, theo mã hàng, theo lý lịch, theo tài khoản ngân hàng, ngày sinh tháng đẻ, tìm thô tìm tinh, tìm hỗn hợp, tìm kim đáy bể tìm chim trên trời đâu? Tôi viết rất cụ thể: Làm sao để khi sửa trên ListBox thì biết sửa dòng nào trên sheet. Về cái này và chỉ về cái này mà thôi.
 
Upvote 0
Sau khi có danh sách dữ liệu trên ListBox & muốn sửa hay bổ sung dòng nào trên đó, mình sẽ cho dòng dữ liệu đó trên ListBox lên các Control & tiến hành sửa hay bổ sung trên các Control;
Vấn đề còn lại sau đó là lưu lên trang tính.
Theo mình cách tốt nhất với mình là trên trang tính & trên ListBox phải có trường nào đó để nhận biến ra nhau (so khớp)
& quả thật mình không đủ sức để đi theo hướng khác như bài trước đó bạn đề ra.

Chúc bạn vui!
 
Upvote 0
Theo em cách của anh siwtom hợp lý hơn và cá nhân em vẫn làm theo cách này (liên kết dữ liệu bằng ID được tạo trong quá trình runtime). Với cách làm của anh SA_DQ, giả sử cái mà người dùng muốn sửa chính là dữ liệu của trường mà code dùng để xác định vị trí dòng dữ liệu thì phải xử lý như thế nào?
 
Upvote 0
Theo em cách của anh siwtom hợp lý hơn và cá nhân em vẫn làm theo cách này. Với cách làm của anh SA_DQ, giả sử cái mà người dùng muốn sửa chính là dữ liệu của trường mà code dùng để xác định vị trí dòng dữ liệu thì phải xử lý như thế nào?
Trường đó với mình là xương sống của CSDL & không bao giờ thay đổi hay sửa chữa.
Còn cách của các bạn mình chưa & sẽ thử sức nay mai, nếu có thể.

Chúc vui vẻ trước thềm năm mới!
 
Upvote 0
Tôi thấy bác batman1 đưa ra giải pháp kỹ thuật (technique) khi lập trình (trong running time) quản lý sư tương ứng vị trí trên listbox và trên dữ liệu sheet - là giải pháp chuẩn thường áp dụng khi cần quản lý tương tác giữa form và dữ liệu

Trong khi đó bác SA_DQ lại đi bàn về CSDL (cơ sở dữ liệu) chuẩn hóa và có trường ID chuẩn cho nó - cái này đúng với xây dựng tạo lập CSDL

Vì thế tôi nghĩ 2 cái khác nhau, nhưng phù hợp với vấn đề của chủ topic đang hỏi thì giải pháp của bác batman1 là phù hợp hơn - vì dù CSDL chuẩn hóa rồi , thì khi quản lý tương tác khi chạy (running time) thì phải theo technique của lập trình
 
Upvote 0
Các bác cho em hỏi một chút. em có một listbox em muốn khi kích đúp chuột vào một hàng trong listbox thì sẽ di chuyển đến hàng dữ liệu nguồn tương ứng trong listbox. Tức là khi em bật listbox lên mà có một hàng dữ liệu nguồn em muốn chỉnh sửa thi em chỉ việc kích đúp chuột vào hàng dữ liệu trên listbox đó là con chỏ chuột sẽ di chuyển đến luôn hàng dữ liệu nguồn tương ứng. Em mong các bác chỉ giúp
Góp ý cho bạn:
1/ Bạn không nên định hướng cho người khác làm theo ý mình mà nên cụ thể vấn đề bạn muốn làm cái gì? ở đâu với dữ liệu của sheet datatinh. Các thành viên sẽ nghiên cứu đưa ra cho bạn một giải pháp hiệu quả hơn.

2/ Qua xem File thì tôi nhận định thế này:
- Dựa vào dữ liệu của sheet datatinh bạn muốn áp giá đất cho bất kỳ vị trí nào của một xã trên địa bàn một huyện. Nếu đúng vậy thì sheet datatinh phải xây dựng lại theo tiêu chí trên và cái UserForm của bạn làm là phá sản (vừa tốn công, công sức mà không sử dụng được).
- Nếu bạn làm công tác bồi thường thì cách làm trên cũng không hợp lý. Ví dụ có 1 người khiếu nại về áp giá tại thời điểm 2015 đến nay mới giải quyết thì làm cách nào để xem lại giá đất cũ?

3/ Tôi nghĩ vấn đề bạn hỏi liên quan đến công tác thẩm định giá, nếu đúng vậy thì còn liên quan đến nhiều vấn đề khác để bàn chứ không đơn thuần như bạn nghĩ.

4/ Cách tốt nhất là bạn nêu rỏ công việc và cần nêu thật cụ thể những vấn đề bạn cần làm để người giúp hiểu được bao quát hơn.

5/ Sau khi tính toán xong mới ra được cái này và dùng cái này để gán vào những thứ khác có liên quan.

A_TD.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom