从VB.NET对Excel中的两个区域排序不起作用
我正在从VB.NET创建Excel工作簿。每个工作表中输入两个数据范围。范围为三列宽,行数可变。输入数据后,将对其进行排序。排序在第一个范围内有效,但在第二个范围内无效-错误已出 错误:COMException未处理。排序引用无效。确保它位于要排序的数据中,并且第一个“排序依据”框不相同或不为空 我的代码:从VB.NET对Excel中的两个区域排序不起作用,excel,vb.net,sorting,Excel,Vb.net,Sorting,我正在从VB.NET创建Excel工作簿。每个工作表中输入两个数据范围。范围为三列宽,行数可变。输入数据后,将对其进行排序。排序在第一个范围内有效,但在第二个范围内无效-错误已出 错误:COMException未处理。排序引用无效。确保它位于要排序的数据中,并且第一个“排序依据”框不相同或不为空 我的代码: Dim xlApp As New Excel.Application Dim xlWB As Excel.Workbook Dim xlSht As Excel.Worksheet Dim
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
Dim xlApp作为新的Excel.Application
将xlWB设置为Excel.工作簿
将xlSht设置为Excel.工作表
尺寸为Excel.Range
将Rng2设置为Excel.Range
'
Dim dic作为字典(属于UInteger,cVM)
黯淡的irow作为一个整体
'
'创建新的Excel工作簿实例
xlWB=xlApp.Workbooks.Add
'
'为每个组创建一个工作表
对于dGroup.Keys中的每个键
'
'创建工作表
xlSht=xlWB.Sheets.Add
xlSht.Name=key
'
'
' =======================================================
irow=4
'
'按组输出关键数据
dic=新词典(由UInteger、cVM编制)
dic=dGroup(键).Dat
对于dic.键中的每个lc
xlSht.单元格(irow,1)=lc
xlSht.Cells(irow,2)=dic(lc).VM
xlSht细胞(irow,3)=dic(lc).EID
irow+=1
下一个
'
'对输出进行排序
Rng=xlSht.范围(“A4”、“C10000”)
Rng.Select()
Rng.Sort(键1:=Rng.Range(“B4”)_
Order1:=Excel.XlSortOrder.xlDescending_
方向:=XlSortOrientation.xlSortColumns)Rng2。范围(“F4”)
实际上是J7(因为F4是相对于Rng2的,而不是相对于父工作表),并且超出了您尝试排序的范围
你可能想要
Key1:=xlSht.Range("F4")
相反
与您的第一次排序类似:您没有在那里得到错误,因为Rng.Range(“B4”)
(B7)仍然在您的排序范围内。Rng2.Range(“F4”)
实际上是J7(因为F4是相对于Rng2的,而不是相对于父工作表的),并且超出了您尝试排序的范围
你可能想要
Key1:=xlSht.Range("F4")
相反
与第一次排序类似:由于Rng.Range(“B4”)
(B7)仍在您的排序范围内,因此没有出现错误。请尝试以下代码:
Rng2=xlSht.范围(“E4”、“G10000”)
Rng2.Sort(键1:=Rng2.Cells(1,2)_
Order1:=Excel.XlSortOrder.xlDescending_
方向:=XlSortOrientation.xlSortColumns)
代码失败的原因:
Rng2.Range(“F4”)不是指工作表中的单元格“F4”,而是指Rng2中的单元格“F4”。“F4”不是绝对引用-它相对于Rng2的左上角(在您的例子中,“F4”指的是绝对单元格“J7”(从单元格“E4”,向右偏移6列,向下偏移4列)。
您的第一个排序可以工作,因为它从列“A”开始,并且(意外地)从绝对引用和相对引用开始
顺便说一句,不需要“选择”范围,只需使用对象排序方法:range.sort()尝试以下代码:
Rng2=xlSht.范围(“E4”、“G10000”)
Rng2.Sort(键1:=Rng2.Cells(1,2)_
Order1:=Excel.XlSortOrder.xlDescending_
方向:=XlSortOrientation.xlSortColumns)
代码失败的原因:
Rng2.Range(“F4”)不是指工作表中的单元格“F4”,而是指Rng2中的单元格“F4”。“F4”不是绝对参考-它相对于Rng2的左上角(在您的示例中,“F4”指的是绝对单元格“J7”(从单元格“E4”,向右偏移6列,向下偏移4列)。
您的第一个排序可以工作,因为它从列“A”开始,并且(意外地)从绝对引用和相对引用开始
顺便说一句,不需要“选择”范围,只需使用对象排序方法:range.sort()现在这完全有意义了。我没有意识到这是一个相对参考。感谢您提供有关“选择”的提示.这是从某个例子中得到的,我应该知道得更清楚。现在这完全有道理了。我不知道这是一个相对的参考。谢谢你关于“选择”的提示。这是从某个例子中得到的,我应该知道得更清楚。我更喜欢这种方法,引用工作表而不是范围。好提示。我更喜欢这种方法,引用工作表而不是范围。好提示。