Excel'de "Tıkla ve Sürükle" ile Proje Takvimi Nasıl Oluşturulur

Şimdi paylaş:

Aşağıdaki makale, bir takvimi nasıl işaretleyeceğinizi ve sorgulayacağınızı gösterir. fare. Fare İle Bir Takvimi İşaretleyin ve Sorgulayın

*Gerçek dünyada, bir veritabanına anlamlı günlük girişleri okumak ve yazmak için bir form açardık. Bu alıştırma, sağ_tıklamanın mekaniğini basitçe ortaya koyar ve ayrıntıları çalışma sayfasının kendisinden bulur.

Başlamadan önce, çalışma modelinin bulunabileceği elektronik tablo hakkında birkaç kelimelik açıklama okuyun.Elektronik Tablo Hakkında Birkaç Açıklama

Süreç

Izgara içindeki bir hücreye tıklamak, o hücreyi vurgulayacak ve değerini değiştirecektir. Tıkla ve sürükle, bir aralığı vurgulayacak ve değerlerini değiştirecektir. Bir hücre doluysa temizlenir, aksi takdirde bu durumda bir "*" ile doldurulur.

Bir right_click, aksine, seçilen hücreden bilgi talebidir.

Birkaç modülle birlikte kullanılan esasen iki olay vardır.

  • Worksheet_SelectionChange bir hücre veya hücreler seçildiğinde çağrılır.
  • Worksheet_BeforeRightClick sağ fare tuşu ile çağrılır.

Sorun

Bir hücreye sağ_tıklamak da bir seçim oluşturur, tetiklenir SeçimDeğiştirme. Kontrolü hücreye teslim etmeden önce seçilen hücreyi temizleyerek bu olayın kendi yolunda gitmesine izin vermemiz gerekecek. ÖnceRightClick olayı, temizlenen hücreyi yeniden dolduracağımız zaman. Ancak bu eylem, SeçimDeğiştirildi bir kez daha temizlenmesinin durdurulması gereken olay.

Bunu blnLoading adlı bir boole bayrağıyla yapacağız.

Olaylar

Çalışma sayfasının arkasındaki kod penceresine aşağıdakini girin (yani bir modülde değil).

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 Olayla ilgilenir.

Başvurulan Kod

Aşağıdaki doldurma ve doldurma aralıklarını koda ekleyin:

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

Kılavuz Çizgilerin Bakımı

Uygulamaya bir modül ekleyin. Kılavuzun görünümünü korumak için aşağıdaki kodu ekleyin. Bu, makro kaydediciden, fazlalıklardan ve hepsinden kopyalandı.

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

Afete karşı koruma

Excel ile çok fazla çalışma yapan herkes, karmaşık xlsm elektronik tablolarının zaman zaman çökerek açılan belgeyi bozabileceğini bilir. Beklenenden daha fazla durumda, hasar görmüş çalışma kitabı Excel'in kurtarma rutinleri tarafından kurtarılamaz. Yedekleme yoksa, yapılan çalışma kaybolur. Bu, özel olarak tasarlanmış araçlarla önlenebilir. Excel düzeltmesi.

Yazar Tanıtımı:

Felix Hooker, veri kurtarma uzmanıdır. DataNumendahil olmak üzere veri kurtarma teknolojilerinde dünya lideri olan , Inc. rar onarımı ve sql kurtarma yazılımı ürünleri. Daha fazla bilgi için ziyaret edin www.datanumen.com

Şimdi paylaş:

Yoruma kapalı.