Excel sabitleri - dinamik olarak nasıl başvuru yapılır?


1

Bir arkadaş için karmaşık bir elektronik tablo geliştiriyorum; ilk derinlemesine Excel. Excel 2003'te çalışıyor. Karşılaştığım sorun xl sabitleriyle, örneğin xlPaper ile ilgileniyor. Sorun sabit ile çalışmaya çalışırken ortaya çıkıyor, "xlWhatever" referansını geçtiğinde değerin üzerinde çalışılamıyor gibi görünüyor.

Sorunlu kod:

     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

Böylece Papersizing, "xlPaperA4", Orient = "xlPortrait" olarak bitiyor. Excel'in verdiği hata, sayfa boyutu ile ilgilenirken ve yönlendirmeyle benzer olduğunda "PageSetup sınıfının PaperSize özelliği ayarlanamadı" dır.

Yine de .Papersize = 9 gibi zorlu değerleri geçersem işe yarar. Özellikle dinamik değil. Affet beni ... Ben PHP alışkınım.

Peki burada ne yaparım? sabitinin ismine dayanarak sabitleri yeniden referanslamak için bir yöntem var mı?

Yanıtlar:


1

xlPaperA4 ve xlPortrait sabittir ve String olarak geçirilemez. Ayarlamaya çalıştığınız özellikler bir sayı bekliyor. Yapmaya çalıştığın şey buradaki son satır gibi.

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

VBA'nın ne kadar güçlü olduğundan emin değilim, ancak Seçme / Dava ifadesine başvurmanız gerekebilir.

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

Müthiş, teşekkürler. Henüz VBA'da Select Case yapma yeteneğine rastlamamıştım ... ama tek cevap bu olmalı. Şerefe!
Onik

Kesinlikle başka cevaplar da var, ancak uygulanması çok daha fazla zaman alacaktır. Gitmene sevindim!
El-E-Yemek

2

Muhtemelen bir geçici çözüm oluşturabildiğiniz halde ( http://www.pcreview.co.uk/forums/convert-string-representation-excel-constant-actual-value-t3148528.html adresindeki Dave Peterson’un bağlantılarına bakınız ). E-tabloda doğrudan değerleri kullanın veya Veri Doğrulama ile Potrait / Landscape vb. kullanmasına izin verin, ancak doğru sabit değerleri 1/2 döndürmek için bir formül kullanın.

Sabit değerlere F2 tuşuna basılarak ve Kitaplıkta aranarak elde edilmesi kolaydır.

kağıtla


Cevap için teşekkürler. Oryantasyon söz konusu olduğunda bunun için geçici çözümler uygundur. Ama bir kere kağıt boyutları hakkında konuşuyorsun. msdn.microsoft.com/en-us/library/ff839964.aspx - Kağıt boyutları Cpearson sitesinde belirtilen sabitleri bulamadım ... belki yeniden tasarlandı?
Onik

Bunları kolayca F2 Kütüphanesinde "Excel.XlPaperSize Üyesi" olarak bulabilirsiniz (yukarıda ekran görüntüsü eklendi). Papersizes ve sabit değerlerden oluşan bir veri doğrulama tablosu hazırlarım, kullanıcıların kağıtları ayarlamasına izin verdikten sonra sabit değeri koda beslerler.
brettdj 19:11
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.