Hvordan lage en prosjektplan med "Klikk-og-dra" i Excel

Følgende artikkel viser hvordan du markerer og avhører en kalender med mus. Merk av og forhør en kalender med musen

*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..Noen få forklaringsord om regnearket

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).

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

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 = ""
     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

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).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

Sikring mot katastrofe

Alle som driver mye med Excel-utvikling vet at komplekse xlsm-regneark kan krasje fra tid til annen og ødelegge det åpnede dokumentet. I flere tilfeller enn forventet kan ikke den skadede arbeidsboken gjenopprettes av Excels gjenopprettingsrutiner. Hvis det ikke finnes sikkerhetskopier, går arbeidet som er gjort tapt. Dette kan forhindres med verktøy som er utviklet 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

Kommentarer er stengt.