ฉันสามารถส่งเสียงบี๊บของ Excel เมื่อการคำนวณเสร็จสิ้นได้หรือไม่


13

ฉันมีการคำนวณที่ยาวมาก ๆ ใน Excel ฉันต้องการเบี่ยงเบนความสนใจจากหน้าจอและทำบางสิ่งบางอย่างที่โต๊ะทำงานของฉัน แต่จะได้รับการแจ้งเตือนเมื่อการคำนวณเสร็จสิ้น

ความคิดใด ๆ


1
คุณคำนวณยังไงกันแน่? ถ้ามันอยู่ใน VBA ทำไมไม่ใช้ VBA ของ"ปี๊บ" วิธีการ ? คุณลองทำอะไรไปแล้ว?
Ƭᴇcʜιᴇ007

2
@ techie007 ไม่ใช่ VBA เพียงแค่ทำงานในสเปรดชีต Excel ขนาดใหญ่
Eliyahu

1
ยังคงคุณสามารถใช้ฟังก์ชั่นบี๊บโดยเฉพาะอย่างยิ่งถ้าคุณเอสเอสใช้ "ฟังก์ชั่น" เพื่อคำนวณแทน "สูตร" แต่ "วิธี" คุณสามารถใช้งานได้นั้นขึ้นอยู่กับการทำงานของสเปรดชีตซึ่งเราไม่รู้ เช่นเดียวกับคุณเพียงพิมพ์ค่าลงในเซลล์แล้วต้องรอเป็นเวลานานเพื่อให้เสร็จหรือคุณกดปุ่มเพื่อเริ่มการคำนวณหลังจากเติมเซลล์หรือไม่ หากคุณกด F11 เพื่อเปิดโปรแกรมแก้ไข VBA มีโค้ดอยู่ในนั้นหรือไม่?
Ƭᴇcʜιᴇ007

@ techie007 ฉันใช้สูตร ฉันจะกด F9 หลังจากทำงานเสร็จและต้องรอ
Eliyahu

คุณต้องคำนวณอีกวิธีหนึ่ง สิ่งที่คุณต้องการเป็นไปไม่ได้หากสิ่งที่คุณทำคือการบอกให้ Excel ดำเนินการคำนวณใน
เวิร์ก

คำตอบ:


21

ตกลงสิ่งที่ต้องลอง (คำแนะนำถือว่า Excel 2007 หรือใหม่กว่า):

  • เปิดสมุดงานของคุณ
  • บันทึกเป็น SS เปิดใช้งานแมโคร ( .XLSM)
  • กด Alt-F11 เพื่อเปิดหน้าต่างการเข้ารหัส VBA
  • คลิกขวาที่ VBAProject ( yourbook.xlsm) แล้วเลือก Insert → Module
  • เปิด "Module1" ที่สร้างขึ้นใหม่
  • ในโมดูลวางส่วนย่อยนี้:

    Sub Auto_Open()
        Application.OnKey "{F9}", "F9Handler"
    End Sub
    

    นี่จะทำให้คีย์ F9 ถูกกำหนดใหม่ทุกครั้งที่เปิด SS เมื่อคุณกด F9 มันจะทำงานF9Handlerแทนการคำนวณตามปกติ

  • ในโมดูลวางส่วนย่อยนี้:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    นี่คือสิ่งที่จะถูกเรียกใช้เมื่อคุณกด F9 บรรทัดแรกจะเรียกใช้งานApplication.Calculate(ซึ่งเป็นสิ่งที่ F9 มักจะทำงาน) แล้วตามด้วยเสียงเตือน

  • บันทึกทุกอย่าง

  • ปิด Excel
  • (Re) เปิด XLSM ที่คุณทำ
  • กำไร. :)

หมายเหตุ: คุณอาจต้องเปิดใช้งานแมโครและ / หรือทำให้เอกสารเป็นเอกสาร "ที่เชื่อถือได้" เพื่อให้มั่นใจว่าแมโครทำงานได้ตามที่คาดไว้

ข้อมูลเพิ่มเติม:


5

เช่นเดียวกับคนอื่น ๆ ที่กล่าวถึงใช้beepคำสั่งใน Visual Basic (VB):

Function beepNow()
Beep 
End Function

ในการรับการเข้ารหัส VB ​​คุณต้องรับDeveloper tabพร้อมใช้งาน (ดู: การรับแท็บนักพัฒนาสามารถมองเห็นได้ )

ดังนั้นเมื่อคุณมีการเปลี่ยนแปลงในเซลล์หรือเงื่อนไขมันจะส่งเสียงบี๊บ ตัวอย่างแมโครเพื่อเรียกใช้รหัส VBS ด้านบน:=IF(C2<>C3,beepNow(),"")


2
เพิ่งทราบว่าหากคุณไม่ได้ใช้ VBA UDF ใด ๆ การแนะนำให้รู้จักอาจทำให้ประสิทธิภาพในการทำงานลดลงอย่างมาก (ซึ่งแตกต่างจากฟังก์ชั่นทั่วไป ไม่ควรมีปัญหากับเสียงบี๊บเพียงครั้งเดียว แต่ถ้าคุณเริ่มโรยที่นี่ทุกที่คุณจะมีปัญหา
sapi

1
น่าเสียดายที่ฟังก์ชั่นนี้ใช้ลำโพง PC ของคุณไม่ใช่การ์ดเสียงและลำโพง แต่เป็นลำโพงภายใน FYI - ในหลาย ๆ บริษัท ลำโพง PC ถูกลบหรือปิดใช้งานดังนั้นคุณจะไม่ได้ยินอะไรเลย
raddevus

1

อีกวิธีหนึ่งคือการวางโมดูลในเอสเอสคุณสามารถวางไว้ใน Personal.xlsb ของคุณ สิ่งนี้จะช่วยให้คุณสามารถ "บี๊บ" พร้อมใช้งานกับเอสเอสใด ๆ หากต้องการเรียกใช้ให้ปรับเปลี่ยนแถบเครื่องมือด่วนหรือแทรกปุ่ม / รูปร่างเพื่อคลิกใน ss ของคุณและกำหนดแมโครให้กับมัน


ยินดีต้อนรับสู่ Super User สิ่งนี้ดูเหมือนจะเป็นความคิดเห็นของคำตอบอื่น ๆ แทนที่จะเป็นโซลูชันที่แตกต่างกันอย่างมากซึ่งเป็นสิ่งที่คำตอบมีไว้สำหรับ ด้วยตัวแทนเพิ่มอีกนิดคุณจะสามารถโพสต์ความคิดเห็นได้
fixer1234

0

คำตอบที่โพสต์โดย @ Ƭᴇcʜιᴇ007เป็นคำตอบที่ยอดเยี่ยมโดยมีข้อยกเว้นประการเดียวที่คนอื่น ๆ แสดงความคิดเห็น: Beepวิธีนี้ใช้ลำโพงในตัว (และปิดการใช้งาน) ในคอมพิวเตอร์ของคุณและไม่ใช้ลำโพงของคุณดังนั้นคุณอาจไม่ได้ยินอะไรเลย

ฉันกำลังโพสต์วิธีแก้ปัญหาตามคำตอบนั้น หากมีเนื้อหาที่เกี่ยวข้องน้อยฉันจะโพสต์ความคิดเห็นแทน

นี่คือสิ่งที่ฉันใช้ในการเล่นเสียงด้วย VBA บน Windows มันใช้ลำโพงคอมพิวเตอร์ปกติของคุณแทนออนบอร์ดและมักจะปิดใช้งานลำโพงที่เข้าถึงด้วยBeepวิธีการ

เริ่มต้นด้วยคำตอบโดย @ Ƭᴇcʜιᴇ007 เพียงเปลี่ยนBeepเป็น:

PlaySound sound_Up

คุณสามารถเปลี่ยนเสียงโดยการเปลี่ยนsound_Upไปยังรายการอื่นจากการแจงนับ SoundType (รายการ) ในโค้ดด้านล่างเช่นหรือsound_Completesound_Notify

Option Explicit
' --------------------------------------------------
' --------------------------------------------------
'   REQUIRED DLL REFERENCE AND CONSTANTS
' --------------------------------------------------
' Reference to external procedure in DLL to play sounds

#If VBA7 Then
    ' 64-bit MS Office
    Private Declare PtrSafe Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#Else
    ' 32-bit MS Office
    Private Declare Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#End If

' --------------------------------------------------
' --------------------------------------------------
'   CONSTANTS
' --------------------------------------------------
'
Public Const SOUND_DO_NOT_WAIT          As String = "&H1"
Private Const SOUND_FILES_PATH          As String = "C:\Windows\Media\"

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC ENUMERATIONS
' --------------------------------------------------
'
Public Enum SoundType
    sound_None = 0
    sound_Up = 1
    sound_Down = 2
    sound_Attention = 3
    sound_Blocked = 4
    sound_Boop = 5
    sound_Complete = 6
    sound_Critical = 7
    sound_Ding = 8
    sound_Error = 9
    sound_Exclamation = 10
    sound_FastDown = 11
    sound_Information = 12
    sound_Notify = 13
    sound_PhoneRing = 14
    sound_RingOut = 15
    sound_Stop = 16
    sound_Tada = 17
    sound_Tone = 18
End Enum

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC METHODS
' --------------------------------------------------
'
Public Sub PlaySound(ByVal sound As SoundType)
' Plays a sound from a list (see the 'SoundType' Enum).  Code execution continues
'   while sound is playing.
    Dim soundFileName                   As String
    soundFileName = GetSoundFileName(sound)

    If Not soundFileName = vbNullString Then
        sndPlaySound32bit SOUND_FILES_PATH & soundFileName, SOUND_DO_NOT_WAIT
    End If
End Sub

' --------------------------------------------------
' --------------------------------------------------
'   PRIVATE DEPENDENCIES
' --------------------------------------------------
'
Private Function GetSoundFileName(ByVal soundToGet As SoundType) As String
' Returns a windows sound file name (not path) from a member of the custom
'   'SoundType' enumeration.

    Dim fName                           As String

    Select Case soundToGet
    Case sound_Up:          fName = "Speech On.wav"
    Case sound_Down:        fName = "Speech Off.wav"
    Case sound_Attention:   fName = "Windows Battery Low.wav"
    Case sound_Blocked:     fName = "Windows Pop-up Blocked.wav"
    Case sound_Boop:        fName = "Speech Misrecognition.wav"
    Case sound_Complete:    fName = "Windows Print complete.wav"
    Case sound_Critical:    fName = "Windows Critical Stop.wav"
    Case sound_Ding:        fName = "Windows Ding.wav"
    Case sound_Error:       fName = "Windows Error.wav"
    Case sound_Exclamation: fName = "Windows Exclamation.wav"
    Case sound_FastDown:    fName = "Speech Sleep.wav"
    Case sound_Information: fName = "Windows Information Bar.wav"
    Case sound_Notify:      fName = "notify.wav"
    Case sound_PhoneRing:   fName = "Windows Ringin.wav"
    Case sound_RingOut:     fName = "Windows Ringout.wav"
    Case sound_Stop:        fName = "chord.wav"
    Case sound_Tada:        fName = "tada.wav"
    Case sound_Tone:        fName = "Windows Balloon.wav"
    Case Else:              fName = vbNullString
    End Select

    GetSoundFileName = fName
End Function
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.