对VBA来说非常陌生。
我想做什么:
1(将工作表从(源(工作簿复制到活动(主(工作簿 2(删除主工作簿中复制数据的不必要列 3(选择主工作簿中有数据的单元格并格式化为表格(这是我卡住的地方(
Sub first_sub()
'Open user Raw Data workbook
Workbooks.Open Filename:= _
"C:Users" & Environ("UserName") & "DownloadsFile.xls"
'Copy user Raw Data sheet to Data Master sheet
Workbooks("File.xls").Sheets("Records").Copy _
Before:=Workbooks("Macro Main.xlsm").Sheets(1)
'Close user Raw Data
Workbooks("File.xls").Close
End Sub
Sub Format()
Sheets("Records").Range("D:G,I:K,M:Y,AA:AA,AF:AM").EntireColumn.Clear
Sheets("Records").Range("D:G,I:K,M:Y,AA:AA,AF:AM").EntireColumn.Delete
End Sub
Sub MakeTable()
Dim tbl As ListObject
Dim rng As Range
Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
tbl.TableStyle = "TableStyleMedium3"
End Sub
问题出在第 3 点。出于某些原因,VBA 选择最多到"AM"的列,即使我在以前的子中删除了它们,结果 - 我有一个充满空列的表一直到 AM。如何解决这个问题?提前谢谢你。
检查.SpecialCells(xlLastCell)
的工作原理:Range.SpecialCells Method (Excel(
我认为您的范围变量rng
引用的范围Range("A1")
到列范围 AM 中最后使用的单元格
Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
尝试在之后添加此行,以检查范围是否实际针对所需的范围:
rng.select
要解决此问题,您可以尝试:
Set rng = Range("A1").CurrentRegion
或者查找 A 列中的最后一个单元格...
法典:
Sub MakeTable()
Dim tbl As ListObject
Dim rng As Range
Set rng = Range("A1").CurrentRegion
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
tbl.TableStyle = "TableStyleMedium3"
End Sub