შემდეგი სტატია გვიჩვენებს, თუ როგორ უნდა მონიშნოთ და დაკითხოთ კალენდარი მაუსი 
* რეალურ სამყაროში, ჩვენ გავხსნით ფორმას, რომ წავიკითხოთ და დავწეროთ მნიშვნელოვანი დღიურის ჩანაწერები მონაცემთა ბაზაში. ეს სავარჯიშო უბრალოდ ავლენს მარჯვენა_დაწკაპუნების მექანიზმს და აღმოაჩენს დეტალებს თავად სამუშაო ფურცლიდან.
სანამ დავიწყებდეთ, რამდენიმე სიტყვა ახსნა-განმარტებით ცხრილის შესახებ, რომლის სამუშაო მოდელიც შეგიძლიათ ნახოთ აქ დაწკაპუნებით.
პროცესი
ქსელის შიგნით არსებულ უჯრედზე დაწკაპუნება ხაზს უსვამს ამ უჯრედს და შეცვლის მის მნიშვნელობას. დაწკაპუნებით და ჩავლებით მონიშნავს დიაპაზონს და შეცვლის მის მნიშვნელობებს. თუ უჯრედი დასახლებულია, ის გასუფთავდება, წინააღმდეგ შემთხვევაში ის დასახლდება, ამ შემთხვევაში "*"-ით.
ამის საპირისპიროდ, მარჯვენა_დაწკაპუნება არის ინფორმაციის მოთხოვნა არჩეული უჯრედიდან.
არსებითად გამოიყენება ორი მოვლენა, რამდენიმე მოდულთან ერთად.
- Worksheet_SelectionChange რომელსაც ეწოდება უჯრედის ან უჯრედების არჩევისას.
- Worksheet_BeforeRightClick რომელსაც მაუსის მარჯვენა ღილაკით ეძახიან.
პრობლემა
უჯრედზე მარჯვენა_დაწკაპუნება ასევე წარმოადგენს არჩევანს, გააქტიურებას შერჩევის შეცვლა. ჩვენ უნდა მივცეთ საშუალება ამ მოვლენას თავისი მსვლელობისას, გავასუფთავოთ არჩეული უჯრედი, სანამ ის კონტროლს გადასცემს მას BeforeRightClick მოვლენა, როდესაც ჩვენ ხელახლა დავასახლებთ გასუფთავებულ უჯრედს. მაგრამ ეს ქმედება გამოიწვევს შერჩევა შეიცვალა კიდევ ერთხელ ღონისძიება, რომელიც უნდა შეწყდეს მისი კიდევ ერთხელ გასუფთავება.
ამას გავაკეთებთ ლოგიკური დროშით, რომელსაც ეწოდება blnLoading.
Ღონისძიებები
შეიყვანეთ შემდეგი კოდის ფანჯარაში სამუშაო ფურცლის უკან (ანუ არა მოდულში).
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
ეს ზრუნავს ორ ღონისძიებაზე.
მოხსენიებული კოდი
კოდს დაუმატეთ შემდეგი დიაპაზონების დასახლება და დეპოპულაცია:
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
ბადის ხაზების მოვლა
ჩადეთ მოდული აპლიკაციაში. დაამატეთ შემდეგი კოდი ბადის იერსახის შესანარჩუნებლად. ეს დაკოპირებულია მაკრო ჩამწერიდან, ზედმეტობებიდან და ყველა.
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
დაცვა კატასტროფისგან
ყველამ, ვინც Excel-ში ბევრს წერს, იცის, რომ რთული XLSM ცხრილები დროდადრო შეიძლება გაითიშოს, რაც გახსნილ დოკუმენტს დააზიანებს. უფრო ხშირად, ვიდრე მოსალოდნელია, დაზიანებული სამუშაო წიგნის აღდგენა Excel-ის აღდგენის რუტინებით შეუძლებელია. თუ სარეზერვო ასლები არ არსებობს, შესრულებული სამუშაო იკარგება. ამის თავიდან აცილება შესაძლებელია ისეთი ინსტრუმენტებით, რომლებიც შექმნილია... Excel-ის შესწორება.
ავტორი შესავალი:
ფელიქს ჰუკერი არის მონაცემთა აღდგენის ექსპერტი DataNumen, Inc., რომელიც მსოფლიო ლიდერია მონაცემთა აღდგენის ტექნოლოგიებში, მათ შორის rar-ის შეკეთება და sql აღდგენის პროგრამული პროდუქტები. დამატებითი ინფორმაციისთვის ეწვიეთ www.datanumen. ერთად
