добро пожаловать в SO.
Вы можете строить динамические диапазоны, хотя вам придется изменить свой подход к нему.
Если вы хотите использовать объект Range так, как вы его используете в данный момент, вам понадобится что-то похожее:
Dim opendate as String, enddate as String 'Not as Double!
opendate = "D20"
enddate = "D40"
Set Rng = ActiveSheet.Range(opendate & ":" & enddate)
Если у вас есть фиксированный столбец с этими значениями, но вы хотите только динамически изменять строки, вы можете изменить это на что-то вроде этого:
Dim opendate As Long
activecell.offset(0, -7).Select
opendate = activecell.Value
activecell.offset(0, 7).Select
Selection.End(xlDown).Select
activecell.offset(-1, 0).Select
Dim enddate As Long
activecell.offset(0, -7).Select
enddate = activecell.Value
Set Rng = ActiveSheet.Range("D" & opendate & ":D" & enddate)
На самом деле все зависит от содержимого тех ячеек, из которых вы получаете эти значения, а диапазон, насколько я знаю, не требует десятичных дробей, хотя я никогда не пробовал. Если значения имеют до 4 точек на дюйм, но ваш код все еще зависит от них, я предлагаю использовать формулу, чтобы получить округленное значение до ближайшего полного числа, то есть: 4.5744 = 4 или 5 (в зависимости от ваших потребностей).
При этом я не советую использовать .Select
и activecell.
в качестве "динамического" выбора, это как бы отрицательно сказывается на цели сделать ваш код динамичным ...