2013-04-16 89 views
1

我有8+是PHP和Java的专业编程经验,但在VBA中没有。现在就学习吧。如何在excel 2007中使用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. 

我写下面的代码(记录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

你应该与特定类型声明变量,例如,'昏暗RNG为String'和'点心totalRows为Long'等。虽然这不会解决你的问题,当你开始学习VBA时,开始一个好习惯。 –

+1

R2C1:R3C1表示Row2/Column1至Row3/Column2,换句话说,与“A2:A3”相同,只是写入方式不同而已。 (我个人更喜欢使用R1C1的A1参考样式) –

+0

感谢您指出@DavidZemens我同意任何坏习惯都应该尽早停止。将来我会牢记你的观点。 –

回答

1

你并不需要选择范围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" 
+0

感谢您快速回复Sidd。 我不好意思,我不能理解它作为行/列。对我来说是新事物。 –

+0

不客气:)。您可能还想在MSDN中查看R1C1表示法? –

+1

请参阅R1C1参考样式http://msdn.microsoft.com/en-us/library/office/ee264226%28v=office.12%29.aspx(中途翻页) –