Excel 2010 VBA将多列Listbox转换为命名范围

我有一个我想用来复制项目从一个多列列表框到一个电子表格命名区域的子。 我有麻烦的部分被评为“转移到表”(下面)。 它不会复制到我命名的范围(“Import_Items”或“Export_Items”,它根据哪个表被用作源来引用某些表),而是复制到从C列开始的第1行。我觉得我是可能失去一些非常简单的东西,任何帮助将不胜感激。

Sub Transfer() Dim CopyToWB As Workbook Dim ASName As String Dim lItem As Long, lRows As Long, lCols As Long Dim lColLoop As Long, lTransferRow As Long Set CopyToWB = Workbooks.Open(FPath & "\" & FName) ASName = ActiveSheet.Name lRows = ItemsLB.ListCount - 1 lCols = ItemsLB.ColumnCount - 1 With CopyToWB.Sheets(ASName) Range(ASName & "_Date") = DateTB Range(ASName & "_Tool_Order") = ToolOrderTB Range(ASName & "_WAY_BILL") = TrackingTB Range(ASName & "_TPOC_Name") = TPOCNameTB Range(ASName & "_Site") = SiteTB Range(ASName & "_Street") = StreetTB Range(ASName & "_City_State") = CityStateTB Range(ASName & "_Zip") = ZipTB Range(ASName & "_SPOC_Name") = SPOCNameTB Range(ASName & "_SPOC_Phone") = PhoneTB Range(ASName & "_SPOC_Email") = SPOCEmailTB Range(ASName & "_TPOC_Email") = TPOCEmailTB 'Transfer to table With Range(ASName & "_Items", ActiveSheet.Cells(lRows + 1, 4 + lCols)) 'Transfer to range For lItem = 0 To lRows 'Increment variable for row transfer range lTransferRow = lTransferRow + 1 'Loop through columns of selected row For lColLoop = 0 To lCols 'Transfer selected row to relevant row of transfer range .Cells(lTransferRow, lColLoop + 1) = ItemsLB.List(lItem, lColLoop) Next lColLoop Next End With 'Export/Import-dependent If ASName = "Export" Then Range(ASName & "_TPOC_Print_Name") = TPOCNameTB Range(ASName & "_TPOC_Title") = TPOCTitleTB ElseIf ASName = "Import" Then Range(ASName & "_Consignee_Name_Number") = TPOCNameTB & _ " - " & TPOCPhoneTB End If Application.DisplayAlerts = False .SaveAs FPath & FName 'Optional export to PDF If PDFChkBx = True Then ActiveSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=FPath & "Proforma Customs Invoice " & ToolOrderTB.Value & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End If Application.DisplayAlerts = True End With 

结束小组

这是如何将整个列表放到一个范围内:

 With Me.ItemsLB Range(ASName & "_Items").Resize(.ListCount, .ColumnCount).Value = .List End With 

以下是显式调整表的示例:

 Dim lo As ListObject With Me.ItemsLB Set lo = Range(ASName & "_Items").ListObject lo.Resize lo.Range.Resize(.ListCount + 1, .ColumnCount) lo.DataBodyRange.Value = .List End With