Excel常量--如何动态引用?

Excel常量--如何动态引用?

我正在为一位朋友开发一个复杂的电子表格;这是我的第一个深入的 Excel。在 Excel 2003 中工作。我遇到的问题是使用 xl 常量,例如 xlPaper。尝试使用常量时出现问题,就像传递引用“xlWhatever”时无法使用该值一样。

有问题的代码:

     Dim myRange As String, LM As Integer, RM As Integer, TM As Integer, BM As Integer, Papersizing As String, Orient As String, Quality As Integer
            On Error GoTo Errorcatch
    TM = ws.Range("f2").Value
     LM = ws.Range("f3").Value
     BM = ws.Range("f4").Value
     RM = ws.Range("f5").Value
      Papersizing = "xlPaper" & ws.Range("d2").Value
      Orient = "xl" & ws.Range("d5").Value
      MsgBox Papersizing
     Quality = ws.Range("d9").Value
    With ActiveSheet.PageSetup
    .PrintTitleRows = ""
    .PrintTitleColumns = ""
End With


    With ActiveSheet.PageSetup
    MsgBox .Papersize
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.CentimetersToPoints(LM)
        .RightMargin = Application.CentimetersToPoints(RM)
        .TopMargin = Application.CentimetersToPoints(TM)
        .BottomMargin = Application.CentimetersToPoints(BM)
        .HeaderMargin = Application.CentimetersToPoints(0)
        .FooterMargin = Application.CentimetersToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = Orient
        .Draft = False
        .Papersize = Papersizing
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
    End With

因此那里的 Papersizing 最终为“xlPaperA4”,Orient =“xlPortrait”。处理页面大小时,Excel 吐出的错误是“无法设置 PageSetup 类的 PaperSize 属性”,处理方向时也类似。

但是如果我传递像 .Papersize = 9 这样的硬值,它就会起作用。不是特别动态。请原谅我...我习惯使用 PHP。

所以我在这里该做什么?是否有一些方法可以根据常量的名称重新引用常量?

答案1

xlPaperA4 和 xlPortrait 是常量,不能作为字符串传递。您尝试设置的属性需要一个数字。您尝试执行的操作类似于此处的最后一行:

Const xlSomething = 123
Choice = "Something"
Value = xlSomething    ' Value = 123
Value = "xl" & Choice  ' Value = "xlSomething", Error: Not a number!

我不确定 VBA 有多强大,但您可能不得不求助于 Select/Case 语句。

Select ws.Range("d2").Value
    Case "A4": Papersizing = xlPaperSizeA4
    Case "A3": Papersizing = xlPaperSizeA3
    Case Else
        Papersizing = 0
        MsgBox "Bad paper size."
End Select

答案2

虽然你也许可以建立一个解决方法(请参阅 Dave Peterson 的链接,链接至 Pearson 的帖子http://www.pcreview.co.uk/forums/convert-string-representation-excel-constant-actual-value-t3148528.html) 为什么不使用电子表格中的直接值,或者让用户选择带有数据验证的 Potrait/Landscape 等,然后使用公式返回正确的常数值 1/2?

按下 F2 并在库中查找即可轻松获得常数值。

用纸

相关内容