Как создать расписание проекта с помощью «щелкни и перетащи» в Excel

Поделись сейчас:

В следующей статье показано, как пометить и опросить календарь с помощью мышь. Выделите и опросите календарь с помощью мыши

* В реальном мире мы бы открыли форму для чтения и записи значимых записей дневника в базу данных. Это упражнение просто раскрывает механику правой кнопки мыши и находит детали на самом рабочем листе.

Прежде чем мы начнем, несколько пояснений о электронной таблице, рабочую модель которой можно найти здесь.Несколько пояснений о электронной таблице

Процесс

Щелчок по ячейке в сетке выделит эту ячейку и изменит ее значение. Щелкните и перетащите, чтобы выделить диапазон и изменить его значения. Если ячейка заполнена, она будет очищена, в противном случае она будет заполнена, в данном случае знаком «*».

Right_click, напротив, является запросом информации из выбранной ячейки.

По сути, используются два события, а также несколько модулей.

  • Рабочий лист_SelectionChange который вызывается при выборе ячейки или ячеек.
  • Рабочий лист_BeforeRightClick который вызывается правой кнопкой мыши.

Проблема

Щелчок правой кнопкой мыши по ячейке также представляет собой выделение, запуская ВыборИзменить. Мы должны будем позволить этому событию идти своим чередом, очищая выбранную ячейку, прежде чем она передаст управление ПередПравоКликk, когда мы повторно заполним очищенную ячейку. Но это действие вызовет Выбор изменен событие снова, которое должно быть остановлено от его очистки еще раз.

Это мы сделаем с помощью логического флага blnLoading.

События

Введите следующее в окне кода за рабочим листом (т.е. не в модуле).

Параметр Явный Dim blnLoading As Boolean Dim sPhase As String Dim currCellValue As String Dim dDate As Date Private Sub Worksheet_SelectionChange(ByVal Tarполучить как диапазон) Если ActiveCell.Row> 14 и ActiveCell.Row < 25, тогда, если ActiveCell.Column> 4 и ActiveCell.Column < 47, то «выбор действителен при ошибке. Возобновление следующего currCellValue = Target.Value 'получить tarполучить значение из (ByVal Target As Range) If blnLoading = True Then 'Значение True вызовет выход из этого события blnLoading = False Exit Sub End If sPhase = Cells(ActiveCell.Row, 1) If sPhase = "" Then Exit Sub If ActiveCell = " *" Затем, если ячейка заполнена, очистите выбранный диапазон. Вызовите ClearRange. Вызовите UnblockCalendar. Иначе Вызовите PopulateRange. End If Вызовите RedrawCells Range ("A1"). Exit Sub End If End If End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If currCellValue = "*" Then 'выбирается предыдущим событием ДО того, как оно очистит его; «Это означает, что это действительная запись в дневнике с подробностями. blnLoading = True 'это предотвратит запуск события SelectionChange (см. выше).
        Target.Select 'currCell = Target.Address 'Диапазон (currCell). Выберите

            Target.Value = "*" 'восстанавливает значение ячейки, так как SelectionChange очистил его Call PopulateRange dDate = Cells(13, ActiveCell.Column) sPhase = Cells(ActiveCell.Row, 1) MsgBox dDate & "-" & sPhase Cancel = True 'подавить стандартное контекстное меню Excel 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. Границы (xlEdgeTop). LineStyle = xlContinuous . ColorIndex = 0 . TintAndShade = 0 . 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. Границы (xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub

Защита от катастрофы

Любой, кто много занимается разработкой Excel, знает, что сложные электронные таблицы xlsm могут время от времени давать сбой, повреждая открытый документ. В большем количестве случаев, чем можно было бы ожидать, поврежденная книга не может быть восстановлена ​​процедурами восстановления Excel. Если резервных копий нет, то проделанная работа равна lost. Этого можно избежать с помощью инструментов, предназначенных для выполнения Исправление Excel.

Об авторе:

Феликс Хукер — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая rar ремонт и программные продукты для восстановления sql. Для получения дополнительной информации посетите www.datanumen.com

Поделись сейчас:

Один ответ на «Как создать расписание проекта с помощью функции «Щелкни и перетащи» в Excel»

  1. Я не уверен, где вы получаете информацию, но отличная тема. Мне нужно потратить некоторое время, чтобы узнать больше или понять больше.
    Спасибо за замечательную информацию. Я искал эту информацию для своей миссии.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *