Я пытаюсь написать сценарий VBA в Excel 2003 (не мой выбор версии), чтобы разделить предопределенный диапазон на листе на десять именованных диапазонов. Имя рабочего листа - "paste_data", а "блок" ячеек, к которому я хочу ограничить скрипт, - A4: AO111. Иногда, когда я запускаю скрипт, он работает, но иногда кажется, что эффективная начальная ячейка смещается с A4 на другую. Вот пример плохих результатов (извините, я не могу опубликовать изображение, потому что я новичок):
Именованный диапазон table.emergency.count относится к диапазону V6: AO25, когда он должен относиться к диапазону V4: AO23.
Мой код здесь:
Sub tables_assign()
Dim j As Integer
Dim range_ref, range_name, rref As String
Dim tbles(1 To 10) As String
Dim rw1, rw2 As Integer
'##########################################################################################
'CREATION AND NAMING OF TABLES
'##########################################################################################
tbles(1) = "table.emergency.score": tbles(2) = "table.emergency.count": tbles(3) = "table.eol.score": tbles(4) = "table.eol.count": tbles(5) = "table.inpatient.score": tbles(6) = "table.inpatient.count": tbles(7) = "table.outpatient.score": tbles(8) = "table.outpatient.count": tbles(9) = "table.sds.score": tbles(10) = "table.sds.count"
For j = 1 To 10
If j Mod 2 <> 0 Then
If j = 1 Then
rw1 = 4
rw2 = 23
Else
rw1 = 4 + 22 * Application.WorksheetFunction.Ceiling((j / 2 - 1), 1)
rw2 = 23 + 22 * Application.WorksheetFunction.Ceiling((j / 2 - 1), 1)
End If
rref = Trim(Application.WorksheetFunction.Substitute("=paste_data!A" & Str(rw1) & ":T" & Str(rw2), " ", ""))
ActiveWorkbook.Names.Add tbles(j), rref
Else
If j = 2 Then
rw1 = 4
rw2 = 23
Else
rw1 = 4 + 22 * (j / 2 - 1)
rw2 = 23 + 22 * (j / 2 - 1)
End If
rref = Trim(Application.WorksheetFunction.Substitute("=paste_data!V" & Str(rw1) & ":AO" & Str(rw2), " ", ""))
ActiveWorkbook.Names.Add tbles(j), rref
End If
Next j
End Sub
У кого-нибудь есть идея, почему это произойдет? Я догадываюсь, что «используемый диапазон» листа является виновником.