给出错误1004'对象'工作表'的方法'范围'失败的命名范围”

时间:2019-06-25 18:30:38

标签: excel vba

此代码工作正常,但是我做了很多其他代码来操纵和读取工作表的相同区域,现在此部分不起作用。

我尝试了很多使用语法的东西,但是没有用。可能是我需要调整数组的大小,但是由于我将其设置为一个范围,所以我认为我不必这样做。还说问题是范围,但我不知道。我宁愿不必从较大的表中调整其大小,因为该表的行项目将是动态的,但是我可以这样做,并在需要时使其动态。我确实尝试删除范围并重命名它,但它不起作用。

Private Sub UserForm_Initialize()

      Dim codes()
      Dim ws As Worksheet
        Set ws = Worksheets("Sheet1")
        codes = ws.Range("cCodes")         

         CostCode1.List = codes     ''these are combo boxes                        
         CostCode2.List = codes
         CostCode3.List = codes
         CostCode4.List = codes
         CostCode5.List = codes
         CostCode6.List = codes

'' ADD UNITS

End Sub

2 个答案:

答案 0 :(得分:0)

您无需为指定范围声明工作表。
命名范围存储为包含工作表名称的外部地址。

codes = Range("cCodes")

应该足够。

答案 1 :(得分:0)

据我所知,由于您没有命名范围"cCodes")而导致出现错误。

转到公式-> 名称管理器,然后检查您的姓名。或者,直接在代码中使用范围,即:codes = ws.Range("A1:A100")

要在评论中回答您的问题,

  

我是否可以直接引用要设置为数组的表的三列

有几种方法可以处理从表到数组(特定的行/列),再到工作表的范围(请参见代码中的注释)。希望这会有所帮助。

Option Explicit

Sub test()
    Dim rngData As Range
    Dim arrData As Variant

    With Range("Table1") 'this is only the content of the table, does not include the headers
        Set rngData = Range(.Cells(1, 1), .Cells(.Rows.Count, 3)) 'Set the range starting at cell row 1, col 1 - until total number of rows in table, col 3
        'Set rngData = rngData.Offset(-1).Resize(.Rows.Count + 1) 'if you want to include headers as well
        Debug.Print rngData.Address
    End With

    arrData = rngData 'allocate the data from the range to the array

    rngData.Offset(0, Range("Table1").Columns.Count + 1) = arrData 'put the array back on the sheet, 1 column to the right of the table

    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("N1").Resize(UBound(arrData), UBound(arrData, 2)) = arrData 'put the array back on the sheet in a specific range

End Sub