【问题标题】:Excel 2010 VBA transfer multicolumn Listbox to named rangeExcel 2010 VBA 将多列列表框传输到命名范围
【发布时间】:2016-06-02 22:51:56
【问题描述】:

我有一个 sub,我想用它来将项目从多列列表框中复制到电子表格上的命名范围。我遇到问题的子部分被注释为“转移到表”(如下)。它没有复制到我的命名范围(“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

结束子

【问题讨论】:

  • 为什么要循环而不是将 List 数组放入工作表中?
  • 它是从我在 OzGrid 上找到的一个线程修改的,我一直无法将任何内容复制到具有其他子/用户窗体的表中,所以我尝试了这种方式。你能举个例子说明什么是更好的方法吗?
  • 意在对您的回答发表评论

标签: vba excel listbox excel-2010


【解决方案1】:

这是一次性将整个列表放入一个范围的方法:

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

【讨论】:

  • 你在开玩笑吧。我一直在查找所有的东西,试图弄清楚为什么它不能工作,而且它花了这么简单的东西。谢谢。
  • 顺便说一句,有没有类似的方法可以将列表项放入表格本身?现在我正在使用引用表的命名范围,并且过去所有直接复制到表的尝试都失败了。您提供的代码有效,但我发现如果我的列表项超过命名范围内的行数,则该范围不会自行调整大小。再次感谢!
  • 你说的是一个实际的表而不是一个简单的命名范围吗?表应该简单地扩展以包含新数据。
  • 对。我的命名范围(“Export_Items”和“Import_Items”)分别指的是表 EITable 和 IITable。我在将值直接粘贴到这些表中时遇到了问题,因此我尝试创建这些引用表的命名范围,以便我可以将值放入其中。希望这一切都有意义...基本上,如果我可以摆脱命名范围并直接使用表格,那就太好了,否则一种调整范围/表格大小的方法,这样我的列表项就不会超过指定区域。
  • 我已更新答案以显示代码以显式调整表格大小。
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 2019-12-05
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2021-05-22
相关资源
最近更新 更多