Vấn đề : Tự động chạy macro mới khi không tìm thấy dữ liệu.

Liên hệ QC

HoangAnhSaiGon

Thành viên mới
Tham gia
25/8/07
Bài viết
10
Được thích
0
Thân gởi các bạn :

Mình đang thực hiện những đoạn macro nhỏ để nhập thông tin về phiếu xuất hàng. Mình muốn khi mình nhập mã số khách hàng, nếu mã số này không tồn tại trong cơ sở dữ liệu, thì một macro sẽ tự động chạy, cho phép mình nhập thông tin về khách hàng mới. Sau khi nhập xong, màn hình sẽ trở lại với form nhập thông tin về phiếu xuất hàng ban đầu. (File đính kèm)

Mình mới học excel thôi, diễn giải ý tứ chưa rõ ràng. Rất mong các bạn sẽ giúp đỡ.

Thân mến
Hoàng Anh
 

File đính kèm

- Xem cái này thử nhé !
 

File đính kèm

Mong nhận được thêm hướng dẫn...

Rất cảm ơn anh ĐMT. Giải pháp của anh rất hữu ích cho những người mới bắt đầu tiếp xúc với VBA như HoàngAnh.

Nhưng trường hợp của mình ở đây, mình muốn sử dụng mã số thuế làm mã số khách hàng. Và khi nhập thông tin khách hàng, mình còn cần phải nhập thêm những thông tin khác như : Địa chỉ, điện thoại, người liên hệ.........

Anh ĐMT và các bạn có cách nào hướng dẫn giúp mình với

Cảm ơn rất nhiều.
Hoàng Anh.
 
Nếu là như vậy thì chưa thể chạy macro nhập khách hàng mới dc... Nếu tra ko có mã khách hàng trong danh sách thì trước tiên nó chỉ go to sheet khachhangmoi rồi dừng ở đó cho bạn tự nhập thông tin vào... khi nhập xong bạn phải tự bấm nút xác nhận mới chạy macro chứ
ANH TUẤN
 
Gởi : Anh Tuấn

Gởi : Anh Tuấn,

Có lẽ giải pháp của anh trong lúc này là tối ưu nhất. Nếu Excel không tìm thấy mã số, nó sẽ tự động nhảy sang Sheet "khachhangmoi" để mình nhập thông tin. Sau đó sẽ quay trở lại màn hình nhập liệu Phiếu nhập kho...

Anh Tuấn gợi ý giúp mình để hoàn thành công việc này nhé

Rất cảm ơn
Hoàng Anh
 
Tôi cũng ko rành về code lắm nhưng nếu là đúng như vậy thì tôi sẽ làm như sau:
1> Tại sheet Input tôi tạo công thức tại 1 cell nào đó (chẳng hạn là cell M1) =COUNTIF(danhmuc!$A$3:$B$100,Input!$C$2)
Nếu gõ vào cell C2 mà nó ko tìm thấy trong danh sách thì đương nhiên công thức trên = 0
2> Nếu M1 = 0 thì copy cell C2, go to sheet khachhangmoi, paste dử liệu vừa copy vào cell C4, còn tên khách hàng đương nhiên bạn tự nhập.. Sau đó bạn bấm vào nút xác nhận đễ chạy macro...
Nghỉ thì nghỉ thế, nhưng do tôi "nặng" về hàm nên chắc thuật toán này ko hay cho lắm... Tuy nhiên với cách suy nghỉ như tôi trình bày ờ trên thì bạn hoàn toàn có thể tự tạo code mà... Gần giống như cái sub của bạn đấy thôi... chứ bắt tôi tạo code thì chắc cả ngày vẫn chưa xong... hi... hi...
ANH TUẤN
 
- Bạn gởi file mẫu lên đi, nhớ chú thích nha !!!
 
Tôi nghĩ HoangAnhSaiGon muốn học hỏi về VBA và đang muốn tự mình làm tất cả (có đúng ko bạn?)... Vì thế nếu Trí làm file này thì nên càng đơn giản càng tốt... Có giải thích rõ thì càng hay...
ANH TUẤN
 
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i, j, k: i = 1: j = 1
On Error Resume Next
Dim tmp, tmp2, cName As String
[COLOR=green]'------------- bắt đầu [/COLOR]
[COLOR=green]'Sheet3 = Sheet(danhmuc) làm cho đến khi rỗng thì thoát[/COLOR]
[COLOR=green]'Nếu tìm thấy MSKH nào giống ô C2 thì gán[/COLOR]
[COLOR=green]' tmp = MSKH đó, tmp2 = cột kế bên của MSKH[/COLOR]
[COLOR=black]Do
  If Sheet3.Cells(i, 1) = "" Then
     Exit Do
  Else
     If Cells(2, 3) = Sheet3.Cells(i, 1) Then
        tmp = Sheet3.Cells(i, 1)
        tmp2 = Sheet3.Cells(i, 2)
     End If
  End If
i = i + 1
Loop[/COLOR]
[COLOR=green]'-------------------- Kết thúc code [/COLOR]
 
[COLOR=green]'----------------- bắt đầu so sánh [/COLOR]
[COLOR=green]'Nếu tìm thấy bên sheet3 giống ô C2 thì gán C3 = tmp2[/COLOR]
[COLOR=green]'Ngược lại thông báo nhập tên và gán cName = tên nhập[/COLOR]
[COLOR=green]'Nếu không nhập gì cả thì thoát hàm (Exit Sub)[/COLOR]
[COLOR=green]'Nếu giá trị nhập vào khác rỗng thì làm như sau[/COLOR]
[COLOR=green]'Sheet3 dòng cuối cùng lấy giá trị dòng trên + 1 để đảm bảo thứ tự liên tục[/COLOR]
[COLOR=green]'Gán cho C3 = cName [/COLOR]
[COLOR=green]'Cells(2, 3) = Sheet3.Cells(j, 1) cho dù bạn có gõ vào số tuỳ ý thì nó vẫn lấy theo thứ tự chứ không lấy theo số đó.
'Sheet3.Cells(j, 1).Offset(0, 1) = cName thêm tên vừa nhập vào danh sách[/COLOR]
If Cells(2, 3) = tmp Then
   Cells(3, 3) = tmp2
Else
   Do
     If Sheet3.Cells(j, 1) = "" Then
        cName = InputBox("Go ten can cap nhat vao danh sach :", "Msg")
        If cName = "" Then
           Exit Sub
        Else
           Sheet3.Cells(j, 1) = "0" & Sheet3.Cells(j - 1, 1) + 1
           Cells(3, 3) = cName
           Cells(2, 3) = Sheet3.Cells(j, 1)
           Sheet3.Cells(j, 1).Offset(0, 1) = cName
        End If
        Exit Do
     End If
   j = j + 1
   Loop
End If
End Sub
 
Lần chỉnh sửa cuối:
Gởi các "cao thủ" :)

Thân gởi các bạn,

Cảm ơn Anh Tuấn đã nhận xét. Đúng là HoangAnh đang tìm hiểu VBA, nên muốn làm nhiều thư lắm. Nhưng khả năng còn rất hạn chế, cũng chịu khó tự suy nghĩ, nhưng vì có diễn đàn, nên HoàngAnh tìm đến nhờ các bạn ở đây góp ý, cho Hoàng Anh được học hỏi kinh nghiệm nữa. Người ta nói "Học thầy không tày học bạn" mà.

Trở lại vấn đề của Hoàng Anh. Vì mình đang tạo một form nhập liệu phiếu nhập kho. Ở đây, khi có khách hàng mới, khi mình nhập mã số khách hàng (Mã số thuế), nếu Excel tìm không thấy trong CSDL, nó sẽ tự động chuyển sang màn hình nhập liệu khách hàng mới (Hoàng Anh tạo form này trong Sheet" khachhangmoi"). Sau khi nhập thông tin khách hàng mới xong. Excel sẽ tự động trở về màn hình nhập liệu phiếu nhập kho (Ở đây mình cũng có thể dùng một button thực hiện việc trở về màn hình nhập liệu PNK) nhưng mình muốn thử tìm hiểu xem excel có đủ "thông minh" để tự động nhảy trở về màn hình nhập PNK hay không :) (file đính kèm)

Trên đây là một thuật toán mà HoàngAnh nghĩ rằng sẽ được áp dụng rất nhiều cho công việc, không chỉ cho riêng vấn đề cụ thể mà mình đang đề cập.

Mình rất mong các "cao thủ" sẽ giúp đỡ, góp ý, trao đổi để đưa ra những thuật toán hay nhất. Vì điều đó, không những giúp đỡ cho HoàngAnh, mà cón giúp đỡ cho rất nhiều bạn khác đang tìm hiểu về excel để đáp ứng nhu cầu của mình.

Rất cảm ơn các bạn đã sẵn lòng hỗ trợ những người mới học như HoàngAnh .

Thân mến
 

File đính kèm

Gởi ĐMT

HoàngAnh vừa post reply thì đọc được code anh gởi. Cũng hơi khó một chút, nhưng có thể nhờ như vậy mà HoàngAnh sẽ phải suy nghĩ và sẽ nhớ lâu hơn.

Mình sẽ đọc để hiểu và chạy thử. Nếu có gì chưa thông, rất mong anh ĐMT, Anh Tuấn và các bạn giúp đỡ.

Thân mến
HoàngAnh
 
- Bạn xem thêm cái này tham khảo nhé !
 

File đính kèm

To dmtdmtbb: Xin phép sử dụng File của bác và chỉnh sửa thêm chút ít.
To HoanganhSaiGon: Bạn xem file gửi kèm dưới đây có được không nhé.
Ngoài lề: Không hiểu sao lúc này truy cập vào trang GPE chậm thế (chắc không phải do máy của mình hay do nhà cung cấp dịch vụ ADSL vì mình vẫn vào các trang khác thấy đâu có chậm như vậy).
 

File đính kèm

Lời cảm ơn.

Cả ngày hôm nay không vào mạng được, bực mình ghê ! Giờ thì đã khuya mới log on được, nhận được hướng dẫn (kèm file) của anh ĐMT và MinhLeV, mình cảm thấy rất vui. Cảm ơn các bạn thật nhiều. Chạy thử và kết quả thật như ý. Tuy nhiên, thật sự mình muốn phát triển thêm một chút nữa cho thật hoàn hảo, vì khi chạy đoạn code cho nhập data mới, thông tin nhập vào quá đơn giản, chỉ có tên khách hàng mà chưa cho phép nhập thêm những thông tin khac liên qua như : Số điện thoại, số fax......

Mình vô cùng cảm kích các bạn đã giúp đỡ, chỉ cho mình cách cách giải quyết vấn đề. Mình sẽ nghiên cứu và phát triển thêm.

Giờ này chác mọi người đã .. sắp ngủ. Hy vọng sáng mai, tất cả sẽ nhận được lời chúc ngủ ngon của mình. :) Hình như Anh Tuấn chưa ngủ.. Chúc anh ngủ ngon và đóng góp cho diễn đàn những bài viết thật đáng giá !

Thân mến
HoàngAnh.

 
Vậy thì bạn vẽ ra cái form bạn muốn nó như thế nào đi thì người ta sẽ làm cho bạn giống như vậy! Dể thôi mà...
ANH TUẤN
 
Web KT

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

Back
Top Bottom