Cách Xử Lý Ngày Tháng Năm Trong Code VBA (1 người xem)

Liên hệ QC

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

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,538
Được thích
4,129
Giới tính
Nam
Mình có viết một code khi sang một ngày mới mở File Excel lên thì tại [D1] tăng thêm một và cứ như vậy mỗi ngày + 1 Nhưng code phải lệ thuộc vào [A1] để nó kiểm tra ngày xong thì mới chạy code...

Vậy mình mong muốn nó kiểm tra Date ngay từ trong code luôn mà không lệ thuộc vào [A1] có được không... nếu được nhờ các Bạn trợ Giúp
Xin cảm ơn
PHP:
Sub Auto_Open()
With ActiveSheet
    If Date > .Range("A1") Then
        .Range("A1").Value = Date
        .Range("D1").Value = .Range("D1").Value + 1
    End If
End With
End Sub
 
Lần chỉnh sửa cuối:
Edit ghi chú trong code? Vụ này mới mình chưa thấy lần nào. Viết anh xem 1 cái demo đi Ninh.
Anh Hải lại trêu em rồi.
Ý tưởng của em là thế này:

Tạo 1 Module Test để ghi 2 ghi chú:

1/ Số lần mở: Opened times
2/ Ngày mở cuối cùng: Last Opened

Sau đó dùng Code khi mở Wb để xử lý cái ghi chú này. Việc ghi thẳng vào ghi chú này sẽ đơn giản hơn chỉ có điều phải tick Trust access to the VBA project model trong Macro setting.

Mã:
Sub Test()
On Error Resume Next


Dim OpTimes As Long
Dim LastOpened As Date
Dim CurDate As Date


With ThisWorkbook.VBProject.VBComponents("Test").CodeModule
    OpTimes = CLng(Right(.Lines(1, 1), 4))
    LastOpened = CDate(Right(.Lines(2, 1), 10))
    CurDate = VBA.DateSerial(Year(Now()), Month(Now()), Day(Now()))
    If LastOpened < CurDate Then
    .DeleteLines 1, 1
    .InsertLines 1, "'Opened Times: " & Format(OpTimes + 1, "0000")
    .DeleteLines 2, 1
    .InsertLines 2, "'Last Opened: " & Format(CurDate, "mm/dd/yyyy")
    End If
End With


On Error GoTo 0
End Sub

Đúng là múa rìu qua mắt thợ rồi. +-+-+-+
 
Upvote 0
Anh Hải lại trêu em rồi.
Ý tưởng của em là thế này:

Tạo 1 Module Test để ghi 2 ghi chú:

1/ Số lần mở: Opened times
2/ Ngày mở cuối cùng: Last Opened

Sau đó dùng Code khi mở Wb để xử lý cái ghi chú này. Việc ghi thẳng vào ghi chú này sẽ đơn giản hơn chỉ có điều phải tick Trust access to the VBA project model trong Macro setting.

Mã:
Sub Test()
On Error Resume Next


Dim OpTimes As Long
Dim LastOpened As Date
Dim CurDate As Date


With ThisWorkbook.VBProject.VBComponents("Test").CodeModule
    OpTimes = CLng(Right(.Lines(1, 1), 4))
    LastOpened = CDate(Right(.Lines(2, 1), 10))
    CurDate = VBA.DateSerial(Year(Now()), Month(Now()), Day(Now()))
    If LastOpened < CurDate Then
    .DeleteLines 1, 1
    .InsertLines 1, "'Opened Times: " & Format(OpTimes + 1, "0000")
    .DeleteLines 2, 1
    .InsertLines 2, "'Last Opened: " & Format(CurDate, "mm/dd/yyyy")
    End If
End With


On Error GoTo 0
End Sub

Đúng là múa rìu qua mắt thợ rồi. +-+-+-+
Mình mới thử chạy nó Êm du.......không biết xài nó kiểu gì........--=0
 
Upvote 0
Mình mới thử chạy nó Êm du.......không biết xài nó kiểu gì........--=0
Bạn tạo 1 module Test, sau đó cho vào đầu dòng lệnh số 1, 2 đoạn ghi chú
Mã:
'Opened Times: 0000
'Last Opened: 10/30/2015

Tại sự kiện Workbook_open thì gọi Sub Test lên.

Phần ghi chú Opened Times sẽ nhảy khi mở Workbook lần đầu tiên trong ngày.

Chú ý tick Trust access to the VBA project model trong Macro setting.
 
Upvote 0
Bạn tạo 1 module Test, sau đó cho vào đầu dòng lệnh số 1, 2 đoạn ghi chú
Mã:
'Opened Times: 0000
'Last Opened: 10/30/2015

Tại sự kiện Workbook_open thì gọi Sub Test lên.

Phần ghi chú Opened Times sẽ nhảy khi mở Workbook lần đầu tiên trong ngày.

Chú ý tick Trust access to the VBA project model trong Macro setting.
Thông thường nếu không có gì bí mật thì người ta lưu trực tiếp trên sheet hoặc name cho đơn giản. Nếu muốn dấu thì ít ra người ta cũng khóa VBA, vậy làm sao mà đọc với ghi ghi chú đây?
Ngoài ra, tùy mục đích mà nên chọn ghi thông tin ở đâu. Ví dụ như nếu bạn muốn giới hạn số lần sử dụng thì không nên lưu thông tin trên file để tránh trường hợp người ta copy ra nhiều file, ngược lại nếu thông tin phục vụ cho dữ liệu của file thì lưu trên file để đảm bảo đồng bộ dữ liệu khi sử dụng cùng lúc nhiều file.
 
Upvote 0
Anh Hải lại trêu em rồi.
Ý tưởng của em là thế này:

Tạo 1 Module Test để ghi 2 ghi chú:

1/ Số lần mở: Opened times
2/ Ngày mở cuối cùng: Last Opened

Sau đó dùng Code khi mở Wb để xử lý cái ghi chú này. Việc ghi thẳng vào ghi chú này sẽ đơn giản hơn chỉ có điều phải tick Trust access to the VBA project model trong Macro setting.

Mã:
Sub Test()
On Error Resume Next


Dim OpTimes As Long
Dim LastOpened As Date
Dim CurDate As Date


With ThisWorkbook.VBProject.VBComponents("Test").CodeModule
    OpTimes = CLng(Right(.Lines(1, 1), 4))
    LastOpened = CDate(Right(.Lines(2, 1), 10))
    CurDate = VBA.DateSerial(Year(Now()), Month(Now()), Day(Now()))
    If LastOpened < CurDate Then
    .DeleteLines 1, 1
    .InsertLines 1, "'Opened Times: " & Format(OpTimes + 1, "0000")
    .DeleteLines 2, 1
    .InsertLines 2, "'Last Opened: " & Format(CurDate, "mm/dd/yyyy")
    End If
End With


On Error GoTo 0
End Sub

Đúng là múa rìu qua mắt thợ rồi. +-+-+-+
Cũng là ý tưởng hay để tham khảo. Nhưng nếu có nhu cầu thì anh sẽ sử dụng file .dll và dùng phương thức SaveSetting chắc cũng tạo ra được đoạn code theo ý riêng.
 
Upvote 0
Web KT

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

Back
Top Bottom