Hỗ trợ giúp Validation hoặc 1 phương pháp nào khác

Liên hệ QC

bonzidino

Thành viên mới
Tham gia
16/5/08
Bài viết
42
Được thích
6
Mình gởi kèm file để các bạn xem giúp, file này trước đây đã được bạn ChanhTQ hỗ trợ, sau 1 thời gian hoạt động nay phát sinh thêm. Nếu bác ChanhTQ có rãnh thì xem giúp tiếp nha, hoặc các đại cao thủ nào đó xem giúp em...
* Vấn đề 1: Hiện tại file của em tại sheet PX, ô màu đỏ (em dùng validtion) khi chon phòng rồi thì phần tên bên dưới nó lấy hết cả danh sách tên bên sheet DV. Em muốn khi chọn phòng nào thì ô tên bên dưới chỉ lấy tên của những người trong phòng đó thôi.
* Vấn đề 2: ở cái ô màu vàng bên trên em muốn sau khi bấm nút cập nhật thì số phiếu tự động tăng lên để khỏi phải gỏ tay.
 

File đính kèm

Bạn xem trong file có đúng ý bạn không nhé!
 

File đính kèm

Câu I của bạn đây

Những chú ý trong file:
Tại trang tính 'DV' mình đã lập 2 tên mới tại đầu các cột 'H' & 'I'
ame tại cột 'H' phục vụ cho sự lựa chọn tại PX!B9 (Cái này bạn có rồi, hãy lấy cái của bạn xài)
Tại cột I để phục vụ cho PX!B10

& macro dưới đây sẽ làm ra danh sách đó

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B9]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, aRng As Range
   Dim MyAdd As String
   
   Set Sh = Sheets("DV"):        Set Rng = Sh.Range(Sh.[b1], Sh.[b65500].End(xlUp))
   Sh.Range("I2:I" & Sh.[i65500].End(xlUp).Row).ClearContents
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         Sh.[i65500].End(xlUp).Offset(1).Value = sRng.Offset(, 1).Value
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
End Sub
 

File đính kèm

Mình gởi kèm file để các bạn xem giúp, file này trước đây đã được bạn ChanhTQ hỗ trợ, sau 1 thời gian hoạt động nay phát sinh thêm. Nếu bác ChanhTQ có rãnh thì xem giúp tiếp nha, hoặc các đại cao thủ nào đó xem giúp em...
* Vấn đề 1: Hiện tại file của em tại sheet PX, ô màu đỏ (em dùng validtion) khi chon phòng rồi thì phần tên bên dưới nó lấy hết cả danh sách tên bên sheet DV. Em muốn khi chọn phòng nào thì ô tên bên dưới chỉ lấy tên của những người trong phòng đó thôi.
* Vấn đề 2: ở cái ô màu vàng bên trên em muốn sau khi bấm nút cập nhật thì số phiếu tự động tăng lên để khỏi phải gỏ tay.
Mở file lên, vào menu Insert\Name\Define... thấy 1 đóng name, nhìn thấy.. phát ngán luôn (quá lượm thượm)
Thật ra tôi nghĩ rút gọn lại chỉ còn 3 name là đủ
 
Không biết nói gì hơn là "quá tuyệt". Chân thành cảm ơn các bạn nhiều.
Mình sẽ nghiên cứu file các bạn gởi để học hỏi thêm kinh nghiệm, vì hiện giờ chỉ biết là file hoạt động nhưng mình chưa hiểu lắm cách làm.
Dù sao cũng cảm ơn rất nhiều
 
bạn ChanhTQ giải thích giúp tí

bạn ChanhTQ cho mình hỏi cái này
1/ Nếu ở sheet!PX ở ô B4 mình cũng muốn làm như ô B9 thì thêm như sau có đúng không ?
If
Not Intersect(Target, [B4],[B9]) Is Nothing Then

2/ Mình thử làm 1 file khác nhưng trong phần Define Name nó không giống như của bạn (mình có gởi kèm hình có khoanh tròn màu đỏ), cái đó làm như thế nào và có ý nghĩa gì ? giải thích giúp mình.
 

File đính kèm

  • define.JPG
    define.JPG
    22.5 KB · Đọc: 11
Mình thử thấy được

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union([B4], [B9])) Is Nothing Then
' Các câu lệnh trên'
End If
End Sub

Lúc đó bạn phải có danh sách đổ xuống tại [B4]
Hơn nữa, trên trang tính DV, tại cột 'B' & 'C' phải có danh sách các bộ phận đó.

Dù sao chăng nữa cũng cần thấy cảnh báo rằng dễ sai hay báo lỗi mà khó biết sai do đâu
 
Lần chỉnh sửa cuối:
Bạn xem trong file có đúng ý bạn không nhé!
Cách của ban làm cũng đúng như ý mình muốn nhưng nếu có thêm nhiều phòng thì phải Define Name thì nhiều quá.
Còn cái tự động tăng số phiếu, mình nhập code y như của bạn vào file của mình thì bị báo lỗi ờ dòng này
a= sheets("PX").Range("F3").Value
Không biết bạn có dấu chiêu gì không vậy ? -+*/
Nhưng du sao cũng chân thành cảm ơn bạn đã hỗ trợ mình
 
Những chú ý trong file:
Tại trang tính 'DV' mình đã lập 2 tên mới tại đầu các cột 'H' & 'I'
ame tại cột 'H' phục vụ cho sự lựa chọn tại PX!B9 (Cái này bạn có rồi, hãy lấy cái của bạn xài)
Tại cột I để phục vụ cho PX!B10

& macro dưới đây sẽ làm ra danh sách đó

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B9]) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, aRng As Range
   Dim MyAdd As String
   
   Set Sh = Sheets("DV"):        Set Rng = Sh.Range(Sh.[b1], Sh.[b65500].End(xlUp))
   Sh.Range("I2:I" & Sh.[i65500].End(xlUp).Row).ClearContents
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         Sh.[i65500].End(xlUp).Offset(1).Value = sRng.Offset(, 1).Value
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
End Sub
Tại sao chổ đoạn code nay mình thay cột I thành cột khác thì nó không lấy được dữ liệu vậy? Vì mình muốn thực hiện với sheet("DL")
Sh.Range("I2:I" & Sh.[i65500].End(xlUp).Row).ClearContents
 
Tại sao chổ đoạn code nay mình thay cột I thành cột khác thì nó không lấy được dữ liệu vậy? Vì mình muốn thực hiện với sheet("DL")
Sh.Range("I2:I" & Sh.[i65500].End(xlUp).Row).ClearContents

Cái cột 'I' mà bạn đề cập đó, chúng ta cùng với excel thỏa thuận nhau kê 1 cái két Fe khá nặng & bắt vít chìm xuống bê tông nền rồi. (Bạn vô menu Insert Name sẽ thấy nó.
Cái tủ này người ta thiết kế để luân chuyển liên tục các danh sách quý hóa phục vụ cho PX!$B$10;
Cứ mỗi lần ta chọn gì khác xưa trong PX!$B$9 thì két này có danh sách mới.

Giờ bạn muốn khiên đi chỗ khác thì phải chịu khó mường tượng hết các công việc

Tạm thời mô tả công việc như sau:
+ Khi ta chọn 1 hàng nào đó tại PX!$B$9, thì macro xóa danh sách cũ trong két đi, & đưa danh sách mới tương ứng mà bạn cần vô đó;
Bạn rê mũi chuột xuống dưới nó 1 ô, thì macro đã nhanh hơn & kịp ghi danh sách mới vô két & bạn đừng ngạc nhiên là sao nó làm nhanh thế.

Chúc bạn thành công!
 
Web KT

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

Back
Top Bottom