Artikel berikut menunjukkan cara menandai dan menginterogasi kalender dengan mouse 
* Di dunia nyata, kami akan membuka formulir untuk membaca dan menulis entri buku harian yang berarti ke database. Latihan ini hanya mengungkapkan mekanisme mengklik kanan, dan menemukan detailnya dari lembar kerja itu sendiri.
Sebelum kita mulai, beberapa kata penjelasan tentang spreadsheet, model kerja yang dapat ditemukan di sini.
Proses
Mengklik sel di dalam kisi akan menyorot sel itu dan mengubah nilainya. Klik-dan-seret akan menyorot rentang dan mengubah nilainya. Jika sebuah sel diisi, itu akan dihapus, jika tidak maka akan diisi, dalam hal ini dengan "*".
Sebaliknya, right_click adalah permintaan informasi dari sel yang dipilih.
Pada dasarnya ada dua peristiwa yang digunakan, bersama dengan beberapa modul.
- Lembar Kerja_SeleksiUbah yang disebut ketika sel atau sel dipilih.
- Lembar Kerja_SebelumKlik Kanan yang disebut dengan tombol mouse sebelah kanan.
Masalah
Mengklik kanan sel juga merupakan pilihan, memicu PilihanUbah. Kita harus membiarkan acara itu berjalan dengan sendirinya, membersihkan sel yang dipilih sebelum menyerahkan kendali ke SebelumKlik Kanank, ketika kita akan mengisi kembali sel yang telah dibersihkan. Tetapi tindakan ini akan memicu Pilihan Diubah acara lagi, yang harus dihentikan dari membersihkannya sekali lagi.
Ini akan kita lakukan dengan flag boolean yang disebut blnLoading.
Acara
Masukkan yang berikut ini di jendela kode di belakang lembar kerja (yaitu 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 menangani dua Peristiwa.
Kode yang Dirujuk
Tambahkan baris berikut, mengisi dan mendepopulasi rentang, ke kode:
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
Pemeliharaan Garis Kisi
Masukkan modul ke dalam aplikasi. Tambahkan kode berikut untuk mempertahankan tampilan kisi. Ini disalin dari perekam makro, redundansi 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 dari bencana
Siapapun yang melakukan banyak pengembangan Excel akan tahu bahwa xlsm spreadsheet yang kompleks dapat macet dari waktu ke waktu, merusak dokumen yang dibuka. Dalam lebih banyak kasus daripada yang diharapkan, buku kerja yang rusak tidak dapat dipulihkan oleh rutinitas pemulihan Excel. Jika tidak ada backup, pekerjaan yang dilakukan adalah lost. Ini dapat dicegah dengan alat yang dirancang untuk bekerja Perbaikan Excel.
Pengantar Penulis:
Felix Hooker adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk rar memperbaiki dan produk perangkat lunak pemulihan sql. Untuk informasi lebih lanjut kunjungi www.datanumen.com
