Я работаю с членами сообщества обмена стоп-пакетов за последние 4 дня, в то время как я активно работаю в VBA (так что я использовал vba в течение 4 дней :)). У меня был вопрос, который потребовал от меня взять дату, которую представляли, и стандартизировать формат (даты были разными во всем листе). vba - set data in cell to what date is being displayedvba - Диапазон цикла предоставлен Jan1900 Ошибка даты
Это работало на то, что я пытался выполнить. Был побочный эффект, когда, если ячейка не содержала данных, она будет по умолчанию равна 01 января/1900.
Код приведен ниже.
timestart = 1 #Column 1
completeBad = 2 #Column 2
timeSet = 24 #Column 24
completeTime = 25 #Column 25
lastrow = 1000
Range(Cells(2, timeSet), Cells(lastrow, completeTime)).NumberFormat = "@"
Range(Cells(2, timeSet), Cells(lastrow, timeSet)).NumberFormat = "@"
Range(Cells(2, timestart), Cells(lastrow, timestart)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(2, timestart), Cells(lastrow, timestart)).Address(0, 0) & ",""dd/mmm/yyyy""),)")
Range(Cells(2, completeBad), Cells(lastrow, completeBad)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(2, completeBad), Cells(2, completeBad)).Address(0, 0) & ",""dd/mmm/yyyy""),)")
For Q = 2 To lastrow
Cells(Q, timeSet).Value = Cells(Q, timestart).Value
Cells(Q, completeTime).Value = Cells(Q, completeBad).Value
next Q
Ничего сумасшедшего здесь. Justs задает формат/текст ячейки и копирует данные в ячейку, настроенную для текста.
Это дает мне много ячеек с отображением 01/Jan/1900
, если ячейки timestart
и completeBad
не имеют данных.
Я пытаюсь заставить это пройти через каждую ячейку. Мой код ниже:
timestart = 1 #Column 1
completeBad = 2 #Column 2
timeSet = 24 #Column 24
completeTime = 25 #Column 25
lastrow = 1000
For Q = 2 To lastrow
If Cells(Q, timestart) <> "" Then
Range(Cells(Q, timestart), Cells(Q, timestart)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(Q, timestart), Cells(Q, timestart)).Address(0, 0) & ",""dd/mmm/yyyy""),)")
Cells(Q, timeSet).Value = Cells(Q, timestart).Value
End If
If Cells(Q, projCom) <> "" Then
Range(Cells(Q, completeBad), Cells(Q, completeBad)).Value = Evaluate("""'"" & INDEX(TEXT(" & Range(Cells(Q, completeBad), Cells(Q, completeBad)).Address(0, 0) & ",""dd/mmm/yyyy""),)")
Cells(Q, completeTime).Value = Cells(Q, completeBad).Value
End If
Я пытался использовать range
, чтобы выбрать одну ячейку по меньшей мере, с range
кодом был модифицирование моих данных для меня.
Это возвращает #VALUE!
во всех моих ячейках (для моей колонки даты, которую я вызываю). Я попробовал несколько способов только модифицировать одну ячейку за раз, и я продолжаю получать #VALUE!
, или это ошибки на моем коде, и я не могу понять, почему. Другой пример, который не работает для моего цикла, приведен ниже. Может кто-то пролить свет на то, что я делаю неправильно, вызывая либо полный код выше, либо мой код ниже (код ниже заменен range
, который использовался в моем цикле for, я просто не хотел повторять все).
Cells(Q, timestart).Value = Evaluate("""'"" & INDEX(TEXT(" & Cells(Q, timestart).Address(0, 0) & ",""dd/mmm/yyyy""),)")
** # Колонка 1/2/24/25 ** не является частью моего кода. Я включил это для удобочитаемости для всех. Если есть опечатка, это, вероятно, только мои ужасные навыки ввода ниндзя. – bluerojo