【发布时间】:2017-10-01 14:50:47
【问题描述】:
我正在从 VB.NET 创建一个 Excel 工作簿。在每张表中输入两个数据范围。范围是三列宽,行数可变。输入数据后,它会被排序。排序在第一个范围内有效,但在第二个范围内无效 - 它出错了。
错误:COMException 未处理。排序参考无效。确保它在您要排序的数据中,并且第一个排序依据框不是相同的或空白的。
我的代码:
Dim xlApp As New Excel.Application
Dim xlWB As Excel.Workbook
Dim xlSht As Excel.Worksheet
Dim Rng As Excel.Range
Dim Rng2 As Excel.Range
'
Dim dic As Dictionary(Of UInteger, cVM)
Dim irow As UInteger
'
' create a new Excel Workbook instance
xlWB = xlApp.Workbooks.Add
'
' create a worksheet for each group
For Each key In dGroup.Keys
'
' create worksheet
xlSht = xlWB.Sheets.Add
xlSht.Name = key
'
'
' =======================================================
irow = 4
'
' output critical data, by Group
dic = New Dictionary(Of UInteger, cVM)
dic = dGroup(key).Dat
For Each lc In dic.Keys
xlSht.Cells(irow, 1) = lc
xlSht.Cells(irow, 2) = dic(lc).VM
xlSht.Cells(irow, 3) = dic(lc).EID
irow += 1
Next
'
' sort the output
Rng = xlSht.Range("A4", "C10000")
Rng.Select()
Rng.Sort(Key1:=Rng.Range("B4"), _
Order1:=Excel.XlSortOrder.xlDescending, _
Orientation:=XlSortOrientation.xlSortColumns) ' <== THIS WORKS !!!
'
'
'
' =======================================================
irow = 4
' output critical data, by Group
dic = New Dictionary(Of UInteger, cVM)
dic = dGroup2(key).Dat
For Each lc In dic.Keys
xlSht.Cells(irow, 5) = lc
xlSht.Cells(irow, 6) = dic(lc).VM
xlSht.Cells(irow, 7) = dic(lc).EID
irow += 1
Next
'
' sort the output
Rng2 = xlSht.Range("E4", "G10000")
Rng2.Select()
Rng2.Sort(Key1:=Rng2.Range("F4"), _
Order1:=Excel.XlSortOrder.xlDescending, _
Orientation:=XlSortOrientation.xlSortColumns) ' <== THIS IS WHERE IT ERRS OUT
'
Next key
第一个范围是从 A4:C10000。 第二个范围是从 E4:G10000。
对第一个范围进行排序可以正常工作。对第二个范围进行排序不起作用。我不明白的是为什么?除了我更改了范围之外,它是相同的代码。我错过了什么?
【问题讨论】: