此代码工作正常,但是我做了很多其他代码来操纵和读取工作表的相同区域,现在此部分不起作用。
我尝试了很多使用语法的东西,但是没有用。可能是我需要调整数组的大小,但是由于我将其设置为一个范围,所以我认为我不必这样做。还说问题是范围,但我不知道。我宁愿不必从较大的表中调整其大小,因为该表的行项目将是动态的,但是我可以这样做,并在需要时使其动态。我确实尝试删除范围并重命名它,但它不起作用。
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
答案 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