Aşağıdakı məqalədə təqvimi necə qeyd etmək və sorğulamaq olar siçan. 
*Real dünyada biz verilənlər bazasına mənalı gündəlik qeydlərini oxumaq və yazmaq üçün bir forma açardıq. Bu məşq sadəcə olaraq sağa_klikləmənin mexanikasını açır və iş vərəqinin özündən təfərrüatları tapır.
Başlamazdan əvvəl elektron cədvəl haqqında bir neçə kəlmə izahat verəcəyik, onun iş modeli tapıla bilər burada.
Proses
Şəbəkədəki xananın üzərinə klikləməklə həmin xana vurğulanacaq və dəyəri dəyişəcək. Klikləyin və sürükləyin, aralığı vurğulayacaq və onun dəyərlərini dəyişəcək. Hüceyrə doldurulubsa, o, təmizlənəcək, əks halda, bu halda "*" işarəsi ilə doldurulacaq.
Əksinə sağa_klik seçilmiş xanadan məlumat tələbidir.
Bir neçə modulla birlikdə əsasən iki hadisə istifadə olunur.
- Worksheet_SelectionChange xana və ya xana seçildikdə çağırılır.
- İş səhifəsi_Sağ Klikdən əvvəl siçanın sağ düyməsi ilə çağırılır.
Problem
Hüceyrəni sağa_klikləmək də seçim, tetiklemeyi təşkil edir Seçimdəyişmə. Biz həmin hadisənin öz gedişatına icazə verməliyik, nəzarəti ələ keçirməzdən əvvəl seçilmiş hüceyrəni təmizləyəcəyik BeforeRightClick hadisəsi, təmizlənmiş xananı yenidən dolduracağımız zaman. Amma bu hərəkəti tetikleyecek Seçim dəyişdirildi hadisəni yenidən təmizləmək üçün dayandırılmalıdır.
Bunu biz blnLoading adlı boolean bayrağı ilə edəcəyik.
Tədbirlər
İş vərəqinin arxasındakı kod pəncərəsinə aşağıdakıları daxil edin (yəni modulda deyil).
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
Bu, iki Hadisənin qayğısına qalır.
İstinad Kodu
Koda aşağıdakı, məskunlaşma və boşalma diapazonlarını əlavə edin:
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
Şəbəkə xətlərinin saxlanması
Proqrama modul daxil edin. Şəbəkənin görünüşünü qorumaq üçün aşağıdakı kodu əlavə edin. Bu, makro yazıcıdan, ehtiyatlardan və hər şeydən kopyalanıb.
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
Fəlakətdən qorunma
Excel ilə çox məşğul olan hər kəs bilir ki, mürəkkəb xlsm cədvəlləri zaman-zaman sıradan çıxa bilər və açılmış sənədi zədələyə bilər. Gözləniləndən daha çox hallarda zədələnmiş iş kitabı Excel-in bərpa prosedurları ilə bərpa edilə bilməz. Yedəkləmə yoxdursa, görülən iş itirilir. Bunun qarşısını aşağıdakıları yerinə yetirmək üçün hazırlanmış alətlərlə almaq olar. Excel düzəlişi.
Müəllif Giriş:
Feliks Hooker məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc rar təmiri və sql bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com
