Назначение ячейки переменной без удаления ее исходного содержимого - PullRequest
0 голосов
/ 29 апреля 2009

Я настраиваю несколько VBA в Excel, чтобы сравнить две даты, чтобы увидеть, совпадают ли они. У меня проблема в том, что после присвоения переменной ячейки «ActualStartDate» он удаляет все из ячейки. Таким образом, ActualStartDate назначается правильно, но в то же время удаляется.

Вот мой код, любая помощь будет фантастической. (это активная ячейка, потому что это все относительные ссылки)

Dim ActualStartDate, ProjectedStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = ProjectedStartDate
If ActualStartDate = ProjectedStartDate Then
    ActiveCell.Offset(-1, -1).Range("A1").Interior.Color = RGB(0, 0, 255)
End If

Когда он запускается, он признает мои даты испытаний одинаковыми и окрашивает ячейку. Он просто удаляет содержимое ячейки, которая содержит «ActualStartDate»

Ответы [ 2 ]

1 голос
/ 29 апреля 2009

Все, что мы делаем, это перемещаем одну ячейку вверх, одну ячейку влево и заменяем значение этой ячейки ничем.

Dim ActualStartDate
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = ActualStartDate

Вы создаете переменную ActualStartDate, но никогда ничего ей не назначаете. Поэтому, когда вы применяете значение переменной ActualStartDate к ячейке, оно «удаляет» существующую дату.

Возможно, вы захотите сделать что-то более похожее на это, хотя я не уверен насчет смещений, потому что не знаю, как вы создали свою электронную таблицу.

Sub Button1_Click()
    Dim ActualStartDate, ProjectedStartDate
    ActiveCell.Offset(-1, -1).Select
    ActualStartDate = ActiveCell.FormulaR1C1
    ActiveCell.Offset(1, 0).Select
    ProjectedStartDate = ActiveCell.FormulaR1C1
    If ActualStartDate = ProjectedStartDate Then
        ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
    End If
End Sub
0 голосов
/ 29 апреля 2009

Выбор ячеек перед изменением их значения не требуется, и FormulaR1C1 является излишним, так как вы не вводите диапазон в формуле. Следующее должно делать то же самое, но я думаю, что легче следовать и отлаживать.

** То же предостережение, что и у Джима относительно смещений, они выглядят немного странно, но, возможно, это то, что задумано **

</p> <pre> Dim ActualStartDate, ProjectedStartDate ActualStartDate = ActiveCell.Offset(-1, -1) ProjectedStartDate = ActiveCell.Offset(1, 0) If ActualStartDate = ProjectedStartDate Then ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255) End If

Явное объявление типа ваших переменных как Date также является хорошей идеей, так как в противном случае они хранятся внутри как Variant тип данных, который требует больше памяти и может привести к непредвиденным последствиям, так как на Excel остается ответственность решая, как обрабатывать данные.


    Dim ActualStartDate as Date
    Dim ProjectedStartDate as Date

    ActualStartDate = ActiveCell.Offset(-1, -1)
    ProjectedStartDate = ActiveCell.Offset(1, 0)

    If ActualStartDate = ProjectedStartDate Then
        ActiveCell.Offset(-1, -1).Interior.Color = RGB(0, 0, 255)
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...