Для каждого ххх в столбце не работает должным образом - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь преобразовать все строковые даты в число для всего столбца. Исходя из этого Вопроса , я сначала попытался:

.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)) =CDate(.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)))

, затем я подумал, что мне может понадобиться значение, поэтому я попробовал следующее:

.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)).value =CDate(.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)).value)

.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)) =CDate(.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)).value) 

.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)).value =CDate(.range(.cells(headerrow+1, ImpCol.column),.cells(LastRow, ImpCol.column)))

Итак, я провел еще какое-то исследование, нашел этот вопрос , и я предполагаю, что мне нужно go ячейка за ячейкой, поэтому я попытался настроить для каждого l oop:

'I tired both dims spearately, one at a time.  just listing what I have tried.
Dim rngCell as range
Dim rngCell as variant

For Each rngCell In Source.Worksheets("Sheet1").Columns(ImpCol.Column)
    If rngCell.Row > HeaderRow Then rngCell.Value = CDate(rngCell.Value)
Next rngCell

Когда я перехожу, ImpCol.Column имеет значение 7, как я и ожидал. Так как я просто предоставлял один столбец, я ожидал, что rngCell примет значение содержимого каждой ячейки по одному за раз. Вместо этого он захватывает весь столбец, выполняет одну проверку и не выполняет l oop.

. Я знаю, как это сделать в For X= HeaderRow +1 to LastRow, но я не понимаю, как заставить FOR EACH работать в этот случай.

Какую настройку мне нужно сделать, чтобы он прошел через каждую ячейку в FOR EACH l oop?

1 Ответ

1 голос
/ 04 февраля 2020

В общем, когда вы просматриваете что-то, всегда полезно набрать Debug.Print iterator.Address, или в случае кода ОП Debug.Print rngCell.Address.

Добавление .Cells в l oop столбца заставит его работать:

Sub TestMe()

    Dim myCell As Range
    Dim i As Long

    'filling the first 20 cells in column A with values
    For Each myCell In ThisWorkbook.Worksheets(1).Range("A1:A20")
        i = i + 1
        myCell = DateSerial(2020, 1, 1 + i)
    Next


    For Each myCell In ThisWorkbook.Worksheets(1).Columns("A").Cells
        If Len(myCell) > 0 Then
            With myCell
                .Value = CDate(myCell)
                .NumberFormat = "General"
            End With
        Else
            Exit Sub
        End If
    Next

End Sub

enter image description here

Второй l oop в коде здесь будет работать около 1.048.576 раз (2 ^ 20), если вы удалите Exit Sub, что может быть хорошо, в зависимости от бизнес-логики c.

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