#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. Похоже, я неправильно понял ваш первоначальный вопрос. Однако после вашего редактирования, я думаю, я понимаю, чего вы пытаетесь избежать сейчас, и соответствующим образом обновил свой ответ. Дайте мне знать, если это не то, что вам нужно