1

Я разрабатываю сложную электронную таблицу для друга; мой первый углубленный Excel. Работаю в Excel 2003. У меня проблема в работе с константами xl, например, xlPaper. Проблема возникает при попытке работать с константой, как будто со значением невозможно работать, когда передается ссылка "xlWhothing".

Код с вопросом:

     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 - "Невозможно установить свойство PaperSize класса PageSetup" при работе с размером страницы и аналогично ориентации.

Тем не менее, если я передаю жесткие значения, как.Papersize = 9 это работает. Не особенно динамично. Прости меня...Я привык к PHP.

Так что мне здесь делать? Есть ли какой-нибудь метод для повторной ссылки на константы на основе имени константы?

2 ответа2

2

Хотя вы, вероятно, могли бы найти обходной путь (см. Ссылки Дейва Петерсона на сообщение Пирсона в http://www.pcreview.co.uk/forums/convert-string-representation-excel-constant-actual-value-t3148528.html) почему бы и нет используйте прямые значения в электронной таблице или разрешите использование выбрать Potrait/Landscape и т. д. с проверкой данных, но затем используйте формулу, чтобы получить правильные постоянные значения 1/2?

Значения констант легко получить, нажав клавишу F2 и просмотрев их в библиотеке.

бумага это

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .