| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 278 人关注过本帖
标题:VB 对Excel 排序---标题行设置问题
只看楼主 收藏
newsoftware
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-7-21
结帖率:50%
  已结贴   问题点数:10  回复次数:11   
VB 对Excel 排序---标题行设置问题

我用以下代码对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
2017-08-04 22:09
newsoftware
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-7-21
  得分:0 
自已帮顶!
2017-08-05 21:35
wlrjgzs
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:67
专家分:429
注 册:2017-4-10
  得分:3 
“要怎样修改,使标题行设置为第二行?”,这个怎么理解
2017-08-06 12:29
ZHRXJR
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:45
帖 子:452
专家分:2621
注 册:2016-5-10
  得分:3 
“标题行默认为第一行!要怎样修改,使标题行设置为第二行?”
标题设置一般是设置到第一行,设置到第二行,是不是第一行是表格名称?
其实标题设置到哪一行都可以使用代码实现,但“我用了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

QQ    2653043392
2017-08-06 13:01
newsoftware
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-7-21
  得分:0 
以下是引用wlrjgzs在2017-8-6 12:29:13的发言:

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



就是第一和第二行不排序,其它的数据区域要排序。
2017-08-06 20:54
newsoftware
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-7-21
  得分:0 
以下是引用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 定义
2017-08-06 21:00
ZHRXJR
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:45
帖 子:452
专家分:2621
注 册:2016-5-10
  得分:0 
回复 6楼 newsoftware
“我用以下代码对EXCEL文件进行排序,标题行默认为第一行!要怎样修改,使标题行设置为第二行?
因是要对多个文件进行操作,所以排序的范围不是固定的,我用了xlsWorksheet.UsedRange定义,这样就不知如何定义标题栏了”
“我的目的是要排序呀!就是第一和第二行不排序,其它的数据区域要排序。因我是要操作大量的文件,每个文件是不一样的,所以用了 xlsWorksheet.UsedRange 定义”


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

一般排序不采用这种办法,而是将列的数据读到数组,使用数组排序非常方便,或直接使用ADO操作Excel,排序更方便。

QQ    2653043392
2017-08-07 08:04
xiangyue0510
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:71
帖 子:749
专家分:4513
注 册:2015-8-10
  得分:3 
录制一段宏不就可以了么,稍微的修改一下就可以拿来用了
程序代码:
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
2017-08-08 09:54
newsoftware
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2017-7-21
  得分:0 
以下是引用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编辑过]

2017-08-08 18:04
opelwang
Rank: 1
等 级:新手上路
帖 子:70
专家分:3
注 册:2009-7-2
  得分:3 
回复 楼主 newsoftware
试试:

xlsRange.Sort xlsRange2.Offset(1), 1, , , , , , xlYes
2017-08-08 19:28









关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043330 second(s), 8 queries.
Copyright©2004-2017, BCCN.NET, All Rights Reserved