****更新为排序现在有效,只需要如何动态自动调整行,而无需定义行自动调整。列的withh总是相同的,可以是硬代码***
新手在这里,VBA有限。
我有一个当前的项目,虽然我的问题可能看起来很基本,但考虑到我已准确完成了多少步骤,我似乎无法在不定义行的情况下自动调整所有行。
我可以通过范围来完成,但每个月报告中的条目数量都不同。
我的宏要素需要一个报告(名称每个月都会更改,因为它是由另一个应用程序以凌乱的Excel格式导出)并清理它。稍后,它将通过其他方法转换为SharePoint数据表列表。
由于我更像是一名工作流程编写人员,因此我将所有内容拼写出来。如果有什么我可以清理简化,我也学会喜欢它。
宏如下:(请原谅格式错误,尝试复制到问题中)
Sub ComponentBalRptCleanup()
'Unmerge all Cells in Worksheet
ActiveSheet.Cells.UnMerge
'Delete Columns A1 thru D1
Range("A1:D1").EntireColumn.Delete
'Delete Rows A1 thru A9
Range("A1:A9").EntireRow.Delete
'Cut and Paste Cells
Range("A2").Cut Range("A1")
Range("G1").Cut Range("F1")
Range("P1").Cut Range("O1")
Range("AA1").Cut Range("Z1")
'Sort by Column A to Remove Extra Rows from View
Columns("A:AN").Sort key1:=Range("A:A"), order1:=xlAscending, Header:=xlYes
'Auto Fit Contents in Columns and Rows
ActiveCell.Columns("A:AG").EntireColumn.Select
ActiveCell.Columns("A:AG").AutoFit
ActiveCell.Rows("1:77").EntireRow.Select
ActiveCell.Rows("1:77").EntireRow.AutoFit
'Delete Empty Columns
Range("B:B, D:D, G:I, K:L, N:N, P:Q, T:V, X:Y, AA:AB, AD:AF").EntireColumn.Delete
'Remove Wrap Text from Cell B1
Range("B1").WrapText = False
'Autofit Contents of Columns
Range("A1:AF1").Columns.AutoFit
'Autofit Row A2 Contents
Range("A2:A2").Rows.AutoFit
'Save File As
Application.GetSaveAsFilename
End Sub
答案 0 :(得分:0)
我会说主要的问题是你的排序。在VBA中对可变范围进行排序很棘手。我强烈建议使用命名范围。 您可以选择电子表格的“有效”区域,并使用以下语句为其命名:
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Name = "myRange"
之后,使用myRange而不是静态地址。这是一个简单的例子:
Sub NameRangeAndSort()
' Create Named Range and Sort by 1st column
Dim TotalRows As Integer
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Name = "myRange"
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A1") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.ActiveSheet.Sort
.SetRange Range("myRange")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
您还在几个autofit语句中重复了两次EntireColumn。每个声明只应包含一次。