Tôi có những tính toán thực sự dài trong Excel. Tôi muốn chuyển sự chú ý của tôi khỏi màn hình và hoàn thành công việc tại bàn của tôi, nhưng được cảnh báo khi tính toán kết thúc.
Có ý kiến gì không?
Tôi có những tính toán thực sự dài trong Excel. Tôi muốn chuyển sự chú ý của tôi khỏi màn hình và hoàn thành công việc tại bàn của tôi, nhưng được cảnh báo khi tính toán kết thúc.
Có ý kiến gì không?
Câu trả lời:
OK, một cái gì đó để thử (hướng dẫn giả sử Excel 2007 hoặc mới hơn):
.XLSM
) kích hoạt macro .yourbook.xlsm
) và chọn Chèn → Mô-đun.Trong mô-đun dán đoạn mã này:
Sub Auto_Open()
Application.OnKey "{F9}", "F9Handler"
End Sub
Điều này sẽ khiến khóa F9 được gán lại mỗi khi SS được mở. Khi bạn nhấn F9, nó sẽ chạy F9Handler
thay vì tính toán thông thường.
Trong mô-đun, dán đoạn mã này:
Sub F9Handler()
Application.Calculate
Beep
End Sub
Đây là những gì sẽ được chạy khi bạn nhấn F9. Dòng đầu tiên chạy Application.Calculate
(đó là những gì F9 thường thực hiện), và sau đó là Beeps.
Tiết kiệm tất cả mọi thứ.
Lưu ý: Có thể bạn sẽ phải bật macro và / hoặc biến tài liệu thành tài liệu "đáng tin cậy" để đảm bảo (các) macro chạy như mong đợi.
Thêm thông tin:
Giống như những người khác đã đề cập, sử dụng beep
lệnh trong Visual Basic (VB):
Function beepNow()
Beep
End Function
Để có được mã hóa VB, bạn cần phải có Developer tab
sẵn (xem: Hiển thị tab Nhà phát triển )
Vì vậy, khi bạn có một sự thay đổi trong một tế bào hoặc điều kiện, nó sẽ phát ra tiếng bíp. Ví dụ macro để gọi mã VBS ở trên:=IF(C2<>C3,beepNow(),"")
Ngoài ra, để đặt mô-đun vào ss, bạn có thể đặt nó vào Personal.xlsb của mình. Điều này sẽ cho phép bạn có "tiếng bíp" có sẵn cho bất kỳ ss. Để chạy nó, hãy sửa đổi Thanh công cụ truy cập nhanh hoặc chèn một nút / hình dạng để nhấp vào ss của bạn và gán macro cho nó.
Câu trả lời được đăng bởi @ cʜιᴇ007 là một câu trả lời xuất sắc với một ngoại lệ mà những người khác đã nhận xét về: Beep
phương pháp này dựa trên loa trên bo mạch của bạn (và đôi khi bị vô hiệu hóa) trong máy tính và không sử dụng loa của bạn, vì vậy bạn có thể không nghe thấy gì.
Tôi đang đăng một cách giải quyết dựa trên câu trả lời đó. Nếu có ít nội dung liên quan, tôi sẽ đăng một bình luận thay thế.
Đây là những gì tôi sử dụng để phát âm thanh với VBA trên Windows. Nó sử dụng loa máy tính thông thường của bạn thay vì trên bo mạch và loa thường bị vô hiệu hóa được truy cập bằngBeep
phương thức.
Bắt đầu với câu trả lời của @ cʜιᴇ007. Chỉ cần thay đổi Beep
điều này:
PlaySound sound_Up
Bạn có thể thay đổi âm thanh bằng cách thay đổi sound_Up
sang một mục khác từ bảng liệt kê SoundType (danh sách) trong mã bên dưới, chẳng hạn như sound_Complete
hoặc sound_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