2013-04-16 2 views
1

У меня есть 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" 
+1

Вы должны объявить переменные с определенными типами, например, 'Dim ГСЧ, как String' и' Dim totalRows как Long' и т.д. Хотя это не решает проблему, это была бы хорошая привычка начинать, когда вы начинаете изучать VBA. –

+1

«R2C1: R3C1» означает Row2/Column1 to Row3/Column2, или, другими словами, то же, что и «A2: A3», это просто другой способ его записи. (Я лично предпочитаю использовать стиль ссылки A1 для R1C1) –

+0

Спасибо за указание @DavidZemens Я согласен, что любая дурная привычка должна быть остановлена ​​как можно раньше. Я буду помнить в будущем. –

ответ

1

Вам не нужно, чтобы выбрать диапазон Range("A2:A3").Select. "=CatAcc!R2C1:R3C1" в следующей строке автоматически позаботится об этом.

Объяснение

"= CatAcc R2C1: R3C1"

  1. CatAcc является лист, где диапазон
  2. R2C1 означает Row 2 Col 1, который не что иное, A2
  3. Аналогично, R3C1 представляет собой строку 3 Col 1, которая является не чем иным, как A3

Таким образом, выше также может быть записана в виде

ActiveWorkbook.Names.Add NAME:="categories", RefersTo:="=CatAcc!$A$2:$A$3" 
+0

Спасибо за быстрый ответ Сид. Плохо, что я не мог понять это как row/col. Новая вещь для меня. –

+0

Добро пожаловать :). Вы также можете проверить нотацию R1C1 в MSDN? –

+1

См. Ссылочный стиль R1C1 здесь http://msdn.microsoft.com/en-us/library/office/ee264226%28v=office.12%29.aspx (На полпути вниз по странице) –

Смежные вопросы