dangtaipbtn
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 16/11/18
- Bài viết
- 6
- Được thích
- 1
chào các bác, hiện tại em đang cần 1 code VBA hẹn giờ đóng file nếu file không sử dụng ạ. mong các bác giúp đỡ
chào các bác, hiện tại em đang cần 1 code VBA hẹn giờ đóng file nếu file không sử dụng ạ. mong các bác giúp đỡ
Private Sub Workbook_BeforeClose(Cancel As Boolean)
stop_Countdown
ThisWorkbook.Save
End Sub
Private Sub Workbook_Open()
start_Countdown
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
stop_Countdown
start_Countdown
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
stop_Countdown
start_Countdown
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
stop_Countdown
start_Countdown
End Sub
Option Explicit
Public Close_Time As Date
Sub start_Countdown()
Close_Time = Now() + TimeValue("00:00:10")
Application.OnTime Close_Time, "close_WB"
End Sub
Sub stop_Countdown()
Application.OnTime Close_Time, "close_WB", , False
End Sub
Sub close_wb()
ThisWorkbook.Close True
End Sub
Bạn thử nhé:
https://stackoverflow.com/questions/34908387/automatically-close-workbook-after-inactivity
This Workbook module:
Mã:Private Sub Workbook_BeforeClose(Cancel As Boolean) stop_Countdown ThisWorkbook.Save End Sub Private Sub Workbook_Open() start_Countdown End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Excel.Range) stop_Countdown start_Countdown End Sub
Regular Module:
Mã:Option Explicit Public Close_Time As Date Sub start_Countdown() Close_Time = Now() + TimeValue("00:00:10") Application.OnTime Close_Time, "close_WB" End Sub Sub stop_Countdown() Application.OnTime Close_Time, "close_WB", , False End Sub Sub close_wb() ThisWorkbook.Close True End Sub
Hoặc:
https://www.giaiphapexcel.com/diendan/threads/hẹn-giờ-tắt-mở-file-excel.123761/[/
cảm ơn chị gái nhưng VBA của em báo lỗi
![]()
--> @Nguyễn Hoàng Oanh ThơBạn thử nhé:
https://stackoverflow.com/questions/34908387/automatically-close-workbook-after-inactivity
This Workbook module:
Mã:Private Sub Workbook_BeforeClose(Cancel As Boolean) stop_Countdown ThisWorkbook.Save End Sub Private Sub Workbook_Open() start_Countdown End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Excel.Range) stop_Countdown start_Countdown End Sub
Regular Module:
Mã:Option Explicit Public Close_Time As Date Sub start_Countdown() Close_Time = Now() + TimeValue("00:00:10") Application.OnTime Close_Time, "close_WB" End Sub Sub stop_Countdown() Application.OnTime Close_Time, "close_WB", , False End Sub Sub close_wb() ThisWorkbook.Close True End Sub
Hoặc:
https://www.giaiphapexcel.com/diendan/threads/hẹn-giờ-tắt-mở-file-excel.123761/
--> @Nguyễn Hoàng Oanh Thơ
Có ý tưởng này cho OT làm cho chủ topic.
- Sửa Sub có thể thay đổi thời gian Countdown. Ví dụ: Nhập vào 3000 giây
- Đóng Excel ! Nhở mà File mới vừa tạo chưa lưu vào đâu cả. Thì File vẫn sẽ mở
------ThisWorkbook.Close False thì sẽ mất File
- File chuẩn bị đóng thì hiện lên thông báo "Close OK?" trong vòng 1 phút không ấn gì cả / Yes thì đóng
- Thêm một Boolean nếu True thì close + tắt máy tính.
![]()
bác ơi. ý tưởng tắt máy không ổn lắm em chỉ cần tắt file thôi--> @Nguyễn Hoàng Oanh Thơ
Có ý tưởng này cho OT làm cho chủ topic.
- Sửa Sub có thể thay đổi thời gian Countdown. Ví dụ: Nhập vào 3000 giây
- Đóng Excel ! Nhở mà File mới vừa tạo chưa lưu vào đâu cả. Thì File vẫn sẽ mở
------ThisWorkbook.Close False thì sẽ mất File
- File chuẩn bị đóng thì hiện lên thông báo "Close OK?" trong vòng 1 phút không ấn gì cả / Yes thì đóng
- Thêm một Boolean nếu True thì close + tắt máy tính.
![]()
Vậy OT lấy code này điXin chào HeSanbi,
Xin lỗi vì đầu tháng công việc của OT có phần bận rộn nên chưa thông tin đến bạn được.
Đề nghị của bạn thực sự với kiến thức hiện giờ của OT thì chưa thể làm được (vì hiện giờ OT mới chỉ tìm hiểu về code liên quan đến trích lọc,tổng hợp dữ liệu) mục đích để làm sao ứng dụng được vào nhu cầu thực tế trong công việc.
Vì thế mà các vấn đề liên quan đến thủ thuật gì đó OT chưa có nhu cầu tìm hiểu , nhưng sau khoảng một tuần nữa khi giải quyết xong một đống báo cáo đầu tháng thì OT sẽ quay lại tìm hiểu ạ.
Rất mong lúc đó sẽ nhận được thêm nhiều sự giúp đỡ , góp ý của bạn
Cảm ơn HeSanbi đã quan tâm.
Có lúc cần đấybác ơi. ý tưởng tắt máy không ổn lắm em chỉ cần tắt file thôi
Option Explicit
#If VBA7 Then
Public Declare PtrSafe Function MsgBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" ( _
ByVal hWnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
#Else
Public Declare Function MsgBoxTimeout Lib "user32" Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As LongPtr, ByVal lpText As String, ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, ByVal wlange As Long, ByVal dwTimeout As Long) As Long
#End If
Public Close_Time As Date
Sub start_Countdown()
Close_Time = Now() + setRunWhen(Secs:=3000)
Application.OnTime Close_Time, "close_WB"
End Sub
Sub stop_Countdown()
On Error Resume Next
Application.OnTime Close_Time, "close_WB", , False
End Sub
Sub close_wb()
If ActiveWorkbook.Path = "" Then
Application.ActiveWorkbook.SaveAs Filename:="D:\Excel\File_Temp" & Format(Now(), "yyyy-mm-dd_hh_mm") &".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
ThisWorkbook.save
End If
Dim QT
QT = MsgBoxTimeout(0, "Close OK?", "Alert", vbYesNo, 0, 60000)
If QT = vbNo Then Exit Sub
Call MsgBoxTimeout(0, "Close Now", "Alert", vbOKOnly, 0, 1000)
Application.DisplayAlerts = False
Application.Quit
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
Sub test_()
Debug.Print Format(setRunWhen(Secs:=600), "hh:mm:ss")
Debug.Print Format(setRunWhen(Secs:=600) + Now(), "hh:mm:ss")
End Sub
Function setRunWhen(Optional ByVal Hours As Long = 0, _
Optional ByVal Mins As Long = 0, _
Optional ByVal Secs As Long = 30) As Date
If Secs = 0 And Mins = 0 And Hours = 0 Then Secs = 30
If Mins = 0 And Hours = 0 And Secs > 59 Then
Mins = Secs / 60
Secs = Secs Mod 60
Hours = IIf(Mins > 59, Mins / 60, 0)
End If
setRunWhen = TimeSerial(IIf(Hours > 23, 23, IIf(Hours < 0, 0, Hours)), _
IIf(Mins > 59, 59, IIf(Mins < 0, 0, Mins)), _
IIf(Secs > 59, 59, IIf(Secs < 0, 0, Secs)))
End Function
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
stop_Countdown
'ThisWorkbook.save
End Sub
Private Sub Workbook_Open()
start_Countdown
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
stop_Countdown
start_Countdown
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
stop_Countdown
start_Countdown
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
stop_Countdown
start_Countdown
End Sub
----------------------------------------------------------------------
Kiểm thử kết quả Mảng trong Immediate với hàm dbPrint
Cái này không hoạt động khi ta sử dụng userform . tức ta mở userform đang gõ dữ liệu đến tg nó vẫn off file.Bạn thử nhé:
https://stackoverflow.com/questions/34908387/automatically-close-workbook-after-inactivity
This Workbook module:
Mã:Private Sub Workbook_BeforeClose(Cancel As Boolean) stop_Countdown ThisWorkbook.Save End Sub Private Sub Workbook_Open() start_Countdown End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Excel.Range) stop_Countdown start_Countdown End Sub
Regular Module:
Mã:Option Explicit Public Close_Time As Date Sub start_Countdown() Close_Time = Now() + TimeValue("00:00:10") Application.OnTime Close_Time, "close_WB" End Sub Sub stop_Countdown() Application.OnTime Close_Time, "close_WB", , False End Sub Sub close_wb() ThisWorkbook.Close True End Sub
Hoặc:
https://www.giaiphapexcel.com/diendan/threads/hẹn-giờ-tắt-mở-file-excel.123761/