У меня есть 8+ профессиональных навыков программирования на PHP и Java, но в VBA их нет. Изучайте это прямо сейчас.Как переименовать диапазон с помощью VBA в excel 2007
Я пытаюсь сделать лист бюджета для дома (только для цели обучения VBA). Для этого я сделал следующее
* In new excel (2007) file, rename sheet 1 as 'Forms' And Sheet2 as 'CatAcc'
* In sheet 'CatAcc', I'm using (planning) column A for categories and B for Account
* Row 1 is heading (A1 = "Categories", B1="Account"
* Using forms sheet (cell C2) & VBA button, I want to add a new category,
sort it alphabetically and then rename range to add newly added row.
Я написал следующий код для этого (Записано testmacro, чтобы проверить, как назвать диапазон)
Sub AddCat_Click()
'Copy data as last row
Worksheets("CatAcc").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Worksheets("Forms").Cells(2, "C").Value
'Find total Rows in categories
Dim totalRows
totalRows = Worksheets("CatAcc").Range("A2").End(xlDown).Row
'Define Range
Dim rng
rng = "A2:A" & totalRows
'MsgBox rng
'Select the range - Getting error in following line.
Worksheets("CatAcc").Range(rng).Select
'Name the range
ActiveWorkbook.Names.Add Name:="categories", RefersToR1C1:="=CatAcc!R2C1:R3C1"
'Sort range alphabetically
'Apply range as drop-down options
End Sub
Sub testmacro()
Range("A2:A3").Select
ActiveWorkbook.Names.Add Name:="categories", RefersToR1C1:= _
"=CatAcc!R2C1:R3C1"
End Sub
При выборе диапазона, я получил следующее сообщение об ошибке
Run-time error '1004'
Select method of Range class failed
Я не могу понять, что означает эта ошибка, и почему я получаю это, просто добавив имя листа.
Снова, что означает следующая линия? Что там происходит? Я не мог понять значение R2C1: R3C2. Эти значения пришли из записанного макроса, когда я назвал A2: A3 ячейку как «категория»
ActiveWorkbook.Names.Add Name:="categories", RefersToR1C1:="=CatAcc!R2C1:R3C1"
Вы должны объявить переменные с определенными типами, например, 'Dim ГСЧ, как String' и' Dim totalRows как Long' и т.д. Хотя это не решает проблему, это была бы хорошая привычка начинать, когда вы начинаете изучать VBA. –
«R2C1: R3C1» означает Row2/Column1 to Row3/Column2, или, другими словами, то же, что и «A2: A3», это просто другой способ его записи. (Я лично предпочитаю использовать стиль ссылки A1 для R1C1) –
Спасибо за указание @DavidZemens Я согласен, что любая дурная привычка должна быть остановлена как можно раньше. Я буду помнить в будущем. –