Присваивание ячейке переменной без удаления ее исходного содержимого

StackOverflow https://stackoverflow.com/questions/802139

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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".

Это было полезно?

Решение

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

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

Другие советы

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

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

    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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top