VBA không cập nhật dữ liệu khi thay đổi thông tin ở 1 sheet

Liên hệ QC

NGOCHAN26

Thành viên mới
Tham gia
7/12/18
Bài viết
36
Được thích
7
Em có 1 file excel với 3 sheet: data, máy kéo, list thông số. File này đã được viết code VBA (người khác viết)
Sheet data là nơi cập nhật dữ liệu, lấy thông tin từ 2 sheet còn lại.
sheet data lưu thông tin từ dòng A7: BO10..... trở xuống, còn các dòng phía trên (A1: BO7) là để hiển thị lại thông tin khi nhấn vào 1 dòng của bảng bên dưới (A7:BO10......).

Nhưng khi cập nhật thêm thông tin ở sheet máy kéo, hay sheet list thông số thì file data lấy dữ liệu bị sai.
Cụ thể:
1. Sheet list thông số thay đổi 1 số thông tin.
Vd thay đổi ở "nhu cầu" (cột A): từ "thang gia đình" thành " thang tải khách". Cột "Mã hiệu "(cột B): vẫn giữ nguyên
Thì bên sheet data, ở dòng thứ 2, cột "mã hiệu"(cột BO): không cập nhật được và cột "mã hiệu thang" (cột BL): cũng không cập nhật đúng.

2. Sheet máy kéo nhập thêm thông tin bên dưới của bảng B10:O100 thì dòng B3:O3 cũng không lấy đúng dữ liệu yêu cầu (hay mới vừa thêm vào)
Nên ở sheet data cũng sẽ không lấy được dữ liệu từ sheet máy kéo.

3. sheet data muốn chèn thêm 1 cột "Ngày ký HĐ" (cột BP) lấy dữ liệu từ cột "Ngày ký HĐ" (Cột BO7: BO1000....) thì các thông số ở các cột bị sai hết ạ.

Do em không biết VBA nên cũng không biết sửa thế nào. Các Anh chị có thể xem file em đính kèm, và thao tác thử sẽ hiểu ạ, tại em cũng không biết phải gọi từ chuyên môn thế nào để mọi người hiểu nên em đã mô tả những vấn đề em gặp phải hơi dài dòng ạ. File của em đúng y vậy, emchỉ xóa những thông tin khách hàng của em thôi.
Xin giúp em, em cảm ơn.
 

File đính kèm

  • data.xlsm
    92 KB · Đọc: 24
dạ, để mình điều chỉnh làm lại file, rồi mình up lại, mọi người xem và chỉ thêm giúp mình để mình hoàn thiện hơn. Cảm ơn mọi người đã dành thời gian giúp mình rất nhiều ạ
Bạn ơi, mình làm file tới đây rồi, mà không biết copy code nào vô chỗ nào cho đúng, nó cứ bị báo lỗi ạ bạn nhìn giúp mình, mình copy code đúng chưa ạ.
 

File đính kèm

  • data admin.xlsm
    94.1 KB · Đọc: 8
Upvote 0
Bạn nên tạo 1 workbook mới hoàn toàn;
Đầu tiên với workbook này sẽ phải là thiết kế 1 trang tính để lưu khách hàng của bạn như bài trên mình đã đề nghị.
File của bạn đang cố thực hiện tiếp đó là chưa chuẩn. Nếu tiếp tục bạn sẽ gặp khó mọi phương diện.
Vậy nên bạn nên để đó qua 1 bên, khi cần mới đem nó ra tham khảo mà thôi.

Xin lưu ý nhỏ là các trang tính khoan hẵn bôi màu mè làm gì; để thô vậy mà sẽ chạy nhanh hơn; Chỉ bôi màu các trang dùng để báo cáo gì đó thôi.

Bổ sung: 1 khi bạn có trang về khách hàng chuẩn rồi thì trang datta thay vì nhiều trường (cột) ta chỉ việc xài 1 cột thôi, đó là mã KH, Các trường khác có liên quan như [Ngày sinh], [SĐT], [Nơi cư ngụ],. . . . lúc cần ta sẽ truy xuát từ trang khách hàng.
& như vậy với 1 khách hàng mua 10 thang máy chăng nữa cũng giảm đáng kể công việc nhập liệu của bạn.
 

File đính kèm

  • Form.rar
    29.2 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
hix, Có Thầy Cô Anh Chị nào hiểu vấn đề em đang gặp không ạ? Em cố gắng làm lại file theo hướng các Anh Chị hướng dẫn là tạo multipage rồi vẽ các form gì gì vào, mà giờ em vẽ xong rồi nhưng em copy code lung tung cả rồi, nên file bị lỗi ạ.
Xin Anh Chị hướng dẫn em lại với ạ. trên từng page của multipage gì đó, em làm từng textbox, combobox xong rồi, giờ em viết code gì để nhấp vào mở được cái form đó ra và khi nhập liệu vào các ô thì dữ liệu sẽ nhập vào dòng cuối bảng và dòng A2 ạ
 

File đính kèm

  • data admin.xlsm
    62.9 KB · Đọc: 5
Upvote 0
(/ấn đề của bạn chưa phải là Form & cách vận hành nó, mà là thiết kế các trang tính theo chuẩn.
Mình xin nói rõ hơn:
1 khi bạn có danh sách khách hàng rồi, thì trong trang 'Data' của bạn chỉ cần 1 cột không thể thiếu (của 1 CSDL) đó là [Mã KH]
Khi ấy, các mã số thuế, ngày sinh, hay CCCD,. . . . đều truy được thông qua mã KH này.
 
Upvote 0
(/ấn đề của bạn chưa phải là Form & cách vận hành nó, mà là thiết kế các trang tính theo chuẩn.
Mình xin nói rõ hơn:
1 khi bạn có danh sách khách hàng rồi, thì trong trang 'Data' của bạn chỉ cần 1 cột không thể thiếu (của 1 CSDL) đó là [Mã KH]
Khi ấy, các mã số thuế, ngày sinh, hay CCCD,. . . . đều truy được thông qua mã KH này.
tại vì khách hàng của mình hơi đặt thù, đó là không có sẵn danh sách, và những khách hàng lắp thang máy thì cũng chỉ lắp 1 lần hoặc 2 lần chứ cũng không phải mặt hàng phổ thông mua đi mua lại nhiều lần.
Cái mình cần là khi nhập 1 thông tin khách hàng vào thì nó sẽ cập nhật vào dòng cuối và dòng A2 để từ dòng A2 đó lấy dữ liệu qua các sheet khác (báo giá, hợp đồng, sản xuất....) thì lúc trước file đã được tạo với 3 mẫu form chạy là "Nhập Liệu", "Báo giá", "hợp đồng".
Mỗi khi cần báo giá cho 1 khách hàng nào đó, thì phải click chuột đúng khách hàng đó, sao đó mới mở form báo giá lên, nhập các thông số cần thiết và thông tin đó sẽ được chỉnh sửa, cập nhật đúng ở dòng của khách hàng đó và ô A2 để link thông tin qua sheet báo giá.
=> nhưng mình gặp vấn đề là không thể thêm thông tin, hay sửa thông tin đã tạo ở các trường "list thông số".
=> và khi bạn nói về vấn đề là danh sách khách hàng lưu nhiều, có mấy trăm khách hàng, thì khi cần báo giá phải tìm click đúng khách hàng đó, xong kéo lên ô A2 để xem thì cũng hơi khó, lỡ tay gõ gì đó thì thông tin ở các dòng trong bảng bị thay đổi mà không kiểm soát được. Nên khi bạn hướng dẫn làm multipage thì mình cố gắng làm theo nhưng hình như mình bị sai gì rồi, tại mình không biết về VBA và file này được kế thừa nên khi bị lỗi không biết đường sửa, nên đang học lõm, Anh Chị hướng dẫn đâu mình làm đó.
 
Upvote 0
Để tìm 1 dòng khách hàng nào đó, mình có cách sau:
Tạo ra 1 bộ mã như mình đã giới thiệu qui tác ở các bài trên; Mã gồm 3 kí tự & 2 kí số
3 ký tự đó là chữ cái tiếng anh (không dấu tiếng Việt) gồm chữ cái đầu của họ, Chữ cái giữa tạm hiểu là từ lót (đệm); Với họ tên trên 3 từ thì lấy từ gần tên nhất, Ví dụ Nguyễn Hoàng Oanh Oanh => NOO; Trần Đức =. TJF, (J thay cho những người chỉ gồm họ & tên, Đ => F
Nếu trùng 3 từ mã này thì đánh số tăng dần 00 => 01,. . . .
Để tìm anh chàng Lê Hoàng Đức trong DS ngàn người, ta đi tìm 3 từ LHF, kết quả quá trình tìm kiếm này là những người có phận (mà mình gọi là phần đặc tính) giống nhau & khác nhau phần định trị; DS tìm này hiện lên 1 ListBox để ta chọn khách hàng ta cần.
Chuyện dò tìm này mình sẽ thực địa cho bạn thấy bằng 1 file khác sẽ gởi nếu cần;
& như bạn thấy, ghi dữ liệu vô dòng 2 như bạn là không cần thiết nữa.

Bạn thử file này xem sao, bằng cách nhập 3 từ có trong DS mã KH sẽ rõ hơn.
 

File đính kèm

  • Form.rar
    25.5 KB · Đọc: 12
Upvote 0
Để tìm 1 dòng khách hàng nào đó, mình có cách sau:
Tạo ra 1 bộ mã như mình đã giới thiệu qui tác ở các bài trên; Mã gồm 3 kí tự & 2 kí số
3 ký tự đó là chữ cái tiếng anh (không dấu tiếng Việt) gồm chữ cái đầu của họ, Chữ cái giữa tạm hiểu là từ lót (đệm); Với họ tên trên 3 từ thì lấy từ gần tên nhất, Ví dụ Nguyễn Hoàng Oanh Oanh => NOO; Trần Đức =. TJF, (J thay cho những người chỉ gồm họ & tên, Đ => F
Nếu trùng 3 từ mã này thì đánh số tăng dần 00 => 01,. . . .
Để tìm anh chàng Lê Hoàng Đức trong DS ngàn người, ta đi tìm 3 từ LHF, kết quả quá trình tìm kiếm này là những người có phận (mà mình gọi là phần đặc tính) giống nhau & khác nhau phần định trị; DS tìm này hiện lên 1 ListBox để ta chọn khách hàng ta cần.
Chuyện dò tìm này mình sẽ thực địa cho bạn thấy bằng 1 file khác sẽ gởi nếu cần;
& như bạn thấy, ghi dữ liệu vô dòng 2 như bạn là không cần thiết nữa.

Bạn thử file này xem sao, bằng cách nhập 3 từ có trong DS mã KH sẽ rõ hơn.
Bạn ơi, mình tạo 1 sheet thông tin khách hàng, có mã khách hàng rồi.
Và đang học cách viết code tìm các dữ liệu liên quan dựa vào mã khách hàng. Nhưng vấn đề này bạn chỉ giúp:
1. ở form Nhập liệu: sẽ nhập mã khách hàng, số điện thoại, địa chỉ (chưa có ngày sinh, số cmnd, ngày cấp.....), bấm nút lưu. Dữ liệu sẽ được ghi ở sheet thông tin khách hàng.
sau này muốn lấy lại mã khách hàng đó để chỉnh sửa, thêm số điện thoại thì phải làm sao ạ?
2. ở form Báo giá: sẽ dựa vào mã khách hàng để truy ra thông tin khách hàng, rồi thêm các thông tin cần thiết vào và ghi dữ liệu ở sheet data. Hiện tại mình đang bị lỗi ở code của nút tìm kiếm mã khách hàng, bạn chỉ giúp mình code bị sai với ạ, để mình sửa lại ạ.
3. ở form Hợp đồng: cũng dựa vào mã khách hàng mà ghi nhận thêm thông tin còn thiếu vào sheet data, nhưng làm sao để ghi tiếp thông tin vào các cột còn thiếu ạ, file hiện tại cứ ghi tiếp dòng mới thôi ạ.
Mong bạn dành chút thời gian chỉ giúp mình ạ
 

File đính kèm

  • ADMIN.xlsm
    128.6 KB · Đọc: 8
Upvote 0
(1) & (2)
Ở form Nhập liệu: sẽ nhập mã khách hàng, số điện thoại, địa chỉ (chưa có ngày sinh, số cmnd, ngày cấp.....), bấm nút lưu. Dữ liệu sẽ được ghi ở sheet thông tin khách hàng.
sau này muốn lấy lại mã khách hàng đó để chỉnh sửa, thêm số điện thoại thì phải làm sao ạ?

PHP:
Private Sub Cmb_timkiem_Click()
Dim Rng As Range, Cl As Range

With Sheets("thong tin kh")
    Set Rng = .Range(.[B2], .[B2].End(xlDown))
End With
MsgBox Rng.Address
Set Cl = Rng.Find(UserForm1.Cb_MAKH.Text, , xlValues, xlWhole)
If Cl Is Nothing Then
    MsgBox "KHONG CO MA KHACH HANG NAY"
Else
    sRow = Cl.Row       'Có Ve Nhu Không Cân Tham Biên Này  '
    With UserForm1
        Cb_tenlead = Cl.Offset(, 1):    Tb_SoDT = Cl.Offset(, 2)
        Tb_diachi = Cl.Offset(, 3):     Tb_CTY = Cl.Offset(, 4)
        Tb_DTCTY = Cl.Offset(, 5):      Tb_Email = Cl.Offset(, 6)
        Cb_Sale = Cl.Offset(, 7):       Cb_Nhucau = Cl.Offset(, 8)
    End With
End If
End Sub

3. Ở form Hợp đồng: cũng dựa vào mã khách hàng mà ghi nhận thêm thông tin còn thiếu vào sheet data, nhưng làm sao để ghi tiếp thông tin vào các cột còn thiếu ạ, file hiện tại cứ ghi tiếp dòng mới thôi ạ.
Quá trình sửa phải trãi qua các bước sau:
1.0 Tìm theo mã KH (khách hàng)
1.1 Hiện dữ liệu của KH lên các TextBox
2. Sửa dữ liệu trên các TextBox nào cần (sửa); Tuyệt đối không cho sửa mã KH!
3./ Viết thêm nút lệnh để lưu lại dữ liệu, gồm
- Tìm theo mã KH Hay nếu có thể, lấy lại dòng của ô đã tìm thấy ở 1.
- Nếu tìm thấy thì tiến hành ghi đè lên dòng dữ liệu theo từng cột tương ứng
- Báo đã ghi đè xong!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử quậy tưng file này theo (3) xem sao:
Nhập 3 kí tự đầu của mã KH nào bất kỳ; Nếu có trong danh sách sẽ hiện trên ListBox để ta chọn 1 từ chúng.
 

File đính kèm

  • GPE.rar
    85.4 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử quậy tưng file này theo (3) xem sao:
Nhập 3 kí tự đầu của mã KH nào bất kỳ; Nếu có trong danh sách sẽ hiện trên ListBox để ta chọn 1 từ chúng.
dạ em đang thử ạ. mà sao có chỗ này tìm khách hàng ở form Hợp Đồng, em sửa lại chọn từ cột A2 thì file Listbox ko hiểu, nó cứ lấy dữ liệu AA2 thôi anh ạ.
Cái chỗ " Redim Arr( 1 to 48, 1 to 3 ( số 3 em sửa lại thành 10 nếu mã khách hàng dài 10 ký tự là đúng ko ạ)
1620034828381.png
 
Upvote 0
Cái chỗ " Redim Arr( 1 to 48, 1 to 3 ( số 3 em sửa lại thành 10 nếu mã khách hàng dài 10 ký tự là đúng ko ạ)
Hoàn toàn không; đó là khai báo mảng có 48 dòng & 3 cột.

(*) ListBox lấy nguồn từ vùng AA2.. .AC..
Nếu ta chọn 1 dòng trên ListBox, thì các cái gì thuốc về mã NV đó đã có sẽ hiện lên các TextBox tương ứng.
 
Upvote 0
Xin hướng dẫn giúp em cách viết 1 code dò tìm như sau ạ.
1. Chọn số báo giá phụ thuộc mã khách hàng ạ.

Mục đích là : Để tránh trường hợp chọn sai số báo giá của khách hàng khi cần in lại báo giá hoặc cập nhật lại thông tin trong báo giá. Vì 1 mã khách hàng có nhiều số báo giá nhưng 1 số báo giá không được có nhiều mã khách hàng ạ.

- Chọn đúng số báo giá nào thì sẽ hiện đúng thông tin của báo giá đó lên các textbox tương ứng.
- không có số báo giá muốn tìm thì sẽ nhập thêm báo giá mới.

Em cảm ơn ạ
 
Upvote 0
Bạn ghi vầy nhưng không có file ví dụ thì đành chờ . . . đi vậy;
File #1 không giúp ích gì để hiểu bạn muốn gì luôn.
 
Upvote 0
Bạn ghi vầy nhưng không có file ví dụ thì đành chờ . . . đi vậy;
File #1 không giúp ích gì để hiểu bạn muốn gì luôn.
dạ em quên. hihi.
em tạo file gần đúng với ý em rồi ạ. mà còn mấy vấn đề em tìm cách hướng dẫn trên mạng không có.
1. Chọn số báo giá phụ thuộc mã khách hàng ạ.

Mục đích là : Để tránh trường hợp chọn sai số báo giá của khách hàng đó khi cần in lại báo giá hoặc cập nhật lại thông tin trong báo giá. Vì 1 mã khách hàng có nhiều số báo giá nhưng 1 số báo giá không được có nhiều mã khách hàng ạ.

- Chọn đúng số báo giá nào thì sẽ hiện đúng thông tin của báo giá đó lên các textbox tương ứng.
- Không có số báo giá muốn tìm của khách hàng đó thì sẽ nhập thêm báo giá mới.

2. Cách để số điện luôn hiện có số 0 ở đầu khi nhập liệu từ textbox của form vào bảng và từ bảng đổ ngược lại vào textbox của form ạ.

em đã có học lõm copy code trên mạng nhưng sao có số đt thì chạy được ( có số 0 ở đầu) có số điện thoại lại chạy không được ạ.
 

File đính kèm

  • ADMIN2 - Copy.xlsm
    142.2 KB · Đọc: 6
Upvote 0
2. Cách để số điện luôn hiện có số 0 ở đầu khi nhập liệu từ textbox của form vào bảng và từ bảng đổ ngược lại vào textbox của form ạ.

em đã có học lõm copy code trên mạng nhưng sao có số đt thì chạy được ( có số 0 ở đầu) có số điện thoại lại chạy không được ạ.
Mình làm theo cách thủ công thì chèn code định dạng trước dòng code ghi số điện thoại vào
 
Upvote 0
. . . .em tạo file gần đúng với ý em rồi ạ. mà còn mấy vấn đề em tìm cách hướng dẫn trên mạng không có.
1. Chọn số báo giá phụ thuộc mã khách hàng ạ.

Mục đích là : Để tránh trường hợp chọn sai số báo giá của khách hàng đó khi cần in lại báo giá hoặc cập nhật lại thông tin trong báo giá. Vì 1 mã khách hàng có nhiều số báo giá nhưng 1 số báo giá không được có nhiều mã khách hàng ạ.

- Chọn đúng số báo giá nào thì sẽ hiện đúng thông tin của báo giá đó lên các textbox tương ứng.
- Không có số báo giá muốn tìm của khách hàng đó thì sẽ nhập thêm báo giá mới.
Bạn phải mô tả kỹ chọn báo giá nào của khách hàng nào, ở trang nào. . . . & cuối cùng kết quả cần đạt là như thế nào?
Cứ lý thuyết suông thế kia thì sang tháng sau nha.
 
Upvote 0
Dạ, trên form báo giá, có combobox Mã khách hàng, combobox Số báo giá.
1. Em muốn khi em chọn Mã khách hàng rồi, đến khi chọn Số báo giá
+ nếu chọn đúng số báo giá của mã khách hàng đó thì thông tin sẽ được hiện lên các textbox tương ứng.
+ nếu chọn nhầm Số báo giá thì excel sẽ hiện cảnh báo.
ví dụ: Mã khách hàng Hoàng Thi có 3 số báo giá là BG 20 12 015, BG 20 12 017 , BG 20 12 002
- nếu chọn Mã KH: Hoàng Thi, Số báo giá: BG 20 12 017 thì thông tin của số báo giá này sẽ hiện lên các textbox tương ứng
- nếu chọn Mã KH: Hoàng Thi, Số báo giá: BG 20 12 002 thì thông tin của số báo giá này sẽ hiện lên các textbox tương ứng
-nhưng nếu chọn Mã KH: Thị Bình, Số báo giá: BG 20 12 017 thì sẽ cảnh báo là " Mã KH không có số báo giá này"

Mục đích: là không chọn sai Số báo giá của khách hàng.
2. Hiện tại code em viết để Tìm Số báo giá, Cập Nhật báo giá, Lưu báo giá: quá dài nên khi Data Đơn Hàng nhiều file excel load chậm và tự động tắt. Có cách viết code nào giúp rút gọn câu lệnh hiện tại của em ngắn hơn, xin chỉ giúp ạ

Em cảm ơn ạ
 

File đính kèm

  • ADMIN2 - Copy.xlsm
    176 KB · Đọc: 2
Upvote 0
Web KT
Back
Top Bottom