Альтернатива VBA для xlToRight (без выбора / выбора)

#excel #vba

#excel #vba

Вопрос:

Не могли бы вы помочь мне с альтернативой « select » и « selection » и « End(xlToRight) » — я хочу использовать значение крайней правой ячейки (строка 1) в If приведенном ниже заявлении, но без активации листа и выбора ячеек. Пожалуйста, сообщите, спасибо.

 d.Activate: Range("C1").Select: Selection.End(xlToRight).Select
If Selection <> DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1) Then
Debug.Print "add DATE"
d.Range("C1").End(xlToRight).Offset(0, 1).Value = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1)
Else
Debug.Print "do not add DATE"
End If
  

Комментарии:

1. Учитывая синтаксис DateSerial as DateSerial([Year], [Month], [Day]) , вы нашли DateSerial(Year(Date), Month(Date) - 1, 1) слишком скучным?

Ответ №1:

Предполагая, что переменная «d» является ссылкой на лист, вы можете получить «крайнюю правую» ячейку с помощью End(xlToLeft) , начиная с последнего столбца на листе ( d.Columns.Count ) и сохранить диапазон в переменной следующим образом:

 Dim myRange As Range
    
Set myRange = d.Cells(1, d.Columns.Count).End(xlToLeft)
  

Затем просто используйте переменную вместо любых операторов select, которые вы используете:

 Dim myRange As Range

Set myRange = d.Cells(1, d.Columns.Count).End(xlToLeft)

If myRange <> DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1) Then
    Debug.Print "add DATE"
    myRange.Offset(0, 1).Value = DateSerial(Year(DateAdd("m", -1, Now)), Month(DateAdd("m", -1, Now)), 1)
Else
    Debug.Print "do not add DATE"
End If
  

Комментарии:

1. Похоже, я неправильно понял ваш первоначальный вопрос. Однако после вашего редактирования, я думаю, я понимаю, чего вы пытаетесь избежать сейчас, и соответствующим образом обновил свой ответ. Дайте мне знать, если это не то, что вам нужно