Naslednji članek prikazuje, kako označiti in zaslišati koledar z miška. 
* V resničnem svetu bi odprli obrazec za branje in zapisovanje pomembnih dnevniških zapisov v bazo podatkov. Ta vaja preprosto razkrije mehaniko klikanja z desno tipko in najde podrobnosti na samem delovnem listu.
Preden začnemo, nekaj besed razlage o preglednici, katere delovni model je mogoče najti tukaj.
Proces
S klikom na celico v mreži boste to celico označili in ji spremenili vrednost. S klikom in povlečenjem bo obseg označen in spremenjene njegove vrednosti. Če je celica naseljena, bo izbrisana, sicer pa v njej, v tem primeru z "*".
Desni_klik za razliko je zahteva za informacije iz izbrane celice.
V bistvu se uporabljata dva dogodka, skupaj z več moduli.
- Sprememba delovnega lista ki se imenuje, ko je izbrana celica ali celice.
- Delovni list_BeforeRightClick ki ga pokliče desni gumb miške.
Težava
Desni_klik na celico je tudi izbor, ki sproži IzbiraSpremeni. Morali bomo pustiti, da se ta dogodek požene in počistiti izbrano celico, preden preda nadzor nad PredRightClick dogodek, ko bomo znova naselili očiščeno celico. Toda to dejanje bo sprožilo Izbor spremenjen dogodka, ki ga je treba ustaviti, da ga še enkrat ne počistite.
To bomo storili z logično zastavico z imenom blnLoading.
Dogodki
V okno s kodo za delovnim listom vnesite naslednje (tj. Ne v 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
To poskrbi za oba dogodka.
Navedena koda
Kodi dodajte naslednje obsege zapolnjevanja in odstranjevanja prebivalstva:
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
Vzdrževanje mrežnih vodov
V aplikacijo vstavite modul. Dodajte naslednjo kodo za vzdrževanje videza mreže. To je bilo kopirano iz makro zapisovalnika, odpuščanja in vse.
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
Zaščita pred katastrofo
Vsak, ki se veliko ukvarja z razvojem v Excelu, ve, da se lahko kompleksne preglednice xlsm občasno sesujejo in poškodujejo odprt dokument. V več primerih, kot bi pričakovali, poškodovanega delovnega zvezka ni mogoče obnoviti z Excelovimi obnovitvenimi rutinami. Če ni varnostnih kopij, se opravljeno delo izgubi. To je mogoče preprečiti z orodji, zasnovanimi za izvajanje Popravek v Excelu.
Uvod avtorja:
Felix Hooker je strokovnjak za obnovitev podatkov v DataNumen, Inc., ki je vodilna na svetu na področju tehnologij za obnovitev podatkov, vključno z popravilo rar-ja in sql programske izdelke za obnovitev. Za več informacij obiščite www.datanumen.com
