Giúp code chống mở 2 file trùng tên trong Excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Ví dụ giờ mình mở File word từ màn hình Desktop lên rồi đánh văn bản, rồi chưa tắt file word đi , mình lại mở tiếp File word từ màn hình Desktop lần 2, thì file word nó không cho mở gì cả, và cũng không hiện bản thông báo gì cả.
Còn đối với Excel thì sao. Khi mình mở 1 File X lên rồi mình cũng nhập liệu vào rồi cái mình quên Lưu ( ở đây là Người dùng Quên, chứ các bạn đừng nói sao không Ctrl + S hay không đưa Code Auto Save vào), Rồi mình thu nhỏ các File excel lại xuống thanh Toolbar của Window, rồi người dùng làm 1 cái gì đó ( lên Youtube mở nhạc nghe....) rồi bây giờ mở lại File Excel lúc nảy lên, mà tại Quên nên lại mở từ file X ở ngoài Dekstop ( đáng lý ra là phải mở từ Toolbar mà đả thu trước đó ) thì Excel sẽ hiện lên 1 bảng thông báo Filename’ is already open. Reopening will cause..."


Như mình thì mình hiểu thông báo này là (" File X đang mở bạn có muốn mở lại lần nữa hay không ), do người dùng tiếng anh còn hạn chế, nên đôi khi họ đâu có hiểu được, nếu người ta chọn YES thì coi như nhập từ sáng đến giờ sẽ không Lưu. Giờ mình viết Code làm sao để khắc phục chuyện này, Vấn đề này là có hại nếu bạn cài cho người sử dụng, thật sự là có hại. Chính mình đây, mình làm 1 file tính tiền cho Bố mẹ mình tính tiền cho quán Matxa ở nhà ( chỉ tính tiền giờ và tiến nước thôi ) mà đôi khi Bố Mẹ mình hay quên nên làm từ sáng đến tối mình kiểm tra lại thì mới là do cái này.

Mình biết anh Vietmini viết được, mà anh không chịu giúp em, em rất buồn, và đây là hướng dẫn viết của anh Vietmini. rất mong mọi người giúp mình

Viết 1 cái workbook open event, nó check hiện hữu của một file x nào đó.
Nếu file x hiện hữu, nó thoát ra.
Nếu file x chưa hiện hữu, nó tạo file x, và unhide sheet cho người ta làm việc

Viết 1 cái workbook close/save event, nó hide sheet và xóa file x
Vì sheet bị hide nên người mở không thể disable macro mà làm việc được.


1 lần nữa em xin chân thành cảm ơn tất cả mọi người đã đọc hiểu vấn đề của em. Em rất mong mọi người hiểu và giúp em
 
Vậy thì nên cài excel (office) giao diện tiếng Việt cho những người không quen tiếng Anh như vậy là giải pháp hay nhất, và giúp sửa cả thói quen bất cẩn của họ
 
Upvote 0
Vậy thì nên cài excel (office) giao diện tiếng Việt cho những người không quen tiếng Anh như vậy là giải pháp hay nhất, và giúp sửa cả thói quen bất cẩn của họ

cách này thì không ổn đâu anh..có cách nào mở lên không hiện thông báo luôn không..Mong anh giúp em
 
Upvote 0
cách này thì không ổn đâu anh..có cách nào mở lên không hiện thông báo luôn không..Mong anh giúp em

Tại sao không ổn?
Bạn không cài được excel giao diện tiếng việt?
Cài tiếng việt cho những người lớn tuổi, người không biết hoặc biết ít English sử dụng là tốt nhất, giúp họ tiếp cận nhanh hơn ...
 
Upvote 0
Tại sao không ổn?
Bạn không cài được excel giao diện tiếng việt?
Cài tiếng việt cho những người lớn tuổi, người không biết hoặc biết ít English sử dụng là tốt nhất, giúp họ tiếp cận nhanh hơn ...


sao anh không hiểu em nhĩ. ý em là thay vì mình làm vậy, thì mình dùng code chặn không hay hơn sao. Ví dụ cài tiếng việt xong người ta đang vội gì đó người ta bấm Yes thì sao, Anh phải làm sao khóa người ta ngay từ đầu luôn ( Em đã cài tiếng việt rồi anh ạ, mà nhiều khi người ta quên )
Nên em muốn Chặn đứng thông báo ngay từ đầu ( như vậy nó mới hay )
Đó anh thấy file word mở rồi chưa đóng mở nữa nó có hiện gì đâu. em muốn làm y vậy
 
Lần chỉnh sửa cuối:
Upvote 0
sao anh không hiểu em nhĩ. ý em là thay vì mình làm vậy, thì mình dùng code chặn không hay hơn sao. Ví dụ cài tiếng việt xong người ta đang vội gì đó người ta bấm Yes thì sao, Anh phải làm sao khóa người ta ngay từ đầu luôn ( Em đã cài tiếng việt rồi anh ạ, mà nhiều khi người ta quên )
Nên em muốn Chặn đứng thông báo ngay từ đầu ( như vậy nó mới hay )
Đó anh thấy file word mở rồi chưa đóng mở nữa nó có hiện gì đâu. em muốn làm y vậy


Tôi hiểu thì tôi mới đưa giải pháp cho bạn như vậy, bạn không cảm ơn lại còn buông 1 câu: không ổn - cũng không nêu lý do sao. Còn "Mong a giúp em" giúp khi đâu biết lý do gì không ổn(?)

Giải pháp tiếng việt mà người ta vẫn quên (dù bài đầu bạn đề cập liên quan khó khăn English giờ lại kêu có tiếng Việt rồi - vậy có nhất quán không?), bấm nhanh không đọc (theo ngôn ngữ mạng giờ là tay nhanh hơn não) - thì đó là ẩu đó bạn, vì microsoft đã cẩn thận khi hỏi lại chính người dùng cho người dùng quyết định, mà người dùng lại lờ đi, ẩu bỏ qua, thì thật là khó xử đó.

Bạn nên nhớ là với VBA là code dịch sau nên mọi sự kiện mọi code VBA đều chạy sau khi Excel đã chạy và thực thi các tác vụ đầu tiên cho file đó (ở trường hợp vấn đề của bạn là "mở file từ Windows Explorer ..." tức là khơi động excel và mở file đó thì excel kiểm tra mở lại - reopen - điều này nó chạy trước mọi code VBA (nếu có) trong file đó, nghĩa là mọi code VBA nếu có trong file đều chưa kịp chạy thì excel đã thông báo hộp thoại reopen đó)

Bài viết mới nhất trên của bạn: sao lại làm chữ to đùng tô đậm, tô màu, bạn muốn gì vậy, ép (hay dằn mặt) người khác chú ý giúp chăng: bạn không sửa lại cái đó cỡ chữ như bình thường, thì tôi sẽ không tham gia chủ đề này nữa (dù có hay không có giải pháp nào khác)

tôi sẽ sửa lại chữ to trong bài viết này sau vài giờ,
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi hiểu thì tôi mới đưa giải pháp cho bạn như vậy, bạn không cảm ơn lại còn buông 1 câu: không ổn - cũng không nêu lý do sao. Còn "Mong a giúp em" giúp khi đâu biết lý do gì không ổn(?)

Giải pháp tiếng việt mà người ta vẫn quên (dù bài đầu bạn đề cập liên quan khó khăn English giờ lại kêu có tiếng Việt rồi - vậy có nhất quán không?), bấm nhanh không đọc (theo ngôn ngữ mạng giờ là tay nhanh hơn não) - thì đó là ẩu đó bạn, vì microsoft đã cẩn thận khi hỏi lại chính người dùng cho người dùng quyết định, mà người dùng lại lờ đi, ẩu bỏ qua, thì thật là khó xử đó.

Bạn nên nhớ là với VBA là code dịch sau nên mọi sự kiện mọi code VBA đều chạy sau khi Excel đã chạy và thực thi các tác vụ đầu tiên cho file đó (ở trường hợp vấn đề của bạn là "mở file từ Windows Explorer ..." tức là khơi động excel và mở file đó thì excel kiểm tra mở lại - reopen - điều này nó chạy trước mọi code VBA (nếu có) trong file đó, nghĩa là mọi code VBA nếu có trong file đều chưa kịp chạy thì excel đã thông báo hộp thoại reopen đó)

Bài viết mới nhất trên của bạn: sao lại làm chữ to đùng tô đậm, tô màu, bạn muốn gì vậy, ép (hay dằn mặt) người khác chú ý giúp chăng: bạn không sửa lại cái đó cỡ chữ như bình thường, thì tôi sẽ không tham gia chủ đề này nữa (dù có hay không có giải pháp nào khác)

tôi sẽ sửa lại chữ to trong bài viết này sau vài giờ,

em sorry anh. tại em hỏi lần này gần 15 lần rồi . Không ai trả lời. Túm lại là em muốn File nào mở rồi nếu chưa tắt đi mà mở tiếp lần nữa không được ( giống y chan như word )
 
Upvote 0
em sorry anh. tại em hỏi lần này gần 15 lần rồi . Không ai trả lời. Túm lại là em muốn File nào mở rồi nếu chưa tắt đi mà mở tiếp lần nữa không được ( giống y chan như word )

Cứ hỏi kiểu như thế này thì có lẽ 150 lần cũng không có giải pháp vì:
chứ các bạn đừng nói sao không Ctrl + S hay không đưa Code Auto Save vào
Anh phải làm sao khóa người ta ngay từ đầu luôn
là người giúp sao lại cấm người ta "đừng nói", yêu cầu người ta "phải" (tôi là người giúp không phải là người làm thuê ...)

ở diễn đàn thì không có giải pháp trực tiếp thì sẽ có giải pháp gián tiếp, bạn hỏi mà chặn người ta, bắt người ta - thì ai muốn giúp (?) hoặc chưa giúp đã bị chặn đủ đường...

MS WORD khác MS Excel , cái đó là từ gốc microsoft đã lập trình vậy, hỏi tại sao, hỏi muốn vậy thì chỉ có yêu cầu trực tiếp microsoft.

Tôi viết thẳng để bạn giúp kinh nghiệm mà hỏi , nhờ giúp cho chỉnh chu bạn viết hơn 200 bài rồi - không phải mới mẻ gì mà không biết các điều trên) - nếu có gì quá thì bỏ qua.
 
Lần chỉnh sửa cuối:
Upvote 0
dạ em biết sai rồi anh. mong anh bỏ qua cho em. Sau này em sẽ khắc phục chuyện như thế này

Cứ hỏi kiểu như thế này thì có lẽ 150 lần cũng không có giải pháp vì:


là người giúp sao lại cấm người ta "đừng nói", yêu cầu người ta "phải" (tôi là người giúp không phải là người làm thuê ...)

ở diễn đàn thì không có giải pháp trực tiếp thì sẽ có giải pháp gián tiếp, bạn hỏi mà chặn người ta, bắt người ta - thì ai muốn giúp (?) hoặc chưa giúp đã bị chặn đủ đường...

MS WORD khác MS Excel , cái đó là từ gốc microsoft đã lập trình vậy, hỏi tại sao, hỏi muốn vậy thì chỉ có yêu cầu trực tiếp microsoft.

Tôi viết thẳng để bạn giúp kinh nghiệm mà hỏi , nhờ giúp cho chỉnh chu bạn viết hơn 200 bài rồi - không phải mới mẻ gì mà không biết các điều trên) - nếu có gì quá thì bỏ qua.
 
Upvote 0
Lý do, theo sự hiểu biết có hạn của tôi, thì tôi đã viết ở trên: Không thể dùng VBA trực tiếp trong file đó để xử lý vấn đề này được

Bạn nên nhớ là với VBA là code dịch sau nên mọi sự kiện mọi code VBA đều chạy sau khi Excel đã chạy và thực thi các tác vụ đầu tiên cho file đó (ở trường hợp vấn đề của bạn là "mở file từ Windows Explorer ..." tức là khơi động excel và mở file đó thì excel kiểm tra mở lại - reopen - điều này nó chạy trước mọi code VBA (nếu có) trong file đó, nghĩa là mọi code VBA nếu có trong file đều chưa kịp chạy thì excel đã thông báo hộp thoại reopen đó)
nên chào thua...

Gợi ý cho bạn (tự viết code), hay người khác giúp bạn là có 2 cách:

+ Lập trình với các tác vụ của windows: Hook bắt sự kiện mở file của windows -cái này không thể dùng VBA trong chính file đó, và cần viết thành 1 chương trình chạy thường trực để bắt sự kiện mở file đó lần 2

+ Hoặc cách 2 đơn giản (chắc bạn tự làm được): viết code ở 1 file ễcl thứ 2 (ví dụ là yy.xlsb): kiểm tra và mở file xx xem đã mở chưa hay chưa- nếu mở rồi thì active cửa sổ xx lên, nếu chưa thì mở xx - và từ nay nói người Sử dụng khi làm việc chỉ cần nháy đúp mở file yy.xlsb --> sẽ được như ý.

hết
 
Lần chỉnh sửa cuối:
Upvote 0
Anh giúp em cách thứ 2 đi anh. em đọc thì hiểu, nhưng do đang tự học VBA nên mò rất là lâu, File xlsb là file gì vậy anh em đang dùng excel 2003 . tại Em muốn dủng cho File nhà em, Em có làm 1 file tính tiền cho Mẹ em, mà Mẹ em hay mở đè lên, nó nó không lưu. rất mong anh giúp đở. Em xin chân thành cảm ơn !

Lý do, theo sự hiểu biết có hạn của tôi, thì tôi đã viết ở trên: Không thể dùng VBA trực tiếp trong file đó để xử lý vấn đề này được

nên chào thua...

Gợi ý cho bạn (tự viết code), hay người khác giúp bạn là có 2 cách:

+ Lập trình với các tác vụ của windows: Hook bắt sự kiện mở file của windows -cái này không thể dùng VBA trong chính file đó, và cần viết thành 1 chương trình chạy thường trực để bắt sự kiện mở file đó lần 2

+ Hoặc cách 2 đơn giản (chắc bạn tự làm được): viết code ở 1 file thứ 2 (ví dụ là yy.xlsb): kiểm tra và mở file xx xem đã mở chưa hay chưa- nếu mở rồi thì active cửa sổ xx lên, nếu chưa thì mở xx - và từ nay nói người Sử dụng khi làm việc chỉ cần nháy đúp mở file yy.xlsb --> sẽ được như ý.

hết
 
Upvote 0
Anh giúp em cách thứ 2 đi anh. em đọc thì hiểu, nhưng do đang tự học VBA nên mò rất là lâu, File xlsb là file gì vậy anh em đang dùng excel 2003 . tại Em muốn dủng cho File nhà em, Em có làm 1 file tính tiền cho Mẹ em, mà Mẹ em hay mở đè lên, nó nó không lưu. rất mong anh giúp đở. Em xin chân thành cảm ơn !

Cách đó đơn giản, đọc và hiểu rồi thì code sẽ nhanh thôi, bạn search (tìm kiếm) code và tự làm đi, tôi dừng ở đây vì tôi không rảnh và cũng không bao giờ muốn mình "phải" làm việc mình đã không thích.

Nếu không tự làm được thì yên tâm có đường lối rồi sẽ có thành viên khác giúp bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Đầu tiên, tôi đang dùng Excel 2003, 2007, 2010, tôi mở file 1.xlsx (lần 1), rồi quay trở lại explorer chạy tiếp (lần 2) 1.xlsx, ... thì trong ứng dụng Microsoft Excel nó chỉ có 1 workbook thôi.
còn code thì tôi google giúp bạn nhé, như sau không biết có đúng ý bạn ko?

Sub RetrieveFileName()
'Chon file va hien thi day du duong dan toi file
Dim sFileName As String
'Show the open dialog and pass the selected file name to the String variable "sFileName"
sFileName = Application.GetOpenFilename


'They have cancelled.
If sFileName = "False" Then Exit Sub

MsgBox sFileName​
End Sub


Public Function FileInUse(sFileName) As Boolean
On Error Resume Next
Open sFileName For Binary Access Read Lock Read As #1
Close #1
FileInUse = IIf(Err.Number > 0, True, False)
On Error GoTo 0​
End Function


Function bIsBookOpen(ByRef szBookName As String) As Boolean
' Rob Bovey
On Error Resume Next
bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)​
End Function


Sub TenWorkbook_dang_mo()
Dim TenWkBk As Variant
TenWkBk = Application.ActiveWorkbook.FullName
'MsgBox TenWkBk
If FileInUse(TenWkBk) Then
MsgBox TenWkBk & "..... is opened"​
Exit Sub​
Else
MsgBox "File is Closed"​
End If​
End Sub

Sub Test_2()
If bIsBookOpen("e:\Fr_GPE\Hai file trung ten.xlsm") Then​
MsgBox "The File is open!"​
Else​
MsgBox "The File is not open!"​
End If​
End Sub
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom