Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过VBA添加分页符不会';行不通_Vba_Excel_Excel 2010 - Fatal编程技术网

通过VBA添加分页符不会';行不通

通过VBA添加分页符不会';行不通,vba,excel,excel-2010,Vba,Excel,Excel 2010,我创建了在excel报告中设置分页符的代码,以处理孤立问题(即,一行文本溢出到下一页,等等)。当我在报表打开/可见的情况下运行代码时,代码工作正常 它是从MS Access打开并执行代码的更大应用程序的一部分。Excel在改进性能的过程中不可见 当我从MS Access运行我的代码时,它不再工作。。。它不会产生错误,只会忽略实际的分页符设置命令。 我读过很多文章,为了避免这个问题,excel需要首先切换到ActiveWindow.View=xlPageBreakPreview,但这也不起作用(我

我创建了在excel报告中设置分页符的代码,以处理孤立问题(即,一行文本溢出到下一页,等等)。当我在报表打开/可见的情况下运行代码时,代码工作正常

它是从MS Access打开并执行代码的更大应用程序的一部分。Excel在改进性能的过程中不可见

当我从MS Access运行我的代码时,它不再工作。。。它不会产生错误,只会忽略实际的分页符设置命令。

我读过很多文章,为了避免这个问题,excel需要首先切换到
ActiveWindow.View=xlPageBreakPreview
,但这也不起作用(我怀疑是因为excel不可见)

我测试了以下各项:

  • 该代码在手动启动或用F8逐步执行时起作用
  • 从Access调用时执行代码(我设置断点)
  • 切换窗口视图也没有任何作用
在后台运行Excel时,如何让Excel通过代码更改分页符?

这是我的代码:

Sub TheOrphanProblem()
Dim iPageBrkRow

'Determine if there are page breaks and if so on which row of the document
If FindNthAutoPageBreak(wsRptHolding, 1) Is Nothing Then
    'No pagebreak found so we exit the sub
    Exit Sub
Else
    iPageBrkRow = FindNthAutoPageBreak(wsRptHolding, 1).Row 'Get row
End If

Debug.Print iPageBrkRow

Dim x As Integer
Dim sCase As String
Dim rNewposition As Range
With wsRptHolding
“为了简洁起见,代码被删掉了。此部分检查是否存在孤立问题,并在需要时查找分页符的新位置。 然后,它将该位置作为一个称为“rNewposition”的范围提供

这是我用来查找分页符位置的代码

Private Function FindNthAutoPageBreak(Sht As Worksheet, Nth As Long) As Range
'Set page break of the last page so that sub asset groups are kept together

Dim HP As HPageBreak
Dim Ctr As Long
For Each HP In Sht.HPageBreaks
    If HP.Type = xlPageBreakAutomatic Then
        Ctr = Ctr + 1
        If Ctr = Nth Then
            Set FindNthAutoPageBreak = HP.Location
        End If
    End If
Next HP

End Function
试试这个

ActiveSheet.DisplayPageBreaks = True
试试这个

ActiveSheet.DisplayPageBreaks = True

您没有正确地限定对象,这将导致其他问题-它应该是:
.applicationon.ActiveWindow.View=xlPageBreakPreview
而不仅仅是
ActiveWindow.View=xlPageBreakPreview
,不幸的是它没有做到这一点。我要把合适的资格赛留在这里。。。谢谢。工作表的页面设置是否设置为使用任何适合页面选项?是。。。在此之前运行的sub中,我使用With
.PageSetup.FitToPagesWide=1将页面宽度设置为1,这样可以添加额外的分页符,但不应删除您添加的分页符。您是否关闭了
PrintCommunication
?您没有正确地限定对象,这将导致其他问题-应该是:
.applicationon.ActiveWindow.View=xlPageBreakPreview
而不仅仅是
ActiveWindow.View=xlPageBreakPreview
,不幸的是,它没有做到这一点。我要把合适的资格赛留在这里。。。谢谢。工作表的页面设置是否设置为使用任何适合页面选项?是。。。在此之前运行的sub中,我使用With
.PageSetup.FitToPagesWide=1将页面宽度设置为1,这样可以添加额外的分页符,但不应删除您添加的分页符。您是否关闭了
PrintCommunication
?我尝试了您的答案,但遗憾的是分页符没有移动。我开始认为这是一种令人讨厌的excel错误。我尝试了你的答案,但不幸的是,分页符没有移动。我开始觉得这是一种讨厌的excel bug。