Hỏi về lâp trình tự động mở file theo thời gian? (1 người xem)

  • Thread starter Thread starter KUMI
  • Ngày gửi Ngày gửi
Liên hệ QC

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

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin chào GPE!
Em có một câu hỏi này, không biết là có vô lý quá không ạ?
Em không rành về phần mềm nếu hỏi sai phiê`n Ban Quản trị GPE xóa bài giúp em nhé!Tks!

Em muốn hỏi là có thể lập trình được file Excel đang đóng mà có thể tự mở lên khi mà đến một khoảng thời gian đã định trong file được không? (nghĩa là không cần dùng tay để mở) bất kỳ nó lưu ở đâu nhưng cứ đến 1 khoảng thời gian đã đinh thì nó sẽ mở lên.

Cụ thể là trong file đính kèm em đã đưa ra 1 ví dụ 2 mốc thời gian để tự file mở lên.

Câu hỏi này em thấy có vẻ hơi vô lý là vì không mở file thì làm sao mã lập trình hoạt động ngầm được nhỉ..Nhưng Thấy GPE có rất nhiều điều bất ngờ lên em cứ thử hỏi xem sao .. hihi

Mong GPE góp ý ạ! Xin cám ơn!
 

File đính kèm

Xin chào GPE!
Em có một câu hỏi này, không biết là có vô lý quá không ạ?
Em không rành về phần mềm nếu hỏi sai phiê`n Ban Quản trị GPE xóa bài giúp em nhé!Tks!

Em muốn hỏi là có thể lập trình được file Excel đang đóng mà có thể tự mở lên khi mà đến một khoảng thời gian đã định trong file được không? (nghĩa là không cần dùng tay để mở) bất kỳ nó lưu ở đâu nhưng cứ đến 1 khoảng thời gian đã đinh thì nó sẽ mở lên.

Cụ thể là trong file đính kèm em đã đưa ra 1 ví dụ 2 mốc thời gian để tự file mở lên.

Câu hỏi này em thấy có vẻ hơi vô lý là vì không mở file thì làm sao mã lập trình hoạt động ngầm được nhỉ..Nhưng Thấy GPE có rất nhiều điều bất ngờ lên em cứ thử hỏi xem sao .. hihi

Mong GPE góp ý ạ! Xin cám ơn!

Bạn tự mình suy luận đi!
Giả định rằng code đang có trong file, vậy khi file chưa mở thì code sẽ chạy bằng cách nào?
Có 2 giải pháp:
- Hoặc là Excel vẫn đang được mở, khi ấy code sẽ nằm trong Add-In (chẳng hạn)
- Hoặc là dùng chương trình khác, chẳng hạn Task Schedule, VB... vân vân
 
Upvote 0
Em cám ơn sự gợi ý của Thầy!
Đúng là 2 cái giải pháp của Thầy nói đến gải pháp về add-in em còn lơ tơ mơ về add-in là thế nào
còn giả pháp sau em không thể hiểu gì luôn rồi..Thầy ạ
---------------
Nói như Thầy đúng là chắc vẫn có khả năng có thể rồi nhưng có vẻ rắc rồi quá phải không Thầy?
Nếu vậy thì Em muốn đổi lại câu hỏi trên là:
Với file kèm trên của em.. Em se mở nó cả ngày làm việc luôn
Sau đó em sẽ thu nhỏ nó xuống để nó nằm ở thanh Taskbar như vậy có nghĩa là file vẫn đang mở phải không ạ?
Bây giờ em sẽ làm công việc khác không nghĩ đến file đấy nữa... Em muốn hỏi là có thể lập trình được cứ đến thời gian trong file đính kèm thì file tự động hiển thị lên và hiện thông báo "Đã đến giờ.."
Như vậy có khó không ạ?
Kính mong Thầy & mọi người trong GPE giúp đỡ thêm ạ! Em cảm ơn!
 
Upvote 0
=
Nếu vậy thì Em muốn đổi lại câu hỏi trên là:
Với file kèm trên của em.. Em se mở nó cả ngày làm việc luôn
Sau đó em sẽ thu nhỏ nó xuống để nó nằm ở thanh Taskbar như vậy có nghĩa là file vẫn đang mở phải không ạ?
Bây giờ em sẽ làm công việc khác không nghĩ đến file đấy nữa... Em muốn hỏi là có thể lập trình được cứ đến thời gian trong file đính kèm thì file tự động hiển thị lên và hiện thông báo "Đã đến giờ.."
Như vậy có khó không ạ?
Kính mong Thầy & mọi người trong GPE giúp đỡ thêm ạ! Em cảm ơn!
Cái này thì quá dễ. Nghiên cứu Application.Ontime xem
Ví dụ thế này:
Bạn gõ giờ vào 2 cell A1 và A2, xong copy code dưới đây cho vào Module
Mã:
Public arr, lCount As Long
Private Sub Msg()
  Application.WindowState = xlMaximized
  MsgBox "Da den gio!"
  Auto_Open
End Sub
Mã:
Sub Auto_Open()
  If Not IsArray(arr) Then arr = Sheet1.Range("A1:A2").Value
  lCount = lCount + 1
  lCount = ((lCount - 1) Mod UBound(arr)) + 1
  Application.WindowState = xlMinimized
  Application.OnTime CDbl(arr(lCount, 1)), "Msg"
End Sub
Bấm Alt + F8, chạy Sub Auto_Open rồi... chờ xem
 
Upvote 0
Ôi! Đúng rôì Thâỳ Ạ!Hihi!
Thầy có thể chir cho em thêm 1 vấn đề nữa được không ạ?
Như trong file kèm em đã thêm 1 cột ngày tháng. Nếu ngày thời gian tương ứng với ngày hiện tại thì sẽ hiện thông báo "Đã đến giờ"..
Liệu có khó quá không hả Thầy! Em cám ơn Thầy nhiều nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn tự mình suy luận đi!


- Hoặc là Excel vẫn đang được mở, khi ấy code sẽ nằm trong Add-In (chẳng hạn)
Bạn cho tôi hỏi:
Nếu code đặt trong Add-in thì:
Giả sử tôi có File tên "DenHan", trong File có khối D10:D100 là các ô chứa ngày tháng năm (dd/mm/yyyy)
Tôi muốn , khi mở Excel lên thì Add-in tự động kích hoạt mở File "DenHan" lên, rồi kiểm tra ngày hệ thống và khối D10:D100 nói trên, nếu có cell nào trong khối D10:D100 thỏa điều kiện: trước ngày hệ thống 2 ngày và sau ngày hệ thống 2 ngày. Ví dụ: Hôm nay là 07/03/2013 thì các cell có chứa các ngày 05/03/13 đến 09/03/13 sẽ thỏa điều kiện.
Khi có cell nào thỏa điều kiện thì vẫn giữ nguyên File "DenHan" (không đóng). Nếu không có cell nào thỏa điều kiện thì đóng File "DenHan"
Giả sử File "DenHan" đặt trong ổ D và trong thư mục Tam
Không biết, ý định của mình có thể thực hiện & viết code được không? Mong sự hỗ trợ của tất cả các bạn
Xin cảm ơn!
 
Upvote 0
Chào các bạn, không biết bài trên của mình giải quyết được không nhỉ?
Mục đích của mình là theo dõi nợ quá hạn đó
Cảm ơn!
 
Upvote 0
Chào các bạn, không biết bài trên của mình giải quyết được không nhỉ?
Mục đích của mình là theo dõi nợ quá hạn đó
Cảm ơn!

Đương nhiên là được rồi! Quy trình sẽ thế này:
- Kiểm tra sự tồn tại của file: CreateObject("Scripting.FileSystemObject").FileExists("D:\Tam\DenHan.xls") ---> Nếu có thì đi tiếp
- Mở file, so sánh Date với các giá trị tại D10:D100 rồi làm gì tiếp là tùy bạn
Tôi nghĩ code cũng khá đơn giản, bạn tự là đi (Chổ FileSystemObject e rằng bạn không biết nên tôi ghi sẵn luôn)
 
Upvote 0
Đương nhiên là được rồi! Quy trình sẽ thế này:
- Kiểm tra sự tồn tại của file: CreateObject("Scripting.FileSystemObject").FileExists("D:\Tam\DenHan.xls") ---> Nếu có thì đi tiếp
- Mở file, so sánh Date với các giá trị tại D10:D100 rồi làm gì tiếp là tùy bạn
Tôi nghĩ code cũng khá đơn giản, bạn tự là đi (Chổ FileSystemObject e rằng bạn không biết nên tôi ghi sẵn luôn)
Chào bạn
Tôi cũng đang tìm hiểu code, những vấn đề trên đối với mình chẳng đơn giản tí nào
Bạn có thể giúp mình viết luôn code được không ?
Cảm ơn các bạn!
 
Upvote 0
Chào bạn
Tôi cũng đang tìm hiểu code, những vấn đề trên đối với mình chẳng đơn giản tí nào
Bạn có thể giúp mình viết luôn code được không ?
Cảm ơn các bạn!

Thì bạn cứ tiếp tục tìm hiểu tiếp <----------- có ai là biết liền đâu __--__

Mình "đi " thử 1 đoạn bạn tham khảo <----------( không có file nên chưa thử, đúng sai do bạn tự quyết )
[GPECODE=vb]
Sub OpenFile()
Dim Today As Date, Tmparr, Item, tmp
Dim chk As Boolean, FileName$
Debug.Print chk
Today = CDate(Format(Now(), "dd/mm/yyyy"))
FileName = "D:\Tam\DenHan.xls"
With CreateObject("Scripting.FileSystemObject")
If .FileExists("D:\Tam\DenHan.xls") Then
With Application
.ScreenUpdating = 0
.DisplayAlerts = 0
.Workbooks.Open FileName
End With
Tmparr = [D10:D100].Value
For Each Item In Tmparr
If Len(Item) Then
tmp = CDate(Format(Item, "dd/mm/yyyy"))
If Abs(Today - tmp) = 2 Then chk = True
End If
Next
If chk Then
MsgBox "CHAO MUNG 8-3 "
Else
Workbooks("DenHan.xls").Close
End If
End If
End With
With Application
.ScreenUpdating = 1
.DisplayAlerts = 1
End With
End Sub[/GPECODE]
Tôi nghĩ code cũng khá đơn giản, bạn tự là đi

^^ để " đi " theo kip anhđược -> chắc là em phải mất 100 năm nữa mất !$@!!
Quá trình học VBA của em mới dừng lại ở sơ đồ dưới thôi ah ::close_tema::wiggle::wiggle::wiggle:

Nằm học --> lẫy ----> bò ----> lò dò biết đi ----->.............

HAPPY WOMEN"S DAY !
 
Lần chỉnh sửa cuối:
Upvote 0
Thì bạn cứ tiếp tục tìm hiểu tiếp <----------- có ai là biết liền đâu __--__

Mình "đi " thử 1 đoạn bạn tham khảo <----------( không có file nên chưa thử, đúng sai do bạn tự quyết )
Mã:
Sub OpenFile()
    [COLOR=#ff0000]Dim Today As Date[/COLOR], Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
        Debug.Print chk
        [COLOR=#ff0000]Today = CDate(Format(Now(), "dd/mm/yyyy"))[/COLOR]
        FileName = "D:\Tam\DenHan.xls"
        With CreateObject("Scripting.FileSystemObject")
                If .FileExists("D:\Tam\DenHan.xls") Then
                    With Application
                        .ScreenUpdating = 0
                        .DisplayAlerts = 0
                        .Workbooks.Open FileName
                    End With
                    Tmparr = [D10:D100].Value
                    For Each Item In Tmparr
                        If Len(Item) Then
                            [COLOR=#ff0000]tmp = CDate(Format(Item, "dd/mm/yyyy"))[/COLOR]
                            If Abs(Today - tmp) = 2 Then chk = True
                        End If
                    Next
                    If chk Then
                        MsgBox "CHAO MUNG 8-3  "
                    Else
                        Workbooks("DenHan.xls").Close
                    End If
                End If
        End With
        With Application
            .ScreenUpdating = 1
            .DisplayAlerts = 1
        End With
End Sub
Today = CDate(Format(Now(), "dd/mm/yyyy"))
Đơn giản sao không là thế này: Today = DateDim Today as Long cho khỏe
Mấy chổ màu đỏ là những chổ có thể sửa lại
 
Lần chỉnh sửa cuối:
Upvote 0
Hix! Thấy mọi người tra đổi nhiệt tình ở chủ đề của mình em thấy vui quá! Nhưng chẳng hiểu gì hết cả hihi ..
GPE giúp em giải quyết bài #5 với ạ?
Em xin cảm ơn!
 
Upvote 0
Thì bạn cứ tiếp tục tìm hiểu tiếp <----------- có ai là biết liền đâu __--__

Mình "đi " thử 1 đoạn bạn tham khảo <----------( không có file nên chưa thử, đúng sai do bạn tự quyết )
[GPECODE=vb]
Sub OpenFile()
Dim Today As Date, Tmparr, Item, tmp
Dim chk As Boolean, FileName$
Debug.Print chk
Today = CDate(Format(Now(), "dd/mm/yyyy"))
FileName = "D:\Tam\DenHan.xls"
With CreateObject("Scripting.FileSystemObject")
If .FileExists("D:\Tam\DenHan.xls") Then
With Application
.ScreenUpdating = 0
.DisplayAlerts = 0
.Workbooks.Open FileName
End With
Tmparr = [D10:D100].Value
For Each Item In Tmparr
If Len(Item) Then
tmp = CDate(Format(Item, "dd/mm/yyyy"))
If Abs(Today - tmp) = 2 Then chk = True
End If
Next
If chk Then
MsgBox "CHAO MUNG 8-3 "
Else
Workbooks("DenHan.xls").Close
End If
End If
End With
With Application
.ScreenUpdating = 1
.DisplayAlerts = 1
End With
End Sub[/GPECODE]


^^ để " đi " theo kip anhđược -> chắc là em phải mất 100 năm nữa mất !$@!!
Quá trình học VBA của em mới dừng lại ở sơ đồ dưới thôi ah ::close_tema::wiggle::wiggle::wiggle:

Nằm học --> lẫy ----> bò ----> lò dò biết đi ----->.............

HAPPY WOMEN"S DAY !
Hi, đây cũng là chủ đề em đã từng tìm hiểu
Để phù hợp em đã chỉnh sửa code 1 chút
Mã:
Sub Auto_Open()
    Dim Today As Date, Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
        Debug.Print chk
        Today = CDate(Format(Now(), "dd/mm/yyyy"))
        FileName = "D:\My Dropbox\Se_In\SuKien.xls"
        With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:\My Dropbox\Se_In\SuKien.xls" 'them
                If .FileExists("D:\My Dropbox\Se_In\SuKien.xls") Then
                    With Application
                        .ScreenUpdating = 0
                        .DisplayAlerts = 0
                        .Workbooks.Open FileName
                    End With
                    Tmparr = Sheets("Y").Range("D5:D100").Value
                    For Each Item In Tmparr
                        If Len(Item) Then
                            tmp = CDate(Format(Item, "dd/mm/yyyy"))
                            If Today - tmp >= -2 And Today - tmp <= 1 Then chk = True
                        End If
                    Next
                    If chk Then
                        MsgBox "Co ngay den han! Ban xem lai! "
                    Else
                        Workbooks("SuKien.xls").Close
                    End If
                End If
        End With
        With Application
            .ScreenUpdating = 1
            .DisplayAlerts = 1
        End With
End Sub
Code trên em chép vào 1 Module của 1 Add-in, như vậy khi khởi động Excel, nếu thỏa mãn điều kiện If Today - tmp >= -2 And Today - tmp <= 1 Then chk = True
thì được thông báo "Co ngay den han! Ban xem lai! "
Tuy nhiên, vì nó thông báo kiểu chung chung quá, em muốn nó thông báo cụ thể hơn.
Ví dụ:
Tại Sheet "Y", Cell D5 là 08/03/13 và cell C5 có nội dung "Chúc mừng Ngày 8/3", như vậy cell D5 đã thỏa điều kiện trên và đồng thời Msg thông báo "Chúc mừng Ngày 8/3"
Tương tự đến gần ngày 30/06/2013 thì sẽ thông báo "Mừng sinh nhật Excel lần thứ 8"
Và dĩ nhiên có nhiều cell thỏa mãn điều kiện thì sẽ có nhiều thông báo!
---------
Mong các thầy cô & anh chị giúp em sửa code
Em cảm ơn!
-----------
P/s: cũng đã cố sửa, nhưng chỉ sửa được như trên
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hic, Em cũng đã mày mò được!
Nhờ các Thầy & anh chị xem
Mã:
Sub Auto_Open()
    Dim Today As Date, Tmparr, Item, tmp
    Dim chk As Boolean, FileName$
    Dim i, Arr(), Text As String
   Text = "CHU1 Y1: "
    Debug.Print chk
    Today = CDate(Format(Now(), "dd/mm/yyyy"))
    FileName = "D:\My Dropbox\Se_In\SuKien.xls"
    With CreateObject("Scripting.FileSystemObject")
        Workbooks.Open "D:\My Dropbox\Se_In\SuKien.xls"    'them
        If .FileExists("D:\My Dropbox\Se_In\SuKien.xls") Then
            With Application
                .ScreenUpdating = 0
                .DisplayAlerts = 0
                .Workbooks.Open FileName
            End With
            Tmparr = Sheets("Y").Range("D5:D1000").Value
            For Each Item In Tmparr
                If Len(Item) Then
                    tmp = CDate(Format(Item, "dd/mm/yyyy"))
                    
                    If Today - tmp >= -3 And Today - tmp <= 2 Then chk = True


                End If
            Next
            If chk Then
                 
                With Sheets("Y")
                    Arr = Range([D5], [D65536].End(3))
                    For i = 1 To UBound(Arr)
                        If Arr(i, 1) <> "" Then
                            If Today - Arr(i, 1) >= -3 And Today - Arr(i, 1) <= 2 Then
                                CreateObject("WScript.Shell").Popup UniConvert(Text, "VNI") & Cells(i + 4, 2).Value, , "THÔNG BÁO by H.V", vbOKOnly


                            End If
                        End If
                    Next
                End With
            Else
                Workbooks("SuKien.xls").Close
            End If
        End If
    End With
    With Application
        .ScreenUpdating = 1
        .DisplayAlerts = 1
    End With
End Sub
 
Upvote 0
Ôi! Đúng rôì Thâỳ Ạ!Hihi!
Thầy có thể chir cho em thêm 1 vấn đề nữa được không ạ?
Như trong file kèm em đã thêm 1 cột ngày tháng. Nếu ngày thời gian tương ứng với ngày hiện tại thì sẽ hiện thông báo "Đã đến giờ"..
Liệu có khó quá không hả Thầy! Em cám ơn Thầy nhiều nhiều!

Không khó nhưng chắc là cũng hết cách rồi bạn ạ!
 
Upvote 0

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

Back
Top Bottom