所以我有幾個問題與下面提供的代碼。我遇到的第一個問題是,如果我在「Sheet1」中並運行代碼,則會出現運行時錯誤「Range class failed Select method」。從「Sheet2」運行代碼運行良好。我對VBA相當陌生,根據我的理解,我已經定義了表單以供選擇,所以我不確定錯誤來自哪裏。防止排序功能失敗時,沒有文字可用於排序
我遇到的第二個問題是使用排序功能。如果源選擇沒有任何文本,則排序功能會失敗,因爲沒有可以排序的東西(有意義)。我只是不知道如何添加一個函數來對選擇進行排序,如果沒有文本,並且只是傳遞它,如果沒有。
我知道我提供的代碼可能相當平庸,並且可能有更好的方法來處理同一組數據。我歡迎任何建議來更好地簡化和管理此代碼。
Sub DaysCalc()
'Day 1
ToColumn Sheets("Sheet1").Range("B4:AD22"), _
Sheets("Sheet2").Range("A2")
Sheets("Sheet2").Range("A2:A552").Select
Selection.sort Key1:=Sheets("Sheet2").Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.DisplayAlerts = False
Sheets("Sheet2").Range("A2:A552").Select
Selection.TextToColumns Destination:=Sheets("Sheet2").Range("B2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1))
End Sub
Sub ToColumn(rngIn As Range, topCell As Range)
Dim rv() As Variant, n As Long, d, r As Long, c As Long
Dim nR As Long, nC As Long, i As Long
d = rngIn.Value
nR = UBound(d, 1)
nC = UBound(d, 2)
n = nR * nC
ReDim rv(1 To n, 1 To 1)
i = 0
For r = 1 To nR
For c = 1 To nC
i = i + 1
rv(i, 1) = d(r, c)
Next c
Next r
topCell.Resize(n, 1).Value = rv
End Sub
這裏有一個關於如何避免使用'.select'的好方法:http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select –