Дараах нийтлэлд календарийг тэмдэглэж, байцаах аргыг харуулав хулгана. 
* Бодит ертөнцөд бид мэдээллийн санд өдрийн тэмдэглэл хөтлөх утга бүхий бичвэрүүдийг унших, бичих хэлбэрийг нээдэг. Энэхүү дасгал нь баруун товчлуурын механизмыг энгийнээр харуулдаг бөгөөд дэлгэрэнгүй мэдээллийг ажлын хуудаснаас өөрөө олж авдаг.
Эхлэхээсээ өмнө хүснэгтийн талаархи цөөн хэдэн тайлбарыг ажлын загварыг олж болно энд.
Үйл явц
Сүлжээний доторх нүдэн дээр дарахад тухайн нүд тодорч, түүний утга өөрчлөгдөнө. Дарж чирэх нь мужийг тодруулж утгыг нь өөрчлөх болно. Хэрэв эсийг байрлуулсан бол түүнийг цэвэрлэх болно, эс тэгвээс үүнийг "*" тэмдэгтээр дүүргэх болно.
Үүний эсрэгээр баруун_ товшилт бол сонгосон нүднээс мэдээлэл авах хүсэлт юм.
Үндсэндээ хоёр үйл явдал, хэд хэдэн модулиудын хамт ашигладаг.
- Ажлын хуудас_СонголтӨөрчил нүд эсвэл нүдийг сонгоход дууддаг.
- Ажлын хуудас_BeforeRightClick хулганы баруун товчийг дууддаг.
Асуудал
Нүдийг баруун товших нь сонголтыг бүрдүүлдэг Сонголт. Бид энэ үйл явдлыг үргэлжлүүлэн явуулж, бууж өгөхөөс өмнө сонгосон нүдийг цэвэрлэж өгөх ёстой RightRlicClick үйл явдал, бид цэвэрлэсэн нүдийг дахин дүүргэх болно. Гэхдээ энэ үйлдэл нь Сонголт өөрчлөгдсөн үйл явдлыг дахин арилгахыг зогсоох хэрэгтэй.
Үүнийг бид blnLoading нэртэй boolean далбаатай хийх болно.
Үйл явдал
Ажлын хуудасны ард кодын цонхонд дараахь зүйлийг оруулна уу (өөрөөр хэлбэл модульд ороогүй болно).
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.com
