Constantes do Excel - como referenciar dinamicamente?

1

Estou desenvolvendo uma planilha complexa para um amigo; meu primeiro Excel aprofundado. Trabalhando no Excel 2003. O problema que estou tendo é trabalhar com constantes xl, por exemplo, xlPaper. A questão vem quando se tenta trabalhar com a constante, é como se o valor não pudesse ser trabalhado quando passou a referência "xlWhatever".

Codifique com problema:

     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

Assim Papersizing lá acaba sendo "xlPaperA4", Orient="xlPortrait". O erro do Excel é "Não é possível definir a propriedade PaperSize da classe PageSetup" ao lidar com o tamanho da página e semelhante à orientação.

No entanto, se eu passar valores rígidos como .Papersize = 9, isso funciona. Não é particularmente dinâmico. Perdoe-me ... Estou acostumado com o PHP.

Então, o que eu faço aqui? Existe algum método para re-referenciar constantes com base no nome da constante?

    
por Onyx 19.09.2011 / 05:50

2 respostas

1

xlPaperA4 e xlPortrait são constantes e não podem ser passadas como Strings. As propriedades que você está tentando definir esperam um número. O que você está tentando fazer é como a última linha aqui:

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

Não sei ao certo o quão poderoso é o VBA, mas você pode ter que recorrer a uma declaração 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
    
por 19.09.2011 / 06:12
2

Enquanto você provavelmente poderia criar uma solução alternativa (consulte os links de Dave Peterson para o post de Pearson em link ) por que não usar os valores diretos na planilha ou permitir que o uso escolha Potrait / Landscape etc com validação de dados, mas use uma fórmula para retornar os valores constantes corretos 1/2?

Os valores constantes são fáceis de obter pressionando F2 e procurando-os na Biblioteca.

    
por 19.09.2011 / 06:09