我正在为一位朋友开发一个复杂的电子表格;这是我的第一个深入的 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 并在库中查找即可轻松获得常数值。