0

我希望不包括报告前 10 页(即第 1-10 页)的页码(在页脚中)。第 1 页应为 i,第 2 页应为 ii,第 3 页应为 iii,依此类推(用罗马数字表示)......当它到达第 11 页时,这应该重置页码

有谁知道我可以用来实现这一目标的表达方式。因此,如果 GlobalPage number = 1,2,3,4,5,6,7,8,9,10 不显示或补偿全局页码其他内容.....这可能吗?

4

2 回答 2

3

您必须手动更改该值,即在页脚中放置类似于以下内容的内容:

IIf(Globals!PageNumber=1, "i", ...

或者,您可以使用用户函数尝试VBA 将数字转换为罗马数字

于 2012-12-16T10:39:54.650 回答
0

我们将使用一些自定义代码来保持灵活性。Microsoft 有一些代码可以进行罗马数字转换,因此我们将对其进行调整。

让我们添加我们需要的自定义代码:一个将整数转换为罗马数字的函数和一个计算要提供哪种数字的函数。

Function PageNumber(page As Integer, startArabic As Integer) As String
  If page <= startArabic Then
    PageNumber = IntegerToRoman(page)
  Else
    PageNumber = (page - startArabic).ToString()
  End If
End Function

Function IntegerToRoman (ByVal N As Integer) As String
  Const Digits = "ivxlcdm" 
  Dim I As Integer
  Dim Digit As Integer
  Dim Temp As String 

  I = 1 
  Temp = "" 

  Do While N > 0 
    Digit = N Mod 10 
    N = N \ 10 
    Select Case Digit 
      Case 1 
        Temp = Mid(Digits, I, 1) & Temp 
      Case 2 
        Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp 
      Case 3 
        Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp 
      Case 4 
        Temp = Mid(Digits, I, 2) & Temp 
      Case 5 
        Temp = Mid(Digits, I + 1, 1) & Temp 
      Case 6 
        Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Temp 
      Case 7 
        Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp 
      Case 8 
        Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp 
      Case 9 
        Temp = Mid(Digits, I, 1) & Mid(Digits, I + 2, 1) & Temp 
    End Select 

    I = I + 2 
  Loop 

  IntegerToRoman = Temp 

End Function 

为了使报表更灵活,我们将添加一个参数,用于何时恢复为阿拉伯数字(以防报表变长时在某个阶段需要十多个罗马数字)。让我们称之为它@StartArabic,它将是一个具有默认值的整数10。所以现在我们的页码表达式很简单:

="Page " & Code.PageNumber(Globals!PageNumber, Parameters!StartArabic.Value)
于 2012-12-17T23:44:13.787 回答