Дата автозаполнения путем ссылки только на один номер с Excel VBA - PullRequest
0 голосов
/ 07 марта 2019

Что если бы мы могли заполнить дату, просто сославшись на число? Этот тип функций улучшит удобство использования в некоторых сценариях Excel.

Например: на мартовском листе, когда я наберу «7» в заданном столбце дат, ячейка, в которую я вставил значение, вернет «07/03/19» (или 03/07/19).

Если возможно, это означает, что мне нужно указать в коде VBA месяц и год для этого листа и изменить эту переменную для каждого отдельного листа (февраль и т. Д.). Если имена листов являются названиями месяцев (например, «Март»), может даже быть способ сделать это с помощью кода VBA с одним решением. Следующая формула использует преимущества этого, поэтому я думаю, что VBA может сделать это.

=MONTH(DATEVALUE(MID(CELL("filename";$A$1);FIND("]";CELL("filename";$A$1))+1;255)&" 1"))

Введите эту формулу на листе с именем «Март», и она вернет «3».

Я искал простой способ сделать это, но, насколько мне известно, пока нет ни одного (пока вы не несете свой свет :)). Функция проверки данных не поможет, насколько я знаю. Также важно, чтобы ячейка, в которую вставлен номер, сама заполнялась (а не другая ячейка).

Возможно ли это по крайней мере? Бьюсь об заклад, да. Мне сказали смотреть на функцию события, но я слишком мало знаю с VBA.

1 Ответ

0 голосов
/ 07 марта 2019

Это может потребоваться изменить в соответствии с вашими потребностями, но, возможно, решение, подобное этому, использует событие Worksheet_Change.

Рабочий лист Изменение порции:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo SafeExit:
    Application.EnableEvents = False
        If Target.Cells.Count = 1 Then ' 
            If Not Intersect(Target, Me.Columns("A")) Is Nothing Then 'change as needed
                Target.Value = DateFromDay(Me.Name, Target.Value)
            End If
        End If
SafeExit:
    Application.EnableEvents = True
End Sub

Основная функция

Public Function DateFromDay(monthName As String, dayNum As Integer) As Date
    On Error Resume Next
    DateFromDay = DateValue(dayNum & " " & monthName & " " & Year(Now()))
End Function

Можно также рассмотреть событие Workbook_SheetChange, чтобы добавить эту функцию на несколько листов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...