ฉันสามารถเพิ่มฟังก์ชันของตัวเองลงในแถบสถานะที่กำหนดเองใน Excel ได้หรือไม่

ถ้าฉันเลือกเซลล์จำนวนหนึ่งใน Excel ฉันจะเห็นฟังก์ชันบางอย่างในเซลล์เหล่านั้นในแถบสถานะแบบกำหนดเอง ข้อมูลนี้เป็นการเลือกของฉันเองจากสิ่งต่อไปนี้:

  • เฉลี่ย
  • นับ
  • การนับตัวเลข
  • ขั้นต่ำ
  • ขีดสุด
  • ผลรวม

ฉันต้องการเพิ่มฟังก์ชันที่คำนวณอัตราส่วนของเซลล์ที่ไม่ว่างลงในรายการนี้ ฟังก์ชันจะเป็น =COUNTA(range) / (COUNTA(range) + COUNTBLANK(range)) แต่ฉันจะเอามันไปใส่ในแถบสถานะได้อย่างไร ฉันไม่มีประสบการณ์เกี่ยวกับ VBA มากนัก ดังนั้นจึงยินดีรับฟังคำอธิบายบางส่วน


person Lewistrick    schedule 04.09.2013    source แหล่งที่มา
comment
ฉันรู้สึกทึ่งกับสิ่งนี้ เลยค้นหาใน Google บ้าง มีคำถามสองสามข้อที่พวกเขาบอกว่าการใช้ Application.StatusBar เป็นวิธีเดียวเท่านั้น ซึ่งน่าเสียดาย .. :( superuser.com/questions/476690/   -  person jerussell    schedule 04.09.2013
comment
มันคือ! ฉันอยากเห็นสิ่งเหล่านี้ปรับแต่งได้มากขึ้น เช่น เพิ่มฟังก์ชันที่กำหนดเองในแถบสถานะที่กำหนดเอง เมื่อคุณคลิกขวา   -  person Lewistrick    schedule 05.09.2013


คำตอบ (1)


ลองทำสิ่งนี้ (ไม่ใช่วิธีที่ดีที่สุดที่จะทำแต่จะแก้ไขจุดประสงค์ของคุณได้)

คำอธิบาย: สิ่งที่โค้ดนี้ทำคือการตรวจสอบว่าผู้ใช้ได้เลือกช่วงที่ถูกต้อง (อย่างน้อย 2 เซลล์) แล้วใช้ Application.Evaluate เพื่อคำนวณสูตรของคุณ จากนั้นแสดงในแถบสถานะ โปรดทราบว่าฉันไม่ได้ทำการจัดการข้อผิดพลาดใดๆ ฉันแน่ใจว่าคุณจะดูแลมัน :)

วางสิ่งนี้ลงในพื้นที่รหัสแผ่นงานที่เกี่ยวข้อง

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If TypeName(Target) = "Range" Then
        If Target.Cells.Count > 1 Then
            Application.StatusBar = "My Function: " & _
                                    Application.Evaluate( _
                                                          "=COUNTA(" & _
                                                           Target.Address & _
                                                           ") / (COUNTA(" & _
                                                           Target.Address & _
                                                           ") + COUNTBLANK(" & _
                                                           Target.Address & _
                                                           "))" _
                                                           )
        End If
    End If
End Sub

นี่เป็นวิธีพื้นฐานในการทำมัน ในกรณีที่คุณต้องการให้ใช้ได้กับทุกชีต คุณจะต้องแก้ไขให้เหมาะสม

ปัญหาของวิธีนี้ก็คือมันจะระงับข้อความระดับแอปพลิเคชันในแถบสถานะ

ภาพหน้าจอ

ป้อนคำอธิบายรูปภาพที่นี่

person Siddharth Rout    schedule 04.09.2013
comment
ขอบคุณ คุณสามารถลดเวลาลง 1 บรรทัดได้ เพราะหาก Target.Cells.Count = 1 จะมีการเลือกช่วงด้วยและคะแนนฟังก์ชันควรเป็น 0 หรือ 1 - person Lewistrick; 04.09.2013