如何在Excel 2007中使用VBA重命名范围

我在PHP和Java中拥有8+以上的专业编程经验,但在VBA中没有。 现在学习吧。

我试图做一个家庭预算表(只适用于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. 

我写了下面的代码(loggingtestmacro检查如何命名一个范围)

 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 

在select范围时,我得到了下面的错误

 Run-time error '1004' Select method of Range class failed 

我无法理解这个错误是什么意思,为什么我只是通过添加工作表名称。

再次,下面的行是什么意思? 那里发生了什么? 我无法理解R2C1:R3C2的含义。 当我将A2:A3单元格命名为“类别”时,这个值来自logging的macros,

 ActiveWorkbook.Names.Add Name:="categories", RefersToR1C1:="=CatAcc!R2C1:R3C1" 

您不需要select范围Range("A2:A3").Select 。 下一行中的"=CatAcc!R2C1:R3C1"将自动处理。

说明

“= CatAcc R2C1:R3C1”

  1. CatAcc是范围是的工作表
  2. R2C1意味着第2行第1列,它只是A2
  3. 类似地,R3C1是第3行第1行,它不过是A3

所以上面也可以写成

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