注册 登录
编程论坛 VB6论坛

VB 对Excel 排序---标题行设置问题

newsoftware 发布于 2017-08-04 22:09, 4817 次点击

我用以下代码对EXCEL文件进行排序,标题行默认为第一行!要怎样修改,使标题行设置为第二行?

因是要对多个文件进行操作,所以排序的范围不是固定的,我用了xlsWorksheet.UsedRange定义,这样就不知如何定义标题栏了


Set xlsExcel = Createxlsect("Excel.Application")
xlsExcel.Visible = True
Set xlsWorkbook = xlsExcel.Workbooks.Open("C:\date.xls")
Set xlsWorksheet = xlsWorkbook.Worksheets(1)
Set xlsRange = xlsWorksheet.UsedRange
Set xlsRange2 = xlsExcel.Range("D3")
  
xlsRange.Sort xlsRange2, 1, , , , , , xlYes
11 回复
#2
newsoftware2017-08-05 21:35
自已帮顶!
#3
wlrjgzs2017-08-06 12:29
“要怎样修改,使标题行设置为第二行?”,这个怎么理解
#4
ZHRXJR2017-08-06 13:01
“标题行默认为第一行!要怎样修改,使标题行设置为第二行?”
标题设置一般是设置到第一行,设置到第二行,是不是第一行是表格名称?
其实标题设置到哪一行都可以使用代码实现,但“我用了xlsWorksheet.UsedRange定义”是不是多此一举?
程序代码:
Set xlsExcel = Createxlsect("Excel.Application")
xlsExcel.Visible = False
Set xlsWorkbook = xlsExcel.Workbooks.Open("C:\date.xls")
Set xlsWorksheet = xlsWorkbook.Worksheets(1)
xlsWorksheet.Cells(2, 1) = "标题1"   '第二行第一列的标题为 标题1
xlsWorksheet.Cells(2, 2) = "标题2"   '第二行第二列的标题为 标题2
xlsWorksheet.Cells(2, 3) = "标题3"   '第二行第三列的标题为 标题3
'
............................
xlsExcel.Quit
Set xlsExcel = Nothing
Set xlsWorkbook = Nothing
Set xlsWorksheet = Nothing
#5
newsoftware2017-08-06 20:54
以下是引用wlrjgzs在2017-8-6 12:29:13的发言:

“要怎样修改,使标题行设置为第二行?”,这个怎么理解



就是第一和第二行不排序,其它的数据区域要排序。
#6
newsoftware2017-08-06 21:00
以下是引用ZHRXJR在2017-8-6 13:01:49的发言:

“标题行默认为第一行!要怎样修改,使标题行设置为第二行?”
标题设置一般是设置到第一行,设置到第二行,是不是第一行是表格名称?
其实标题设置到哪一行都可以使用代码实现,但“我用了xlsWorksheet.UsedRange定义”是不是多此一举?
Set xlsExcel = Createxlsect("Excel.Application")
xlsExcel.Visible = False
Set xlsWorkbook = xlsExcel.Workbooks.Open("C:\date.xls")
Set xlsWorksheet = xlsWorkbook.Worksheets(1)
xlsWorksheet.Cells(2, 1) = "标题1"   '第二行第一列的标题为 标题1
xlsWorksheet.Cells(2, 2) = "标题2"   '第二行第二列的标题为 标题2
xlsWorksheet.Cells(2, 3) = "标题3"   '第二行第三列的标题为 标题3
'............................
xlsExcel.Quit
Set xlsExcel = Nothing
Set xlsWorkbook = Nothing
Set xlsWorksheet = Nothing



我的目的是要排序呀!就是第一和第二行不排序,其它的数据区域要排序。因我是要操作大量的文件,每个文件是不一样的,所以用了 xlsWorksheet.UsedRange 定义
#7
ZHRXJR2017-08-07 08:04
回复 6楼 newsoftware
“我用以下代码对EXCEL文件进行排序,标题行默认为第一行!要怎样修改,使标题行设置为第二行?
因是要对多个文件进行操作,所以排序的范围不是固定的,我用了xlsWorksheet.UsedRange定义,这样就不知如何定义标题栏了”
“我的目的是要排序呀!就是第一和第二行不排序,其它的数据区域要排序。因我是要操作大量的文件,每个文件是不一样的,所以用了 xlsWorksheet.UsedRange 定义”


你自己对问题的叙述不是很清楚,引起别人的误解
真搞不明白,你的Excel文件是已经存在的,还是新建的,如果是已经存在的,“要怎样修改,使标题行设置为第二行”不仅仅是修改第二行,而是需要修改全部记录。
另外“我的目的是要排序呀!就是第一和第二行不排序,其它的数据区域要排序。”你的目的是排序,这个“数据区域”应该是各列吧?
不论是Excel还是其他存储数据的媒体,排序只能是以一个列的数据排序的(二个列必须有共性),因为各列数据不同,不可能同时满足几个列排序的要求。
再者 xlsWorksheet.UsedRange 属性是选取单元格的属性,这仅仅是选取可用的需要操作的单元格,好像与排序没有关系吧。

一般排序不采用这种办法,而是将列的数据读到数组,使用数组排序非常方便,或直接使用ADO操作Excel,排序更方便。
#8
xiangyue05102017-08-08 09:54
录制一段宏不就可以了么,稍微的修改一下就可以拿来用了
程序代码:
Sub 宏2()
'
'
宏2 宏
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range( _
        "A5:A69"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal     '排序关键词,升降序
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A4:N69")    '排序区域设定
        .Header = xlYes              '该区域内是否包含标题
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
#9
newsoftware2017-08-08 18:04
以下是引用xiangyue0510在2017-8-8 09:54:49的发言:

录制一段宏不就可以了么,稍微的修改一下就可以拿来用了
Sub 宏2()
'
' 宏2 宏
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range( _
        "A5:A69"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal     '排序关键词,升降序
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A4:N69")    '排序区域设定
        .Header = xlYes              '该区域内是否包含标题
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


我的排序区域不是固定的,是变量哦。因是多文件操作,每个文件的数据区域是不同的,共同点是第一行与第二行都不用排序,剩下的区域要排序。录制的宏需要有固定的区域,如你上面代码中的  Range("A4:N69")

[此贴子已经被作者于2017-8-8 18:06编辑过]

#10
opelwang2017-08-08 19:28
回复 楼主 newsoftware
试试:

xlsRange.Sort xlsRange2.Offset(1), 1, , , , , , xlYes
#11
newsoftware2017-08-10 22:21
以下是引用opelwang在2017-8-8 19:28:29的发言:

试试:

xlsRange.Sort xlsRange2.Offset(1), 1, , , , , , xlYes



还是不行,标题还是第1行。。。。
#12
f9865y2017-08-12 09:12
回复 8楼 xiangyue0510
这你就说错了虽然宏需要固定区域,但是只要获取一下表的使用行,比如你是12两排不排,那么就"A3:N" & 使用行就可以了啊。效果一样
1