Quản lý mục tiêu, todo_list bằng excel

Liên hệ QC

Paraduong

Thành viên mới
Tham gia
18/7/06
Bài viết
35
Được thích
86
Trong file này mình sử dụng một số thủ thuật, macro đơn giản (mình cũng chỉ biết đến đấy thôi!)
các bạn xem và cho ý kiến nhé!
 

File đính kèm

  • TO-DO LIST.xlsm
    44.4 KB · Đọc: 67
Lần chỉnh sửa cuối:
Mình không hiểu cách sử dụng, ý là tác dụng của úng dung??. Giải thích thêm để mọi người cùng tham khảo bạn nhé
 
Upvote 0
Cũng đã rất lâu rồi nay mới gặp thêm đứa con tinh thần của bạn!

Trước tiên là xin trân trọng chúc mừng!

& tâm niệm là fải góp í nhiều mới được, vui lòng chớ?

(1) Đừng có bắt chước CòGià thục đầu dòng các lệnh vô tội vạ như vậy; Hắn làm vậy là do hắn đủ trình độ kiểm soát các dòng lệnh đi đâu & về đâu, còn chúng mình thì chưa chín tới!

Theo mình nên là vầy:

PHP:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim D1, D2, D3, Rng As Range
 
 Set Rng = Range("todo01, todo02, todo03")
 If Intersect(Target, Rng) Is Nothing Then Exit Sub
 Cancel = True
 Application.ScreenUpdating = False
 On Error Resume Next
 If ActiveCell.Column > 1 And ActiveCell.Column < 9 Then
1    If ActiveCell.Column = 3 Then
        ActiveCell.Offset(0, -1).Range("A1").Select
    ElseIf ActiveCell.Column = 4 Then
        ActiveCell.Offset(0, -2).Range("A1").Select
    ElseIf ActiveCell.Column = 5 Then
        ActiveCell.Offset(0, -3).Range("A1").Select
    ElseIf ActiveCell.Column = 6 Then
        ActiveCell.Offset(0, -4).Range("A1").Select
    ElseIf ActiveCell.Column = 7 Then
        ActiveCell.Offset(0, -5).Range("A1").Select
    ElseIf ActiveCell.Column = 8 Then
        ActiveCell.Offset(0, -6).Range("A1").Select
        D1 = ActiveCell.Row
2    End If
'<=|'
30    If ActiveCell <> 1 Then
        Dim TB
        TB = MsgBox("CHON: [YES] THEM, [NO] XOA!", vbYesNoCancel, "THEM/XOA DANH MUC SAN PHAM!")
        If TB = vbYes Then
           [Todo_F1].Copy
            Range("B" & D1).Select
            ActiveCell.Range("A1:G1").Insert Shift:=xlDown
        ElseIf TB = vbNo Then
            ActiveCell.Range("A1:G1").Delete Shift:=xlUp
        End If
31    End If
    ActiveCell.Offset(1, 2).Range("A1").Select
 End If
        
 If ActiveCell.Column > 9 And ActiveCell.Column < 15 Then
4    If ActiveCell.Column = 11 Then
        ActiveCell.Offset(0, -1).Range("A1").Select
    ElseIf ActiveCell.Column = 12 Then
        ActiveCell.Offset(0, -2).Range("A1").Select
    ElseIf ActiveCell.Column = 13 Then
        ActiveCell.Offset(0, -3).Range("A1").Select
    ElseIf ActiveCell.Column = 14 Then
        ActiveCell.Offset(0, -4).Range("A1").Select
        D2 = ActiveCell.Row
5    End If
32    If ActiveCell <> 1 Then
        Dim tb2
        tb2 = MsgBox("CHON: [YES] THEM, [NO] XOA!", vbYesNoCancel, "THEM/XOA DANH MUC SAN PHAM!")
        If tb2 = vbYes Then
            [Todo_F2].Copy
            Range("J" & D2).Select
            ActiveCell.Range("A1:E1").Insert Shift:=xlDown
        ElseIf tb2 = vbNo Then
            ActiveCell.Range("A1:E1").Delete Shift:=xlUp
        End If
33    End If
    ActiveCell.Offset(1, 2).Range("A1").Select
 End If
    
 If ActiveCell.Column > 15 And ActiveCell.Column < 21 Then
6    If ActiveCell.Column = 17 Then
        ActiveCell.Offset(0, -1).Range("A1").Select
    ElseIf ActiveCell.Column = 18 Then
        ActiveCell.Offset(0, -2).Range("A1").Select
    ElseIf ActiveCell.Column = 19 Then
        ActiveCell.Offset(0, -3).Range("A1").Select
    ElseIf ActiveCell.Column = 20 Then
        ActiveCell.Offset(0, -4).Range("A1").Select
        D3 = ActiveCell.Row
7    End If
34    If ActiveCell <> 1 Then
        Dim tb3
        tb3 = MsgBox("CHON: [YES] THEM, [NO] XOA!", vbYesNoCancel, "THEM/XOA DANH MUC SAN PHAM!")
        If tb3 = vbYes Then
            [Todo_F3].Copy
            Range("P" & D3).Select
            ActiveCell.Range("A1:E1").Insert Shift:=xlDown
        ElseIf tb3 = vbNo Then
            ActiveCell.Range("A1:E1").Delete Shift:=xlUp
        End If
35    End If
    ActiveCell.Offset(1, 2).Range("A1").Select
 End If
 
 Application.CutCopyMode = False
 Application.ScreenUpdating = True
End Sub

(2)
Trong các đoạn lệnh được đánh số từ 1 => 2; 4 => 5 & 6 => 7

Ta có thể rút gọn lại còn tương ứng chỉ vài dòng lệnh

Để vậy, bạn mình hãy thử chèn các dòng lệnh sau vô ngay sau dòng lệnh được đánh số 2

Mã:
    MsgBox Selection.Address, , "1"
8    Cells(ActiveCell.Row, "B").Select
9    If ActiveCell.Column = 8 Then D1 = ActiveCell.Row
    MsgBox Selection.Address, , "2"

Khi chạy macro nếu ta thấy địa chỉ đưa ra trong MsgBox là như nhau thì ta có thể khẳng định 1 điều là hai dòng lệnh 8 & 9 này sẽ thay toàn bộ các dòng lệnh từ 1 => 2 & sẽ như vậy với các nhóm lệnh bên dưới ta vừa liệt kê.

Mình mong & chúc bạn làm được điều này trong vài buổi tới!


(3)

Chúng ta đều thấy các nhóm khối dòng lệnh (30,31); (32,33) & (34,35)
là na ná nhau

Ta có thể gộp chúng lại thành 1 macro được truyền các tham biến để chương trình tổng thể của chúng ta nhỏ, nhanh gọn & "Hàn lâm" hơn!
Muốn vậy, lúc rỗi bạn đến "Chập chững đến với VBA" của mình & đọc loạt bài về
"Đặt thừa số chung cho các macro" trước, sau đó mình hay ai đó sẽ hỗ trợ thêm để bạn nâng tầm đưa con yêu của bạn!

Chúc mọi điều tốt lành nhất đến với bạn!


(Mình vẫn rất nhớ cuộc gặp giữa mình & cộng đồng GPE Đà nẵng - 2uảng Nam!)
 
Upvote 0
Xúc động quá bác SA_DQ ah! Cầu chúc bác luôn mạnh khỏe và an lành!

Không chỉ những gì bác góp ý, mà còn tình cảm của bác dành cho "hai lúa" này!
Tiếp thu ngay lời góp ý, em đã giảm được hơn một nữa đoạn code rồi!

Do trình độ VBA còn hạn chế nên em phải gán giá trị cột B bằng 1 cho dòng nào trong vùng todo01 ko muốn xóa.
Bác chỉ giúp em câu lệnh: nếu cell hiện tại có name range là "TNSS1_CEF2" thì cũng cho kết quả tương tự vậy!

Tks bác SA_DQ nhiều lắm!
 
Upvote 0
bạn maytinhvp01 ah, cái này chỉ là trang giấy để chúng ta lên kế hoạch tổng quát và chi tiết mỗi cá nhân. Gọi là "ứng dụng' thì...không xứng lắm!
Để làm việc này thì chỉ cần sổ tay, hay bảng biểu excel đơn giản thôi chứ không mắc công như mình làm vậy!

Chẳng hạn, nếu bạn có Mục tiêu trở thành...mod diễn đàn giaiphapexcel này trong thời gian nào đó thì bạn nên ghi ra kế hoạch cụ thể để thực hiện điều này. Bạn cần "luyện" giáo trình nào, "đeo bám" mod nào để được nhận "công lực", chịu khó đọc bài và tham gia trả lời...

Chúc bạn an lành!
 
Upvote 0
Mình chưa dám chắc là đoán đúng í đồ của bạn trong việc

[thongbao]Bác chỉ giúp em câu lệnh: nếu cell hiện tại có name range là "TNSS1_CEF2" thì cũng cho kết quả tương tự vậy!
[/thongbao]

Nhưng có lẻ ta thử dùng fương thức Intersect(), mà cú fáp sẽ là:
Mã:
If Not Intersect(Selection, Range("TNSS1_CEF2")) Is Nothing Then

'. . . . .'

End If
 
Upvote 0
Quá đúng ChanhTQ@ ah! mình chỉ cần bỏ Not trong cú pháp ấy là ok.
Thường thì để không vô tình xóa các cell đã đặt tên mình phải ẩn, lock,...còn bây giờ thì có được cách này hay hơn.
Tks bạn nhiều.
 
Upvote 0
Web KT
Back
Top Bottom