Cara Membuat Jadual Projek dengan "Klik-dan-Seret" di Excel

Kongsi Sekarang:

Artikel berikut menunjukkan cara menandai dan menyoal siasat kalendar dengan tetikus. Tandakan dan Selidik Kalendar Dengan Tetikus

* Di dunia nyata, kita akan membuka borang untuk membaca dan menulis entri buku harian yang bermakna ke pangkalan data. Latihan ini hanya memperlihatkan mekanisme klik kanan dan mencari perincian dari lembaran kerja itu sendiri.

Sebelum kita memulakan, beberapa kata penjelasan mengenai hamparan, model yang boleh didapati di sini.Beberapa Kata Penjelasan Mengenai Hamparan

Proses

Mengklik sel dalam grid akan menonjolkan sel itu dan mengubah nilainya. Klik dan seret akan menyerlahkan julat dan mengubah nilainya. Sekiranya sel diisi, ia akan dihapus, jika tidak, sel akan diisi, dalam hal ini dengan tanda "*".

Klik kanan_sebaliknya adalah permintaan maklumat dari sel yang dipilih.

Pada dasarnya terdapat dua acara yang digunakan, bersama dengan beberapa modul.

  • Lembaran Kerja_Pilihan Tukar yang dipanggil apabila sel atau sel dipilih.
  • Lembaran Kerja_SebelumRightKlik yang dipanggil dengan butang tetikus kanan.

Masalah

Mengklik kanan sel juga merupakan pilihan, mencetuskan Perubahan Pilihan. Kita harus membiarkan acara itu berjalan lancar, membersihkan sel yang dipilih sebelum menyerahkan kawalan kepada BeforeRightClicacara k, apabila kita akan mengisi semula sel yang dibersihkan. Tetapi tindakan ini akan mencetuskan Pemilihan Berubah sekali lagi, yang harus dihentikan daripada membersihkannya sekali lagi.

Ini akan kita lakukan dengan boolean flag yang disebut blnLoading.

Peristiwa

Masukkan yang berikut di tetingkap kod di belakang lembaran kerja (iaitu tidak dalam modul).

Option Explicit

    Dim blnLoading As Boolean
    Dim sPhase As String
    Dim currCellValue As String
    Dim dDate As Date

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If ActiveCell.Row > 14 And ActiveCell.Row < 25 Then
         If ActiveCell.Column > 4 And ActiveCell.Column < 47 Then 'selection is valid
 
             On Error Resume Next
             currCellValue = Target.Value 'get the target value from (ByVal Target As Range)
 
             If blnLoading = True Then 'a value of True will force an exit from this event
                 blnLoading = False
                 Exit Sub
             End If
 
             sPhase = Cells(ActiveCell.Row, 1)
             If sPhase = "" Then Exit Sub
 
             If ActiveCell = "*" Then 'if the cell is populated, clear the selected range
                 Call ClearRange
                 Call UnblockCalendar
             Else
                 Call PopulateRange
             End If
 
             Call RedrawCells
             Range("A1").Select 'revive the SelectionChange event by changing selection.
             Exit Sub
         End If
     End If
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     If currCellValue = "*" Then   'picked up by the previous event BEFORE it cleared it;
                                     'This means this is a valid diary entry with detail.
        blnLoading = True    'this will prevent the SelectionChange event (above) from running.
        Target.Select
        'currCell = Target.Address
        'Range(currCell).Select

            Target.Value = "*" 're-instate the value of the cell, since SelectionChange has cleared it
            Call PopulateRange
            dDate = Cells(13, ActiveCell.Column)
            sPhase = Cells(ActiveCell.Row, 1)
            MsgBox dDate & " - " & sPhase
        Cancel = True 'suppress Excel’s standard right_click menus
    End If
    Range("A1").Select
        blnLoading = False
End Sub

Ini mengurus dua Acara.

Kod yang Dirujuk

Tambahkan rentang berikut, mengisi dan depopulasi ke kod:

Sub ClearRange()
     Selection.FormulaR1C1 = ""
     With Selection.Interior
         .Pattern = xlNone
         .TintAndShade = 0
         .PatternTintAndShade = 0
     End With
End Sub

Sub PopulateRange()
     Selection.FormulaR1C1 = "*"
     With Selection.Interior
         .Pattern = xlSolid
         .PatternColorIndex = xlAutomatic
         .ThemeColor = xlThemeColorLight2
         .TintAndShade = 0.799981688894314
         .PatternTintAndShade = 0
     End With
End Sub

Penyelenggaraan Garis Garis

Masukkan modul ke dalam aplikasi. Tambahkan kod berikut untuk mengekalkan rupa grid. Ini disalin dari perakam makro, kelebihan dan semua.

Option Explicit

Sub UnblockCalendar()
     Selection.FormulaR1C1 = ""
     With Selection
         Selection.Borders(xlDiagonalDown).LineStyle = xlNone
         Selection.Borders(xlDiagonalUp).LineStyle = xlNone
         Selection.Borders(xlEdgeLeft).LineStyle = xlNone
         Selection.Borders(xlEdgeTop).LineStyle = xlNone
         Selection.Borders(xlEdgeBottom).LineStyle = xlNone
         Selection.Borders(xlEdgeRight).LineStyle = xlNone
         Selection.Borders(xlInsideVertical).LineStyle = xlNone
         Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
     End With
End Sub

Sub RedrawCells()
     Selection.Borders(xlDiagonalDown).LineStyle = xlNone
     Selection.Borders(xlDiagonalUp).LineStyle = xlNone
     With Selection.Borders(xlEdgeLeft)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
     With Selection.Borders(xlEdgeTop)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
     With Selection.Borders(xlEdgeBottom)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
     With Selection.Borders(xlEdgeRight)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
     With Selection.Borders(xlInsideVertical)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
     With Selection.Borders(xlInsideHorizontal)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
End Sub

Melindungi daripada malapetaka

Sesiapa yang melakukan banyak pengembangan Excel akan mengetahui bahawa spreadsheet xlsm yang rumit boleh rosak dari semasa ke semasa, merosakkan dokumen yang dibuka. Dalam lebih banyak kes daripada yang diharapkan, buku kerja yang rosak tidak dapat dipulihkan oleh rutin pemulihan Excel. Sekiranya tidak ada sandaran, kerja yang dilakukan adalah lost. Ini dapat dicegah dengan alat yang dirancang untuk berfungsi Pembaikan Excel.

Pengenalan Pengarang:

Felix Hooker adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk rar pembaikan dan produk perisian pemulihan sql. Untuk maklumat lebih lanjut, lawati www.datanumen.com

Kongsi Sekarang:

Ruangan komen telah ditutup.