Følgende artikkel viser hvordan du markerer og avhører en kalender med mus.
*I den virkelige verden ville vi åpne et skjema for å lese og skrive meningsfulle dagbokoppføringer til en database. Denne øvelsen avslører ganske enkelt mekanikken ved høyreklikking, og finner detaljene fra selve regnearket.
Før vi begynner, noen få forklaringsord om regnearket, som du kan finne en arbeidsmodell av her..
Prosessen
Ved å klikke på en celle i rutenettet fremheves den cellen og endre verdien. Klikk-og-dra vil fremheve et område og endre verdiene. Hvis en celle er fylt ut, vil den bli tømt, ellers vil den fylles ut, i dette tilfellet med en "*".
Et høyreklikk er derimot en forespørsel om informasjon fra den valgte cellen.
Det er i hovedsak to hendelser som brukes, sammen med flere moduler.
- Worksheet_SelectionChange som kalles når en eller flere celler er valgt.
- Arbeidsark_BeforeRightClick som kalles opp av høyre museknapp.
Problemet
Høyreklikke på en celle utgjør også et utvalg, utløsende Valg Endre. Vi må la hendelsen gå sin gang, og tømme den valgte cellen før den overgir kontrollen til Før Høyreklikkk-hendelse, når vi skal fylle den slettede cellen på nytt. Men denne handlingen vil utløse Valg Endret hendelsen igjen, som må stoppes fra å fjerne den igjen.
Dette gjør vi med et boolsk flagg kalt blnLoading.
Arrangementene
Skriv inn følgende i kodevinduet bak regnearket (altså ikke i en modul).
Alternativ Eksplisitt Dim blnLoading As Boolean Dim sPhase As String Dim currCellValue As String Dim dDate As Date Private Sub Worksheet_SelectionChange(ByVal Target As Range) Hvis ActiveCell.Row > 14 Og ActiveCell.Row < 25 Then If ActiveCell.Column > 4 And ActiveCell.Column < 47 Da er valget gyldig ved feil Gjenoppta neste currCellValue = Target.Value 'få den tarfå verdi fra (ByVal Target As Range) If blnLoading = True Da vil en verdi på True tvinge en exit fra denne hendelsen blnLoading = False Exit Sub End If sPhase = Cells(ActiveCell.Row, 1) If sPhase = "" Then Exit Sub If ActiveCell = " *" Deretter 'hvis cellen er fylt ut, fjern det valgte området Call ClearRange Call UnblockCalendar Else Call PopulateRange End If Call RedrawCells Range("A1"). Velg 'revive SelectionChange-hendelsen ved å endre valg. Exit Sub End If End If End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If currCellValue = "*" Deretter 'plukket opp av forrige hendelse FØR den fjernet den; «Dette betyr at dette er en gyldig dagbokoppføring med detaljer. blnLoading = True 'dette vil forhindre at SelectionChange-hendelsen (over) kjører. Target.Velg 'currCell = Target.Address 'Range(currCell). Velg Target.Value = "*" 'innstill verdien til cellen på nytt, siden SelectionChange har fjernet den Call PopulateRange dDate = Cells(13, ActiveCell.Column) sPhase = Cells(ActiveCell.Row, 1) MsgBox dDate & " - " & sPhase Cancel = True 'undertrykk Excels standard høyreklikk-menyer End If Range("A1"). Velg blnLoading = False End Sub
Dette tar seg av de to arrangementene.
Referert kode
Legg til følgende områder for utfylling og utfylling til koden:
Sub ClearRange() Selection.FormulaR1C1 = "" Med Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub Sub PopulateRange() Selection.FormulaR1C1 = "*" Med Selection.Interiorl.Solidn = x. PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 .PatternTintAndShade = 0 End With End Sub
Vedlikehold av rutenett
Sett inn en modul i applikasjonen. Legg til følgende kode for å opprettholde utseendet til rutenettet. Dette ble kopiert fra makroopptakeren, redundanser og alt.
Option Explicit Sub UnblockCalendar() Selection.FormulaR1C1 = "" With Selection Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft =LineTopneyle)xlEdgeLeft =LineTnedlxion). .LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlIngen Selection.Borders(xlIngenSubsideStyle(xlIngenSubrikEnd). ells () Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex =lContinuous .ColorIndex Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ThorIndex ion. Borders (Xledgeright) .Linestyle = xlContinuous .ColorIndex = 0 .TintandShade = 0 .vekt = xlthin End med med utvalg.Border (xlinsidEvertical) .Linestyle = xlContinuous .ColorIndex = 0. Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub
Sikring mot katastrofe
Alle som driver mye med Excel-utvikling vil vite at komplekse xlsm-regneark kan krasje fra tid til annen, og ødelegge det åpnede dokumentet. I flere tilfeller enn forventet, kan den skadede arbeidsboken ikke gjenopprettes av Excels gjenopprettingsrutiner. Hvis det ikke er sikkerhetskopier, er arbeidet som er utførtost. Dette kan forhindres med verktøy designet for å utføre Excel-fiks.
Forfatterintroduksjon:
Felix Hooker er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert rar reparasjon og sql-programvareprodukter. For mer informasjon besøk www.datanumen. Med
Jeg er ikke sikker på hvor du henter informasjonen din, men flott emne. Jeg må bruke litt tid på å lære mer eller forstå mer.
Takk for fantastisk informasjon. Jeg lette etter denne informasjonen for oppdraget mitt.