Artikel berikut menunjukkan cara menandai dan menyoal siasat 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.
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

