Giúp dùm đoạn code khi "cell value changed"

Liên hệ QC

nghiaquangtran

Thành viên chính thức
Tham gia
28/10/08
Bài viết
79
Được thích
25
Chào các bạn

Nhờ các bạn chỉ giúp mình viết code sao cho khi 1 ô được chỉ định thay đổi giá trị (đây là ô chứa giá trị reference từ ComboBox), sao cho cứ mỗi lần giá trị trong ô này thay đổi theo lựa chọn của ComboBox kia thì ra lệnh cho mở 1 file nào đó và lại đóng file đó lại ngay

lý do: vì file mình đang làm chứa công thức lookup, sumif từ data trong 1 file khác, nếu sau mỗi lần thay đổi giá trị tham chiếu thì công thức không thể cập nhật dc nếu file chứa data kia đang đóng.

mình biết làm theo cách này thì ct chạy rất chậm nhưng mình thực tình chưa nghĩ ra cách nào khả thi.


Cám ơn nhiều
 
Bạn dùng sự kiện Change cho Combobox nha :
Bạn copy thư mục này vào ổ D nha
PHP:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Workbooks.Open Filename:="D:\VD\VD1.xls"
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

PS : Khi mình thao tác, dù cho file chứa dữ liệu có đóng đi nữa thì file chương trình vẫn hiểu mà.
 

File đính kèm

Upvote 0
Chúng ta để ý thấy rằng:
- VLOOKUP có thể cập nhật dử liệu mới mà không cần mở file nguồn
- Còn với SUMIF, để nó tự cập nhật, theo tôi nên chuyển sang dùng Consolidate ---> Vì Consolidate có khả năng lấy dử liệu từ file khác mà không cần Open file
Bạn đưa 2 file nguồn và đích lên để các cao thủ tìm giải pháp xem!
(chứ cái vụ mở file rồi đóng lại là... quá dở)
 
Upvote 0
Mình cũng đã viết một chương trình quản lý nhân sự con con.
Vì phải truy vấn ở nhiều File khác nhau, việc truy vấn hơi phức tạp chút xíu nên mình vẫn thường dùng cách mở File rồi đóng File.
Vì người dùng chỉ thấy Form, Excel đã bị ẩn đi rồi nên người dùng không thấy sự đóng mở này.
Vì trình độ VBA có hạn, chưa thể áp dụng cách truy vấn như các cao thủ lập trình nên cũng cảm thấy tự hài lòng rồi.
Còn việc dùng công thức Excel thuần túy để dùng trong VBA thì mình không thích bởi như vậy sẽ làm rối chương trình.
--CV--
 
Upvote 0
Chào các bạn

Nhờ các bạn chỉ giúp mình viết code sao cho khi 1 ô được chỉ định thay đổi giá trị (đây là ô chứa giá trị reference từ ComboBox), sao cho cứ mỗi lần giá trị trong ô này thay đổi theo lựa chọn của ComboBox kia thì ra lệnh cho mở 1 file nào đó và lại đóng file đó lại ngay

lý do: vì file mình đang làm chứa công thức lookup, sumif từ data trong 1 file khác, nếu sau mỗi lần thay đổi giá trị tham chiếu thì công thức không thể cập nhật dc nếu file chứa data kia đang đóng.

mình biết làm theo cách này thì ct chạy rất chậm nhưng mình thực tình chưa nghĩ ra cách nào khả thi.


Cám ơn nhiều


Tại sao các bạn không sử dụng GetOpenFilename trong trường hợp này nhỉ?

PHP:
Private Sub Workbook_Open()
    On Error Resume Next
    Application.ScreenUpdating = False
    TenA = ""
    TenA = Application.GetOpenFilename
    Application.ScreenUpdating = True
End Sub

Muốn mở bao nhiêu file thì thêm vào TenB, TenC....
Thân
AnhPhuong
 
Upvote 0
Chúng ta để ý thấy rằng:
- VLOOKUP có thể cập nhật dử liệu mới mà không cần mở file nguồn
- Còn với SUMIF, để nó tự cập nhật, theo tôi nên chuyển sang dùng Consolidate ---> Vì Consolidate có khả năng lấy dử liệu từ file khác mà không cần Open file
Bạn đưa 2 file nguồn và đích lên để các cao thủ tìm giải pháp xem!
(chứ cái vụ mở file rồi đóng lại là... quá dở)

Cám ơn các bạn đã có nhiều ý kiến mình thấy rất hay.

Mình có Data tham chiếu (lookup_value) và Sumif() luôn thay đổi theo ComboBox,nhưng mình thấy mỗi lần no thay đổi theo ComboBox thì nó báo #name nếu file đích đóng.

To: bạn Ndu...
Mình cũng thấy cách đóng mở này không dc ổn lắm, bạn chỉ mình cách consolidate với, mình amateur excel lắm.





Các bạn thông cảm mình không pót file lên dc vì data cua cty là bảo mật.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng sự kiện Change cho Combobox nha :
Bạn copy thư mục này vào ổ D nha
PHP:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Workbooks.Open Filename:="D:\VD\VD1.xls"
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

PS : Khi mình thao tác, dù cho file chứa dữ liệu có đóng đi nữa thì file chương trình vẫn hiểu mà.


To: bạn HoangDanh

Mình có nhiều ComboBox điều khiển cùng chung 1 vùng và cùng duy nhất 1 ô reference, ô này sẽ thay đổi giá trị khi bất kỳ cái ComboBox nào kích hoạt, nên không dùng sự kiện "Private Sub ComboBox1_Change()" được,
...vì thế nên mình mới muốn viết code "cell_change" cho cái ô reference đó mà hok biết viết ra sao.

Cám ơn
 
Upvote 0
To: bạn HoangDanh

Mình có nhiều ComboBox điều khiển cùng chung 1 vùng và cùng duy nhất 1 ô reference, ô này sẽ thay đổi giá trị khi bất kỳ cái ComboBox nào kích hoạt, nên không dùng sự kiện "Private Sub ComboBox1_Change()" được,
...vì thế nên mình mới muốn viết code "cell_change" cho cái ô reference đó mà hok biết viết ra sao.

Cám ơn

Nếu như bạn có nhiều Combobox cùng tham chiếu đến 1 cell thì khi bất kỳ Combobox nào thay đổi, tất cảc các Combobox khác đều thay giá trị đổi theo combobox này. Vì thế, đương nhiên là code trên vẫn có tác dụng bình thường.
 
Upvote 0
To: bạn HoangDanh

Mình có nhiều ComboBox điều khiển cùng chung 1 vùng và cùng duy nhất 1 ô reference, ô này sẽ thay đổi giá trị khi bất kỳ cái ComboBox nào kích hoạt, nên không dùng sự kiện "Private Sub ComboBox1_Change()" được,
...vì thế nên mình mới muốn viết code "cell_change" cho cái ô reference đó mà hok biết viết ra sao.

Cám ơn
Sự kiện code chạy dựa vào sự thay đổi của 1 cell nảo đó gọi là sự kiện Worksheet_Change
Ví dụ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$1" Then
    MsgBox Target
  End If
End Sub
Nhưng dám cá với bạn rằng nếu cell B1 này do ComboBox link tới (chứ không phải do bạn tự tay gõ) thì chả có code nào chạy cả
Xem file thí nghiệm nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Sự kiện code chạy dựa vào sự thay đổi của 1 cell nảo đó gọi là sự kiện Worksheet_Change
Ví dụ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$B$1" Then
    MsgBox Target
  End If
End Sub
Nhưng dám cá với bạn rằng nếu cell B1 này do ComboBox link tới (chứ không phải do bạn tự tay gõ) thì chả có code nào chạy cả
Xem file thí nghiệm nhé

Cám ơn bạn ndu...

thế này thì mình lại phải nghĩ cách khác vậy.


Cám ơn toàn thể các bạn.
TranQuang
 
Upvote 0
Mình thấy File thí nghiệm của ndu chỉ cần thêm code sau là sử lý cũng tạm

Mã:
Private Sub ComboBox1_Change()
Dim dc As Range
Set dc = Sheet1.Range(ComboBox1.LinkedCell)
Worksheet_Change dc
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom