注册 登录
编程论坛 VFP论坛

[求助]VFP 如何 调用VBA 中的SORT

xuxinxu 发布于 2021-11-07 08:23, 1856 次点击
只有本站会员才能查看附件,请 登录


这句在VFP中如何实现?以下是我的尝试,但是最后一句出错

程序代码:

*!*    *********************************************************
eole=Createobject('Excel.application')
If Type("eole")#"O"
    Wait Clear
    Messagebox( "访问Excel失败!请检查你的系统是否正确安装 Excel 软件!",48,"系统")
    Return To Master
Endif
eole.Visible=.F.
*eole.Workbooks.Add
eole.Workbooks.Open("C:\Users\Administrator\Desktop\duo\四高一低20211107.xls")
eole.ActiveWindow.WindowState = 2 &&最大化
eole.Worksheets('sheet1').Activate
eole.displayalerts=.F.
*eole.SheetsInNewWorkbook=1 &&设定新工作簿中有几个工作表
eole.ActiveWindow.WindowState = 2 &&最大化


eole.Range("B2:N8").Select  
eole.selection.sort("四高一低",1)     


出现的错误是

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-11-7 08:34编辑过]

10 回复
#2
xuxinxu2021-11-07 09:27

ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("N3:N8"), SortOn:=0, Order:=2, DataOption:=0

上面一句在VBA中运行正常
下面这句在VFP中运行出现语法错误

eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("N3:N8"), SortOn:=0, Order:=2, DataOption:=0
下面这句显示“不能识别的命令谓词”
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add (Key:=Range("N3:N8"), SortOn:=0, Order:=2, DataOption:=0)
真不知道如何调用这些带参数的命令
#3
吹水佬2021-11-07 09:44
试试
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add(eole.Range("N3:N8"), 0, 2, 0)
#4
xuxinxu2021-11-07 09:54
语法验证通过,却没起作用,我再琢磨

程序代码:

eole.Range("B2:N8").Select
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add (eole.range("N3:N8"),0, 1, 0)
    With eole.ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange (eole.Range("B2:N8"))
        .Header = 1
        .MatchCase = 0
        .Orientation = 1
        .SortMethod = 1
        &&.Apply
    EndWith


这是录的宏改编的

现在已经找到了没起作用的原因,最后一句 .Apply 被注释了

[此贴子已经被作者于2021-11-7 10:54编辑过]

#5
独木星空2021-11-07 10:03
回复 楼主 xuxinxu
我只是用vfp编点程序,计算一些数据,从来也没有往其他方面考虑过。
#6
吹水佬2021-11-07 10:22
用提供数据试了一下,顺序:
rng = eole.Range("A3:N8")
rng.sort(eole.Range("N3:N8"),1)  

[此贴子已经被作者于2021-11-7 10:23编辑过]

#7
吹水佬2021-11-07 10:30
只有本站会员才能查看附件,请 登录

程序代码:
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
eole=Createobject('Excel.application')
eole.displayalerts=.F.
eole.Workbooks.Open(cDefPath+"四高一低20211107.xls")
eole.Worksheets('sheet1').Activate
rng = eole.Range("A3:N8")
key = eole.Range("N3:N8")
rng.sort(key,1)  
eole.ActiveWindow.WindowState = 2 &&最大化
eole.Visible=1
#8
xuxinxu2021-11-07 10:46
回复 4楼 xuxinxu
程序代码:

eole.Range("B2:N8").Select
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add (eole.range("N3:N8"),0, 2, 0)
*eole.ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add (Key:=Range("N3:N8"), SortOn:=0, Order:=2, DataOption:=0) &&(range("B2:N8"),0, 2, 0)
    With eole.ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange (eole.Range("B2:N8"))
        .Header = 1
        .MatchCase = 0
        .Orientation = 1
        .SortMethod = 1
        .Apply
    EndWith

刚才没起作用是因为 .Apply 因出错被注释了
#9
xuxinxu2021-11-07 10:49
回复 7楼 吹水佬

佩服,精确,简洁,谢谢

[此贴子已经被作者于2021-11-7 11:28编辑过]

#10
xuxinxu2021-11-07 12:13
回复 5楼 独木星空
谦虚了
#11
minman2022-04-24 19:27
如果整个有数据的范围均加入排序,范围是否可以用UsedRange指定?
1