【问题标题】:Excel VBA: Convert Cells to Range using AddressExcel VBA:使用地址将单元格转换为范围
【发布时间】:2017-06-07 19:47:02
【问题描述】:

我正在构建一个模块以将文本导入 Excel 工作簿。导入后,我想将数据格式化为表格。我遇到的问题是导入永远不会有相同的范围。

我正在使用以下代码,但它会引发错误,运行时错误“424”:需要对象。

Sub ImportRange()

  Dim ws As Worksheet
  Dim lRow As Long
  Dim lCol As Long
  Dim rng As Range

  Set ws = ThisWorkbook.Worksheets("Import")

  lRow = ws.UsedRange.Row - 1 + ws.UsedRange.Rows.Count
  lCol = ws.UsedRange.Column - 1 + ws.UsedRange.Columns.Count

  Set rng = ws.Cells(lRow, lCol).Address(True, True)

  'MsgBox Cells(lRow, lCol).Address(True, True)

End Sub

我已经进行了大量搜索,但我无法找到答案或弄清楚我应该如何做到这一点。

代码中的最终结果将如下所示,范围的开头始终设置为 $A$1:

ws.ListObjects.Add(xlSrcRange, Range("$A$1:$AM$90"), , xlYes).Name = _
    "Import"

【问题讨论】:

  • 设置范围时不要使用AddressSet rng = ws.Cells(lRow, lCol) 则可以使用msgbox rng.Address(1,1)
  • @ScottCraner MsgBox 只是为了验证我在做什么。我需要能够用 Range ("$A$1:RANGE") 替换。
  • 应该是Range("A1",rng)
  • 您不需要 Range ("$A$1:RANGE")。只需将您的范围直接设置为目标即可。看我的回答。

标签: excel vba


【解决方案1】:

如果您的目标是将范围设置为工作表上已使用的范围,则可以更简单地完成:

Set rng = ws.UsedRange

显然,您需要确保该工作表上的 usedrange 正确代表您导入的数据。

要将范围转换为表格:

Dim Import_Table As ListObject
Set Import_Table = ws.ListObjects.Add(SourceType:=xlSrcRange, Source:=rng, XlListObjectHasHeaders:=xlYes)
Import_Table.Name = "Import"

注意:该代码适用于 Excel 2010。对于更高版本,将 XlListObjectHasHeaders 替换为 HasHeaders

【讨论】:

  • 感谢您让我感到愚蠢并给了我正确的答案!完美运行。尽情享受您的一天!
猜你喜欢
  • 2012-12-06
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多