#excel #vba #date
#excel #vba #Дата
Вопрос:
У меня есть небольшая программа отслеживания, которую я создаю в Excel VBA. У меня есть пользовательская форма, которую я поддерживаю в течение дня, вводя свои задачи / данные с помощью кнопки «Добавить». В конце дня я нажимаю кнопку «Опубликовать», и она сохраняет данные на моих рабочих листах, где это уместно.
Я думал, что он завершен и работает правильно, но теперь, по-видимому, мой подраздел для выбора правильного столбца на основе даты дня не работает, и я не уверен почему, поскольку он отлично работал на протяжении всей разработки.
Эта часть жизненно важна, так как другие мои функции для публикации данных за день зависят от этого. Я прочитал много других сообщений о том, как это сделать (выбор столбца на основе текущей даты), но ни один из них не объяснил, почему мой не работает. Пытаюсь стать лучшим программистом, а не просто программистом для копирования / вставки, поэтому подумал, что попробую спросить здесь. Копирование / вставка обычно приводит меня к этим неприятностям, когда я использую инструменты / функции, которые работают, но я не знаю почему, и не могу самостоятельно устранять неполадки / отлаживать.
Мой общий проект включает в себя 5 листов, но этот подраздел должен включать только 2 из них. «Задачи» и «Отслеживание данных», оба из которых имеют строку дат.
Ниже приведен раздел, о котором идет речь.
Public Sub currentDate()
'sub to assign current date to global values
Set rng - Range("H2:HZ2")
Set myDate = rng.Find(What:=Int(Date), LookIn:=xlFormulas)
End Sub
Если я пройдусь по нему, Date укажет правильную дату, а xlFormulas покажет значение -4123 (я даже не знаю, имеет ли это значение)..
(ОБНОВЛЕНИЕ) итак, по-видимому, сегодня утром он решил работать отлично. facepalm Какие-нибудь подсказки?
(ОБНОВЛЕНИЕ) итак, как обычно, я пытаюсь добавлять функции, исправляя что-то еще, так что для решения этой проблемы потребовалось немного больше исследований, но @Super-Symmetry указал мне правильное направление! Как отмечено в комментарии ниже, я изменил заголовки дат на двух листах, чтобы они были больше похожи на ситуацию «дата начала n». Хотя его предложение использовать xlValue вместо xlFormula было на правильном пути, Find . все еще были проблемы с датой и серийным номером. В конечном итоге это то, что я должен работать:
Public Sub currentDate()
'sub to assign current date to global values
'load the date range
Set rng = Worksheets("Tasks").Range("H2:HZ2")
'load the values in the range
dateArray = Range("H2:HZ2").Value
Dim day As Variant 'object to load dateArray
Dim loc As Integer 'matches date with cell location
'converting the date to serial
For Each day In dateArray
day = CLng(day)
loc = loc 1
If day = Date Then 'we found the right column
Set myDate = rng(loc)
'selects the correct cell
If ActiveSheet.name = "Data Tracker" Then 'adjust the row
Cells(myDate.Row 3, myDate.Column).Select
Else 'sheet must be Tasks
Cells(myDate.Row 2, myDate.Column).Select
End If
Exit Sub
End If
Next
End Sub
Это не элегантно, но работает.. пожалуйста, не стесняйтесь сообщать мне, если у вас есть какие-либо более чистые способы сделать это!
Ответ №1:
Попробуйте изменить Int(Date)
на CLng(Date)
Public Sub currentDate()
'sub to assign current date to global values
Dim rng As Range, myDate As Range
Set rng = Range("H2:HZ2")
Set myDate = rng.Find(What:=CLng(Date), LookIn:=xlValues)
End Sub
Комментарии:
1. так что, к сожалению, у меня все еще та же проблема … похоже, что myDate получает значение «Ничего». (Я должен отметить, что я пытался затемнить myDate как диапазон и как вариант) Это «Ничего» приводит к сбою трекера, когда позже я пытаюсь запустить этот код:
With wsTasks.Cells(myDate.row (tskLoc(i) - 2), myDate.column)
2. 1) Хранятся ли даты на листе в виде констант или результатов формул? Если это формулы, вам нужно изменить
LookIn:=xlFormulas
наLookIn:=xlValues
. 2) Являются ли даты чистыми датами или у них тоже есть время? Другими словами, являются ли они целыми числами или у них есть десятичные (дробные) части?3. Итак, я изменил свои «заголовки» даты на StartDate w20 (значение, которое я установил, чтобы я мог легко сбросить диапазон, плюс значение в строке возрастающих чисел), и теперь даже моя формула условного форматирования (для выделения столбца дня) выдает «Объект переменная или с блочной переменной, которая не установлена». Я изменил формулу на следующую: ` Set rng = Range(«H2:HZ2») Set myDate = rng.Find(Что:= CLng(Дата), LookIn:= xlFormulas) Ячейки (myDate.row 2, myDate. Столбец. Выберите) `