注册 登录
编程论坛 VFP论坛

VFP9 无法调用VBA语句 Set ActiveSheet.HPageBreaks(2).Location = Range("A50")

xuxinxu 发布于 2021-10-28 11:07, 3567 次点击
[目的]
想在固定行前添加分页符

[找到的方法]
方法一: eole.Worksheets("Sheet1").Rows(50).PageBreak = 1

方法二:  eole.ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Cells(50, 1) 此方法没实验,因为结尾部分感觉也出问题

方法三: Set eole.ActiveSheet.HPageBreaks(1).Location = eole.Range("A50")

[问题描述]
法一和法二不能除掉EXCEL系统自带的虚线分页符(此情况出现于自己设置的分页符在一页以外)
法三在VBA中运行完美,定位精确,不出现虚线分页符
但是在VFP中方法三连保存都不允许,更别谈编译了,提示的错误是:“命令中含有不能识别的短语或关键字”

希望哪位同志能帮助一下, VBA 中set 语句如何在VFP中使用,另外,eole.Selection.Delete  -4162 结尾的数字在VFP中也导致无法保存。
23 回复
#2
吹水佬2021-10-28 11:36
不好乱猜
最好给出完整可运行测试的示例相关文件
#3
xuxinxu2021-10-28 12:20
只有本站会员才能查看附件,请 登录
#4
xuxinxu2021-10-28 18:34
继续顶起
#5
xuminxz2021-10-28 18:40
    Set eole.ActiveSheet.HPageBreaks(1).Location = eole.Range("A50")
多个了Set
#6
xuxinxu2021-10-28 20:51
把set去掉以后,不再报错,但是语句不起作用了。
#7
xuxinxu2021-10-28 20:52
没有在指定的行前添加分页符
#8
吹水佬2021-10-28 22:50
在EXCEL用VBA不用set测试 ActiveSheet.HPageBreaks(1).Location = Range("A50") 也是无作用
按VBA要求给对象赋值要用set,VFP可以用VBS脚本来使用set,不知有无其他更好的办法。
#9
sych2021-10-29 08:59
#DEFINE xlPageBreakAutomatic    -4105    &&Excel 自动添加分页符。
#DEFINE xlPageBreakManual    -4135    &&手动插入分页符。
#DEFINE xlPageBreakNone    -4142    &&工作表中不插入分页符。
xlApp = GETOBJECT(, "Excel.Application")
If VARTYPE(xlApp)<>"O"
    MESSAGEBOX("没有打开 Excel","温馨提示")
    retu
ENDIF
xlapp.ActiveSheet.ResetAllPageBreaks  &&重置分页符
xlapp.cells(6,2).PageBreak = xlPageBreakNone  &&取消分页符
xlapp.cells(7,1).PageBreak = xlPageBreakManual  &&在你需要的地方插入分页符,如果你设置的分页长度大于页面长度,系统会自动添加一个分页符
#10
吹水佬2021-10-29 10:29
按每页行数添加行分页符
只有本站会员才能查看附件,请 登录

程序代码:
eole = CREATEOBJECT("Excel.application")
eole.displayalerts = 0
eole.SheetsInNewWorkbook = 1
eole.Workbooks.Add
eole.Worksheets("sheet1").Activate
eole.ActiveWindow.WindowState = 2
FOR i=1 TO 100
   FOR j=1 TO 5
       eole.cells[i,j] = i
   ENDFOR
ENDFOR
nRow = 5  &&每页行数
nPageBreaks = INT(eole.CountA(eole.ActiveSheet.Range("A:A"))/nRow)  &&分页符数
FOR i=1 TO nPageBreaks
    eole.Range("A"+TRANSFORM(i*nRow+1)).Select
    eole.ActiveSheet.HPageBreaks.Add(eole.ActiveCell)
ENDFOR
eole.Visible=.T.
#11
xuminxz2021-10-29 10:34
回复 楼主 xuxinxu
eOle.Worksheets("Sheet1").Rows(50).PageBreak=1
#12
吹水佬2021-10-29 10:43
以下是引用xuminxz在2021-10-29 10:34:18的发言:

eOle.Worksheets("Sheet1").Rows(50).PageBreak=1

这个可以
#13
xuxinxu2021-10-29 10:56
只有本站会员才能查看附件,请 登录


取消分页符那句无效果

目前想把图中的虚线分页符删除,保留我自己设置的实线分页符(因为我设置的分页符在一页之外)

用我的方法三就不会出现系统自带的虚线分页符,但是我不会使用VBS

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

#14
吹水佬2021-10-29 11:07
回复 13楼 xuxinxu
全部重新按每页行数分页就可以
程序代码:
nRow = 50  &&每页行数
nPageBreaks = INT(eole.CountA(eole.ActiveSheet.Range("A:A"))/nRow)  &&分页符数
FOR i=1 TO nPageBreaks
    eole.ActiveSheet.Rows[i*nRow+1].PageBreak = 1
ENDFOR


#15
xuxinxu2021-10-29 11:07
回复 10楼 吹水佬
什么软件能将代码贴出来,还带着色和加粗
#16
xuxinxu2021-10-29 11:12
回复 14楼 吹水佬
这是什么原理呢?还有为何要用方括号,圆括号不行吗?
#17
吹水佬2021-10-29 11:14
以下是引用xuxinxu在2021-10-29 11:07:47的发言:

什么软件能将代码贴出来,还带着色和加粗

用代码标签
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#18
xuxinxu2021-10-29 11:30
回复 14楼 吹水佬
程序代码:
  nRow = 0
  nPageBreaks = 0
  nRow = (bjs + 2) * 3 '&&每页行数
  nPageBreaks = Int(CountA(ActiveSheet.Range("A:A")) / nRow)
'&&分页符数
  For i = 1 To nPageBreaks
       ActiveSheet.Rows [i*nRow+1].PageBreak = 1
  Next i



因为我的测试环境是VBA,成功后再添加到VFP中,所以首先进行了VBA测试,但是
发现CountA函数和Count函数 显示“子过程或函数未定义”

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

#19
吹水佬2021-10-29 11:52
回复 18楼 xuxinxu
Application.CountA()
#20
xuxinxu2021-10-29 13:49
VBA中试验的结果如下


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

有自带的虚线分页符和我设的实线分页符

程序代码:


 bjs = 14
  ActiveSheet.ResetAllPageBreaks
  Cells(48, 2).PageBreak = -4142
  
  nRow = 0
  nPageBreaks = 0
  nRow = (bjs + 2) * 3 '&&每页行数
  nPageBreaks = Int(Application.CountA(ActiveSheet.Range("A:A")) / nRow)
'&&分页符数
  
  For i = 1 To nPageBreaks
       ActiveSheet.Rows(i * nRow + 1).PageBreak = 1
  Next i
  


[此贴子已经被作者于2021-10-29 13:52编辑过]

#21
吹水佬2021-10-29 14:14
回复 20楼 xuxinxu
CountA()只到空行,还要往下找非空行,直到没有非空行为止,才可得正确的总行数。
#22
xuxinxu2021-10-29 20:09
感谢版主《吹水佬》百忙之中的回帖,第一是高度,第二是热心。
目前也实验了多次,发现因为不会调用VBA的set语句,总是达不到完美
所以,最后一步就是人工调整一下,只需要将虚线分页符往下拉到实线分页符位置就可以了,将就吧,又是工作,又是家庭的,实在是没有精力了
再次感谢各位的无私奉献,还发现我自己对VBA真是啥也不懂,各位如果有VBA的系统学习资料请不吝推荐一下。

多年前一直在梅子VFP论坛学习,这星期回去发现实行会员收费制了,我以前是会员,现在不是,也无法阅览贴子,感觉心中的某一块阵地又缺失了一角。
#23
吹水佬2021-10-29 21:34
回复 22楼 xuxinxu
EXCEL计算行数没有通用绝对准确的方法,要看EXCEL表而定,如果分页有规律,就可准确找到设置分页符的行。
#24
xuxinxu2021-11-01 14:04
学习了
1