2016-04-01 2 views
0

Я работаю с членами сообщества обмена стоп-пакетов за последние 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""),)") 
+0

** # Колонка 1/2/24/25 ** не является частью моего кода. Я включил это для удобочитаемости для всех. Если есть опечатка, это, вероятно, только мои ужасные навыки ввода ниндзя. – bluerojo

ответ

2

Так что это будет игнорировать пробелы:

timestart = 1  '#Column 1 
completeBad = 2 '#Column 2 
timeSet = 24  '#Column 24 
completeTime = 25 '#Column 25 
lastrow = 1000 
With Sheets(looping) 
    With .Range(.Cells(2, timestart), .Cells(lastrow, timestart)) 
     .Value = Evaluate("""'"" & INDEX(IF(" & .Address(0, 0) & "<>"""",TEXT(" & .Address(0, 0) & ",""dd/mmm/yyyy""),""""),)") 
    End With 
    With .Range(.Cells(2, completeBad), .Cells(lastrow, completeBad)) 
     .Value = Evaluate("""'"" & INDEX(IF(" & .Address(0, 0) & "<>"""",TEXT(" & .Address(0, 0) & ",""dd/mmm/yyyy""),""""),)") 
    End With 
End With 
+0

Вы, сэр, потрясающие! Большое спасибо. Опять :) – bluerojo

+1

приятно, но просто предосторожность ... См. [This] (http://stackoverflow.com/questions/18962890/2-ways-for-clearcontents-on-vba-excel-but-1-work-fine -why) –

+0

@SiddharthRout Я согласен, что OP должен назначить родительские объекты для объектов диапазона. Не видя остальной части кода, было сложно сделать какие-либо предположения. –