Có bao nhiêu từ chính xác mà bạn lại dùng từ "tác động". Tác động là từ chung chung không chính xác có hàng nghìn bộ mặt.
Ý bạn là trong code CommandButton_Click có thể thực hiện toàn bộ code của Cmd_Update_Click?
Nếu hiểu như trên thì:
1. Do Cmd_Update_Click chỉ có thể là Private nên bạn tạo Sub vd, Sub hichic() với nội dung code của Cmd_Update_Click. Lúc này code của Cmd_Update_Click chỉ là hichic.
2. code của CommandButton
Mã:
Sub CommandButton_Click()
' kiểm tra xem Workbook A.xls có đang mở không
Application.Run "A.xls!hichic"
End Sub
Dhn46 xin cảm ơn bác @Siwtom đã giúp đỡ. Nhung khi dhn46 thực hiện sự thay đổi theo chỉ dẫn thì phát sinh lỗi như sau:
1/ Tạo Sub Hichic là nội dung Code CmdUpdate ban đầu (Cho vào Module)
2/ CmdUpdate_Click() chỉ còn Hichic
3/ Tại Workbook B tạo Command Button Click
Mã:
Sub CommandButton_Click()
Application.Run "A.xls!hichic"
End Sub
=> Lỗi phát sinh tại Hichic lúc load dữ liệu lên List Box khi nhấn CmdUpdate và Button tại Workbook B
Mã:
ListBox1.List = Rng
* Nếu đưa Sub Hichic vào User Form Code thì chỉ phát sinh lỗi khi nhấn button tại Workbook B.
------------------------------------------------------------------------------------------
Thực ra dhn46 đang suy nghĩ vấn đề sau:
Workbook A và Workbook B đều dùng chung 1 Database trên 2 máy tính khác nhau qua folder Share - Lan. Khi Workbook A update dữ liệu vào Databasse thì làm cách nào đó thông báo cho Workbook B thực hiện lệnh refresh để lấy dữ liệu tại nguồn để hiển thị. Và chủ để dhn46 tạo nhằm giải quyết vấn đề trên.
dhn46 mong nhận được sự trợ giúp từ bác và các thành viên GPE.
Xin cám ơn GPE!
Dhn46 xin cảm ơn bác @Siwtom đã giúp đỡ. Nhung khi dhn46 thực hiện sự thay đổi theo chỉ dẫn thì phát sinh lỗi như sau:
1/ Tạo Sub Hichic là nội dung Code CmdUpdate ban đầu (Cho vào Module)
2/ CmdUpdate_Click() chỉ còn Hichic
3/ Tại Workbook B tạo Command Button Click
Mã:
Sub CommandButton_Click()
Application.Run "A.xls!hichic"
End Sub
=> Lỗi phát sinh tại Hichic lúc load dữ liệu lên List Box khi nhấn CmdUpdate và Button tại Workbook B
Mã:
ListBox1.List = Rng
* Nếu đưa Sub Hichic vào User Form Code thì chỉ phát sinh lỗi khi nhấn button tại Workbook B.
------------------------------------------------------------------------------------------
Thực ra dhn46 đang suy nghĩ vấn đề sau:
Workbook A và Workbook B đều dùng chung 1 Database trên 2 máy tính khác nhau qua folder Share - Lan. Khi Workbook A update dữ liệu vào Databasse thì làm cách nào đó thông báo cho Workbook B thực hiện lệnh refresh để lấy dữ liệu tại nguồn để hiển thị. Và chủ để dhn46 tạo nhằm giải quyết vấn đề trên.
dhn46 mong nhận được sự trợ giúp từ bác và các thành viên GPE.
Xin cám ơn GPE!
Vấn đề của bạn là dùng hai chương trình Excel để báo cho nhau biết. Vậy cần giải pháp sau:
1. Tạo một file INI để lưu dữ liệu trên Share Folder (Share full) trong mạng. Cách ghi file text hay INI bạn tìm trên mạng.
2. Từ một file, khi muốn báo cho người khác trong mạng biết có sự thay đổi và cần cập nhật thì gián giá trị là 1 vào file INI
3. Trong một file Excel khác, viết lệnh trong thủ tục Application.OnTime() hặoc dùng API setTimer(). Cứ bao nhiêu giây lại mở file INI ra kiểm tra có giá trị là 1 hay không, nếu có thì chạy lệnh, chạy xong thì gán 0 vào INI.
Vấn đề của bạn là dùng hai chương trình Excel để báo cho nhau biết. Vậy cần giải pháp sau:
1. Tạo một file INI để lưu dữ liệu trên Share Folder (Share full) trong mạng. Cách ghi file text hay INI bạn tìm trên mạng.
2. Từ một file, khi muốn báo cho người khác trong mạng biết có sự thay đổi và cần cập nhật thì gián giá trị là 1 vào file INI
3. Trong một file Excel khác, viết lệnh trong thủ tục Application.OnTime() hặoc dùng API setTimer(). Cứ bao nhiêu giây lại mở file INI ra kiểm tra có giá trị là 1 hay không, nếu có thì chạy lệnh, chạy xong thì gán 0 vào INI.
Vấn đề Test sau 1 khoảng thời gian em đã làm được, song nó rất thụ động. Em đang muốn tìm 1 giải pháp chủ động hơn, tức là có sự "giao tiếp" giữa 2 file, khi nào có cập nhật thì mới tiến hành Refresh để lấy dữ liệu.
Mong các anh chị cho em gợi ý và giải pháp
Em xin cảm ơn!
Dhn46 xin cảm ơn bác @Siwtom đã giúp đỡ. Nhung khi dhn46 thực hiện sự thay đổi theo chỉ dẫn thì phát sinh lỗi như sau:
1/ Tạo Sub Hichic là nội dung Code CmdUpdate ban đầu (Cho vào Module)
2/ CmdUpdate_Click() chỉ còn Hichic
3/ Tại Workbook B tạo Command Button Click
Mã:
Sub CommandButton_Click()
Application.Run "A.xls!hichic"
End Sub
=> Lỗi phát sinh tại Hichic lúc load dữ liệu lên List Box khi nhấn CmdUpdate và Button tại Workbook B
Mã:
ListBox1.List = Rng
* Nếu đưa Sub Hichic vào User Form Code thì chỉ phát sinh lỗi khi nhấn button tại Workbook B.
------------------------------------------------------------------------------------------
Thực ra dhn46 đang suy nghĩ vấn đề sau:
Workbook A và Workbook B đều dùng chung 1 Database trên 2 máy tính khác nhau qua folder Share - Lan. Khi Workbook A update dữ liệu vào Databasse thì làm cách nào đó thông báo cho Workbook B thực hiện lệnh refresh để lấy dữ liệu tại nguồn để hiển thị. Và chủ để dhn46 tạo nhằm giải quyết vấn đề trên.
dhn46 mong nhận được sự trợ giúp từ bác và các thành viên GPE.
Xin cám ơn GPE!
Trời ạ ...
1. Bạn là thành viên kỳ cựu, có kinh nghiệm mà bạn giấu thông tin cực kỳ quan trọng như thế. Bó tay.
2.
Mã:
ListBox1.List = Rng
Bạn di chuyển code nhưng phải tuân thủ nguyên tắc chứ?
Trong code cũ bạn có
Mã:
Me.ListBox1.List = Rng
Me hay Sấu hay không có Me thì đều có nghĩa là ListBox1 là con của Tôi, tức con của "ông" frm1 này.
Với code trong Module thì ListBox1 nó là object ở đâu? Có thể bạn sẽ nói: "người ta" phải thông minh chút chứ. Có mỗi 1 ListBopx1 ở trên frm1 mà.
Đây không phải là vấn đề thông minh hay không mà là nguyên tắc. Thế nếu bạn có 3 Form và trên chúng đều có ListBox1 thì sao?
Lấy ví dụ cho dễ hiểu: Ở nhà ông Hùng béo có ai nói: "Cô Nga dạo này đẫy đà hẳn lên". Ai cũng biết đang nói tới cô Nga nào. Nhưng nếu ở ngoài phố có ai nói: "Cô Nga dạo này đẫy đà hẳn lên" thì ai mà biết được đang nói tới cô Nga nào? Cũng có thể cô Nga nhà ông Hùng béo mà cũng có thể cô Nga thích ăn quà vặt nhà ông Kim lác chứ?
Vậy thì phải là: "Cô Nga nhà ông Hùng béo dạo này đẫy đà hẳn lên"
"nhà ông Hùng béo" là để xác định đối tượng "sở hữu" cô Nga. Trong code của frm1 thì Me chính là đối tượng "nhà ông Hùng béo". Bỏ Me cũng được vì lúc đó là đang nói tới Form hiện hành, có chứa code đang xét. Nó giống như bạn bỏ ActiveSheet trong cách viết tường minh ActiveSheet.Range(...)
3. Nếu 2 tập tin nằm ở "2 Excel khác nhau" thì thậm chí khi chúng cùng chạy trên 1 máy cũng đã có lỗi chứ chưa nói tới 2 máy trong mạng LAN. Vì sao? Vì ta có 2 Application. Cái Application trong Application.Run nó là của Excel có b.xls chứ có phải Application của Excel có a.xls đâu? Mà trong Application "ấy" thì làm gì có a.xls?
----------------
Trở lại vấn đề thì tôi vẫn chưa có ý tưởng gì rõ rệt. Vì thực ra việc thao tác trong mạng LAN tôi cũng chưa làm bao giờ nên không biết kết quả sẽ thế nào. Và về cú pháp không biết tôi sẽ viết có đúng không.
Nhưng ta cứ thử "voc" chút nhỉ? Chả mất gì.
Trước tiên ta Run Macro khi có 2 Excel mở trên cùng máy. Giả sử bạn có tập tin trong thư mục share là "c:\share", tức tập tin là "c:\share\a.xls"
Bạn cho code sau vào B.xls
Mã:
Sub CommandButton_Click()
Dim filepath As String, ExcelWb As Object
filepath = "c:\share\a.xls"
Set ExcelWb = GetObject(filepath)
If Not ExcelWb Is Nothing Then ExcelWb.Application.Run "A.xls!hichic"
End Sub
Mở 2 Excel, open ở 1 Excel tập tin a.xls, ở kia b.xls.
Nếu code trên chạy được thì ta "vọc" tiếp cho trường hợp "c:\share\a.xls" nhưng ở trên máy khác là vd. dhn46
Mã:
Sub CommandButton_Click()
Dim filepath As String, ExcelWb As Object
filepath = "\\dhn46\c:\share\a.xls"
Set ExcelWb = GetObject(filepath)
If Not ExcelWb Is Nothing Then ExcelWb.Application.Run "A.xls!hichic"
End Sub
Nếu không được thì ta tìm cách khác. Cùng lắm thì ta làm kiểu một anh để lại tin nhắn, còn anh kia cứ lúc lúc lại kiểm tra tin nhắn như bạn Nguyễn Duy Tuân đề nghị.
dhn46 xin cảm ơn bác Siwtom, đúng là dhn46 cũng loay hoay tìm "cô Nga đẫy đà" nhưng cứ tìm không biết địa chỉ nên vẫn treo cái biển "Thành viên cô đơn" vậy.
- Về Code bài trên khi áp dụng hướng dẫn cho Workbook tại 1 máy thì chạy tốt lắm ạ, nhưng chạy trên 2 máy tính thì không có xê dịch gì. dhn46 vẫn chưa biết khắc phục.
Giải pháp "tạm thời" trước khi mở chủ đề này của dhn46 là dùng API Set Timer (Code Copy Paste trên diễn đàn) để kết nối trực tiếp vào DataBase (dữ liệu chưa lớn lắm, nếu lớn chắc phải sử dụng giải pháp anh Tuân gợi ý) bằng SQL theo nhịp thời gian, so sánh Max trong record với biến tạm rồi quyết định có cập nhật hay không. Do "tham lam" muốn tìm những phương thức khác nên mong các thành viên góp ý và cho hướng giải quyết
dhn46 xin cảm ơn bác Siwtom, đúng là dhn46 cũng loay hoay tìm "cô Nga đẫy đà" nhưng cứ tìm không biết địa chỉ nên vẫn treo cái biển "Thành viên cô đơn" vậy.
- Về Code bài trên khi áp dụng hướng dẫn cho Workbook tại 1 máy thì chạy tốt lắm ạ, nhưng chạy trên 2 máy tính thì không có xê dịch gì. dhn46 vẫn chưa biết khắc phục.
Giải pháp "tạm thời" trước khi mở chủ đề này của dhn46 là dùng API Set Timer (Code Copy Paste trên diễn đàn) để kết nối trực tiếp vào DataBase (dữ liệu chưa lớn lắm, nếu lớn chắc phải sử dụng giải pháp anh Tuân gợi ý) bằng SQL theo nhịp thời gian, so sánh Max trong record với biến tạm rồi quyết định có cập nhật hay không. Do "tham lam" muốn tìm những phương thức khác nên mong các thành viên góp ý và cho hướng giải quyết
Tôi chưa thao tác trong mạng LAN bao giờ mà bây giờ muốn viết code để test cũng không có LAN để test. Thôi thử mò mẫm xem sao. Nếu không được thì tôi nghĩ đơn giản nhất có lẽ vẫn là "để lại tin nhắn và kiểm tra tin nhắn" như bạn Tuân đã gợi ý.
Dhn46 làm theo hướng dẫn và thu được kết quả như sau:
Báo lỗi tại Workbook B.xls “Run time error 462”
Nội dung: The remote server machine does not exist or is unavailable
Dhn46 cảm ơn bác nhiều!