对VBA来说很新。
我想做什么:
1)将工作表从(源)工作簿复制到活动(主)工作簿 2)删除主工作簿中复制数据的不必要列 3)在主工作簿中选择包含数据的单元格并将其格式化为表格(这是我被困的地方)
Sub first_sub()
'Open user Raw Data workbook
Workbooks.Open Filename:= _
"C:\Users\" & Environ("UserName") & "\Downloads\File.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点。由于某些原因,即使我在前一个sub中删除了它们,VBA也会选择最多为" AM"的列,结果是 - 我的表中有空列一直到AM。怎么解决这个?提前谢谢。
答案 0 :(得分:1)
检查.SpecialCells(xlLastCell)
的工作原理:Range.SpecialCells Method (Excel)
我认为您的范围变量rng
引用范围Range("A1")
到列范围内的最后一个使用的单元格
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