ค่าคงที่ Excel - วิธีการอ้างอิงแบบไดนามิก?


1

ฉันกำลังพัฒนาสเปรดชีตที่ซับซ้อนสำหรับเพื่อน Excel เชิงลึกครั้งแรกของฉัน ทำงานใน Excel 2003 ปัญหาที่ฉันมีคือทำงานกับค่าคงที่ xl เช่น xlPaper ปัญหาเกิดขึ้นเมื่อพยายามทำงานกับค่าคงที่มันเป็นเหมือนค่าที่ไม่สามารถใช้งานได้เมื่อผ่านการอ้างอิง "xlWhething"

รหัสที่มีปัญหา:

     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

ดังนั้นการทำหนังสือพิมพ์จึงกลายเป็น "xlPaperA4", Orient = "xlPortrait" ข้อผิดพลาดที่ Excel แตกออกมาคือ "ไม่สามารถตั้งค่าคุณสมบัติ PaperSize ของคลาส PageSetup" เมื่อจัดการกับขนาดหน้ากระดาษและคล้ายกับการวางแนว

แต่ถ้าฉันผ่านค่าที่ยากเช่น. Paperize = 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

เยี่ยมมากขอบคุณ ฉันยังไม่ได้เลือกความสามารถในการเลือกกรณีใน VBA เลย ... แต่นี่ต้องเป็นคำตอบเดียว ไชโย!
Onyx

มีคำตอบอื่น ๆ แน่นอน แต่น่าจะใช้งานมากขึ้นในการใช้ ฉันดีใจที่คุณไป!
Hand-E-Food

2

ในขณะที่คุณอาจสร้างวิธีแก้ปัญหา (ดูลิงก์ของ Dave Peterson ไปที่โพสต์ของ Pearson ในhttp://www.pcreview.co.uk/forums/convert-string-representation-excel-constant-actual-value-t3148528.html ) ใช้ค่าโดยตรงในสเปรดชีตหรือปล่อยให้ใช้เลือก Potrait / Landscape ฯลฯ ด้วยการตรวจสอบความถูกต้องของข้อมูล แต่ใช้สูตรเพื่อคืนค่าคงที่ที่ถูกต้อง 1/2?

ค่าคงที่นั้นสามารถหาได้ง่ายโดยการกด F2 แล้วมองหามันใน Library

กระดาษมัน


ขอบคุณสำหรับการตอบกลับ. วิธีแก้ปัญหาสำหรับสิ่งนี้ก็โอเคที่เกี่ยวข้องกับการวางแนว แต่เมื่อคุณพูดถึงขนาดกระดาษ ... อุ๊ย! msdn.microsoft.com/en-us/library/ff839964.aspx - ขนาดกระดาษฉันไม่สามารถหาค่าคงที่ที่อ้างถึงบนไซต์ Cpearson แม้ว่า ... อาจมีการออกแบบใหม่หรือไม่
Onyx

คุณสามารถค้นหาสิ่งเหล่านั้นได้ง่ายในห้องสมุด F2 ในฐานะ "สมาชิกของ Excel.XlPaperSize" [เพิ่มภาพหน้าจอด้านบน] ฉันจะตั้งค่าตารางการตรวจสอบข้อมูลของเอกสารและค่าคงที่ให้ผู้ใช้เลือกเอกสารขนาดใหญ่แล้วป้อนค่าคงที่ลงในรหัส
brettdj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.