我有一个大约有7列的列表。第7列是我用来对数据进行排序的特殊列。我有一个运行的onBeforePrint子程序,按最后一列对列表进行排序,然后在打印之前将其隐藏。
问题在于,有时候它会正常工作,而且所有东西都能正确排序,有时则不然。此外,当它确实有效时,在我点击它们之前,最后一列中的所有值都显示错误#!Value。当我点击它们时,它们通常(并非总是)改变回来,但是当它们不改变时,它的排序不再有效。任何想法?
这部分代码是通过Record Macro按钮抓取的,另一部分是我自己添加的。 (即EntireColumn.Hidden部分)
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.Range("G:G").EntireColumn.Hidden = False
ActiveSheet.ListObjects(1).Range.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=6, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveSheet.Range("G:G").EntireColumn.Hidden = True
End Sub
此功能是最后一个单元格相同的功能。它接收诸如“A-7”,“HH-7”,“BB-31”,“7A-14”之类的值并将它们转换为基数36以便对它们进行排序以便所有单个字母和所有双字母按不同的组分类。此代码来自This Question。
Public Function Base36Transform(r As Range) As Long
Dim s As String, c As String
Dim v
Dim i As Integer
Dim rv As Long
v = Split(r.text, "-")
s1 = v(0)
s2 = v(1)
s = Right("A" & s1, 2) & Right("A" & s2, 2)
rv = 0
For i = 1 To Len(s)
c = Mid(s, Len(s) - i + 1, 1)
If c Like "#" Then
rv = rv + (Val(c) + 10) * (36 ^ (i - 1))
Else
' c is like "[A-Z]"
rv = rv + (Asc(c) - Asc("A")) * (36 ^ (i - 1))
End If
Next
Base36Transform = rv
End Function
感谢任何帮助。一旦我工作的互联网停止搞砸了,我就会发布#VALUE东西的截图我的意思