【发布时间】:2015-03-14 13:24:03
【问题描述】:
我正在尝试修改一些代码,将两个单独的范围复制并粘贴到另一个工作表上,然后按字母顺序对其进行排序。问题是当我隐藏工作表时 - 即使我取消隐藏并重新隐藏它以运行宏 - 它似乎只在活动列上排序。
我在下面的第二个宏中用粗体标出了排序代码。 GetNamesList 宏在其代码末尾调用 ConsolidateList。
GetNamesList 设置为在工作簿打开时运行:
Private Sub Workbook_Open()
GetNamesList
End Sub
GetNamesList 的原始代码来自:http://bit.ly/1y3dU6n by @Siddharth-rout
Sub GetNamesList()
Dim rng As Range, aCell As Range
Dim MyAr() As Variant
Dim n As Long, i As Long
Application.ScreenUpdating = False
Sheet28.Visible = True
'~~> Change this to the relevant sheet
With Sheet3
'~~> Non Contiguous range
Set rng = .Range("Table2[Contact 1],Table2[Contact 2]")
'~~> Get the count of cells in that range
n = rng.Cells.Count
'~~> Resize the array to hold the data
ReDim MyAr(1 To n)
n = 1
'~~> Store the values from that range into
'~~> the array
For Each aCell In rng.Cells
MyAr(n) = aCell.Value
n = n + 1
Next aCell
End With
'~~> Output the data in Sheet
'~~> Vertically Output to sheet 28
Sheet28.Cells(1, 1).Resize(UBound(MyAr), 1).Value = _
Application.WorksheetFunction.Transpose(MyAr)
ConsolidateList
Sheet28.Visible = False
Application.ScreenUpdating = True
End Sub
ConsolidateList 是:
Sub ConsolidateList()
'
' ConsolidateList Macro
' Remove duplicates and blanks
'
With Sheet28.Range("A1:A1000")
.Value = .Value
.RemoveDuplicates Columns:=1, Header:=xlNo
On Error Resume Next
.SpecialCells(xlCellTypeBlanks).Delete xlShiftUp
On Error GoTo 0
End With
Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending
End Sub
感谢您的帮助...
**更新 - 录制宏来做同样的事情...
Sub TestSort()
'
' TestSort Macro
'
Sheets("Jan").Select
Sheets("Sheet1").Visible = True
ActiveWindow.SmallScroll Down:=-405
Range("A1:A134").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:A134")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=-245
Sheets("Sheet1").Select
ActiveWindow.SelectedSheets.Visible = False
End Sub
【问题讨论】:
-
使用特定工作表限定范围,例如
Sheets("Sheet1").Columns("A:A").Sort等 -
谢谢@SI 试过了,但它告诉我“排序引用无效。确保它在范围内,并且第一个排序依据框不一样或空白” ??
-
您是否尝试过记录排序操作并将其与您的代码进行比较?
-
@SO - 上面的结果...对我来说,这里的问题是它使用 ActiveWorksheet 并引用了确切的范围 A1:A134,它会随着时间的推移而增长...
-
因此您可以将 ActiveWorksheet 替换为 Sheets("Sheet1") 或其他任何东西。您可以在排序之前将范围设置为变量并使用变量的地址属性:)
标签: excel vba sorting reference