Projektütemezés létrehozása az Excel „Click-and-Drag” funkciójával

Oszd meg most:

A következő cikk bemutatja, hogyan jelölhet ki és lekérdezhet egy naptárt a egér. Jelöljön ki és kérdezzen ki egy naptárt az egérrel

*A valós világban megnyitunk egy űrlapot, hogy tartalmas naplóbejegyzéseket olvassunk és írjunk egy adatbázisba. Ez a gyakorlat egyszerűen feltárja a right_clicking mechanikáját, és magáról a munkalapról találja meg a részleteket.

Mielőtt elkezdenénk, néhány szó magyarázat a táblázatról, amelynek működő modellje megtalálható itt .Néhány szó magyarázat a táblázatról

A folyamat

Ha rákattint egy cellára a rácson belül, az kijelöli azt a cellát, és megváltoztatja annak értékét. A kattintással és húzással kijelöl egy tartományt, és megváltoztatja annak értékeit. Ha egy cella kitöltve van, akkor törlődik, ellenkező esetben kitölti, ebben az esetben egy „*”.

Ezzel szemben a jobb_kattintás egy információ kérése a kiválasztott cellából.

Lényegében két eseményt használnak, valamint több modult.

  • Worksheet_SelectionChange amelyet egy cella vagy cellák kiválasztásakor hívunk meg.
  • Worksheet_BeforeRightClick amelyet a jobb egérgombbal hívunk meg.

A probléma

A cellára való jobb kattintás egyben kijelölést, kiváltást is jelent SelectionChange. Hagynunk kell, hogy az esemény lefusson, törölve a kiválasztott cellát, mielőtt átadná az irányítást BeforeRightClick esemény, amikor újratelepítjük a törölt cellát. De ez a művelet kiváltja a SelectionChanged ismételt eseményt, amelyet meg kell állítani, hogy ne törölje újra.

Ezt a blnLoading nevű logikai jelzővel fogjuk megtenni.

Az események

Írja be a következőt a munkalap mögötti kódablakban (tehát nem modulban).

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

Ez gondoskodik a két eseményről.

Hivatkozott kód

Adja hozzá a kódhoz a következő, feltöltő és kiürítő tartományokat:

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

Rácsvonalak karbantartása

Helyezzen be egy modult az alkalmazásba. Adja hozzá a következő kódot a rács megjelenésének megőrzéséhez. Ezt a makrórögzítőből másolták, redundanciák és minden.

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

A katasztrófa elleni védelem

Bárki, aki sokat fejleszt Excelben, tudja, hogy az összetett xlsm táblázatok időnként összeomolhatnak, és megrongálhatják a megnyitott dokumentumot. A vártnál több esetben a sérült munkafüzetet nem lehet helyreállítani az Excel helyreállítási rutinjaival. Ha nincsenek biztonsági mentések, az elvégzett munka elveszik. Ez megelőzhető olyan eszközökkel, amelyeket kifejezetten a következők végrehajtására terveztek: Excel javítás.

Szerző Bevezetés:

Felix Hooker adat-helyreállítási szakértő DataNumen, Inc., amely világelső az adat-helyreállítási technológiák területén, beleértve rar javítás és SQL helyreállítási szoftvertermékek. További információért látogasson el www.datanumen.com

Oszd meg most:

Hozzászólások lezárva.