简体   繁体   中英

Excel VBA: Convert Cells to Range using Address

I am building a module to import text into an Excel workbook. After it imports, I want to format the data as a table. The problem I have is that the import will never have the same range.

I'm using the following code, but it throws an error, Run-time error '424': Object required.

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

I've done quite a bit of searching, but I have been unable to find an answer or figure out how I should be doing this.

The end result would look something like this in the code with the start of the range always being set to $A$1:

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

If your goal is to set a range to the used range on a sheet, it can be done simpler:

Set rng = ws.UsedRange

Obviously, you need to make sure that the usedrange on that sheet properly represents your imported data.

To convert the range to a table:

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

Note: the code is for Excel 2010. For later versions, replace XlListObjectHasHeaders with HasHeaders

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM