Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Beim Öffnen der Datei Musik im Hintergrund abspielen

Forumthread: Beim Öffnen der Datei Musik im Hintergrund abspielen

Beim Öffnen der Datei Musik im Hintergrund abspielen
01.07.2025 13:57:44
Soham235
Hallo an alle,
gibt es eine Möglichkeit, ein kurzes Musikfile beim Öffnen der Excel-Datei im Hintergrund abzuspielen?
Hab jetzt mal das hier in "DieseArbeitsmappe" geschrieben, bekomme dabei aber einen "Fehler beim Kompilieren: Syntaxfehler"

Private Sub Workbook_Open()
Dim MusikDatei As String
MusikDatei = "C:\test\test.wav"
If Dir(MusikDatei) > "" Then
My.Computer.Audio.Play(MusikDatei, AudioPlayMode.Background)
Else
MsgBox "Musikdatei nicht gefunden: " & MusikDatei
End If
End Sub

Grüße
Alex
Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nimm das unter...
01.07.2025 14:38:50
Case
Moin Alex, :-)

... "DieseArbeitsmappe" (Getestet. Pfad- und Dateiname anpassen): ;-)
Option Explicit

Private Declare PtrSafe Function PlaySoundA Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long
Const SND_FILENAME = &H20000
Private Sub Workbook_Open()
PlaySoundA "C:\Temp\vader.wav", 0, SND_FILENAME
End Sub

Servus
Case
Anzeige
AW: Nimm das unter...
01.07.2025 16:03:51
Soham235
Servus Case,

genial, funzt problemlos, danke dir!

Noch 'ne kurze Folgefrage:
Kann ich das Musikfile auch in die Datei einbinden?
(Einfügen > Objekt > Aus Datei erstellen ...und das File in eine Zelle ablegen habe ich schon geschafft...)
Wenn ja, wie müsste ich das in deinem Makro definieren?

Alex
Anzeige
Eingebettete Sounddatei abspielen
01.07.2025 17:16:12
Beverly
Hi Alex,

versuche es mal mit diesem Code:

Private Sub Workbook_Open()

Application.DisplayAlerts = False
With Worksheets("Tabelle1") '== Tabellenname anpassen
.Shapes("Object 6").Select '== Name des Soundobjekts anpassen
If Val(Application.Version) 9 Then
Selection.Verb Verb:=xlPrimary
Else
Selection.Verb Verb:=0
End If
End With
Application.DisplayAlerts = True
End Sub


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Eingebettete Sounddatei abspielen
01.07.2025 17:58:48
Soham235
Hi Karin,

danke für die schnelle Antwort. Irgendetwas scheine ich falsch zu machen, bekomme einen Laufzeitfehler mit der Info, dass das Element mit dem angegebenen Namen nicht gefunden wurde. Das Musikfile "Test.wav" befindet sich auf jeden Fall in "Tabelle1", in Zelle V2...

Private Sub Workbook_Open()
Application.DisplayAlerts = False
With Worksheets("Tabelle1") '== Tabellenname anpassen
.Shapes("Test.wav").Select '== Name des Soundobjekts anpassen
If Val(Application.Version) 9 Then
Selection.Verb Verb:=xlPrimary
Else
Selection.Verb Verb:=0
End If
End With
Application.DisplayAlerts = True
End Sub

LG

Alex
Anzeige
AW: Eingebettete Sounddatei abspielen
01.07.2025 18:03:23
Beverly
Hi Alex,

der Fehler bedeutet, dass es das Objekt "Test.wav" bei dir nicht gibt. Du darfs nicht den Namen der Sounddatei verwenden sondern musst den Namen des eingefügten Objektes eintragen - der wird dir im Namensfenster angezeigt, wenn du im Editiermodus auf das Objekt klickst.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Eingebettete Sounddatei abspielen
01.07.2025 18:25:07
Soham235
Hi Karin,

habe es jetzt hinbekommen. Die eingebettete Musikdatei wird abgespielt, jedoch wird dabei mein Media Player geöffnet...
Wie könnte ich aber die Datei im Hintergrund abspielen?

LG

Alex
AW: Eingebettete Sounddatei abspielen
01.07.2025 20:02:29
Beverly
Hi Alex,

die Sounddatei muss doch mit einem Sound-Programm abgespielt werden und das ist dasjenige, welches du als Standard für diesen Dateityp festgelegt hast - in deinem Fall der Mediaplayer.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
Mit eingebetteten...
01.07.2025 20:42:22
Case
Moin Alex, :-)

... WAV-Dateien wirst du Probleme bekommen. Mit irgendeiner Anwendung muss die Datei abgespielt werden. ;-)

Warum bettest du die Datei überhaupt ein? ;-)

Meine Code von vorhin würde ich dahingehend anpassen, dass noch ein Flag dazukommt: ;-)
Option Explicit

Private Declare PtrSafe Function PlaySoundA Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long
Const SND_FILENAME = &H20000
Const SND_ASYNC = &H1
Private Sub Workbook_Open()
PlaySoundA "C:\Temp\vader.wav", 0, SND_FILENAME Or SND_ASYNC
End Sub

So wird die Datei asyn­chron abgespielt. Du kannst also in Excel was machen. Beim alten Code wartet er, bis die WAV-Datei zu Ende ist. ;-)

Wenn du willst, dass es mit eingebetteten Dateien auch geht, musst du sie erst wieder aus dem Objekt holen, oder in ein ausgeblendetes Tabellenblatt die Datei als Byte-Array schreiben. Dann kannst du sie beim öffnen aus diesem Array "erstellen" und abspielen. ;-)

Servus
Case
Anzeige
AW: Mit eingebetteten...
01.07.2025 22:30:28
Soham235
Hi Case,

das mit der Flag funzt jetzt noch besser, danke! Werde die Musikdatei jetzt nicht mehr einbinden bzw. extern aufrufbar belassen. Der Grundgedanke war, dass wenn ich die fertige Arbeitsdatei weitergebe, der andere dann alles in einer einzigen Datei hat. Die Wiedergabe über einen Media Player, der sich extra öffnet, hatte ich demgemäß nicht vorgesehen. Wenn ich euch aber richtig verstanden habe, gibt es nur diese zwei Möglichkeiten: 1) Musikdatei einbetten und mit einem externen Media Player abspielen oder 2) die extern gelagerte Musikdatei in Excel aufrufen und im Hintergrund abspielen. Excel kann dann keine Musik selbst abspielen...

Insofern danke nochmals für dein Update! Konnte, als Anfänger wieder einmal etwas hinzulernen...
Servus
Alex
Anzeige
Wie gesagt - es gibt noch...
02.07.2025 11:22:59
Case
Moin Alex, :-)

... eine Möglichkeit - die WAV-Datei als Byte-Array in ein Tabellenblatt schreiben und daraus die Sounddatei neu schreiben/erstellen: ;-)
https://www.herber.de/bbs/user/177977.xlsb

Das ist jetzt aber nicht für große Dateien gedacht. Auch habe ich es nicht ausprogrammiert - ich sehe es eher als Spielwiese. ;-)

Servus
Case
Anzeige
Also diese...
02.07.2025 11:29:14
Case
Moin Alex, :-)

... Codezeile kannst du löschen (ist noch ein Überbleibsel - aber nur diese eine Zeile): ;-)
strFile = "C:\Temp\vader.wav"

Servus
Case
AW: Wie gesagt - es gibt noch...
03.07.2025 15:12:33
Soham235
Hi Case,

ja, das wäre eine passende Möglichkeit. Nur, wie erstelle ich ein Byte-Array (das ist die Zahlenfolge am zweiten Tabellenblatt?) aus meinem Soundfile?

Zum Soundfile noch: Es ist ein ca. 8 sec. langer Soundeffekt. Das Format ist ziemlich egal. Das WAV-Format habe ich nur genommen, da ich irgendwo gelesen habe, dass Excel nur dieses Format akzeptiert.

Servus
Alex
Anzeige
Das geht dann...
03.07.2025 16:43:51
Case
Moin Alex, :-)

... so: ;-)
Public Sub Main_So()

Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
strFile = "C:\Temp\vader.wav"
lngCount = FileLen(strFile)
ReDim bytSong(1 To lngCount)
intFile = FreeFile
Open strFile For Binary As #intFile
Get #intFile, 1, bytSong
Close #intFile
With Tabelle2
.Range(.Cells(1, 1), .Cells(lngCount, 1)) = WorksheetFunction.Transpose(bytSong)
End With
End Sub

Dann ist im Tabellenblatt (CodeName Tabelle2) das Array. Das Tabellenblatt kannst du auch ausblenden. Das Array musst du ja nur einmal erstellen. ;-)

Ich denke, du siehst, wo du anpassen musst. ;-)

Wenn du an die Grenzen von Transpose kommst, dann schreibe es mit einer Schleife ins Tabellenblatt. Dauert länger, aber für eine einmalige Sache ist es egal. ;-)

Servus
Case
Anzeige
AW: Das geht dann...
03.07.2025 17:19:56
Soham235
Hi Case,

hab eine Excel-Datei mit 2 Blättern angelegt und das ff. eingegeben:

Public Sub Main_So()
Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
strFile = "C:\test4.wav"
lngCount = FileLen(strFile)
ReDim bytSong(1 To lngCount)
intFile = FreeFile
Open strFile For Binary As #intFile
Get #intFile, 1, bytSong
Close #intFile
With Tabelle2
.Range(.Cells(1, 1), .Cells(lngCount, 1)) = WorksheetFunction.Transpose(bytSong)
End With
End Sub

Bekomme jetzt einen Laufzeitfehler '76' mit 'Pfad nicht gefunden'. Die Zeile mit 'lngCount = FileLen(strFile)' ist gelb hintergelt.
Ist dieser Fehler das, was du mit 'Grenzen von Transpose" meintest?

Servus
Alex

PS: Ist die Sounddatei mit 125 kb zu groß?

Anzeige
Die kannst du...
03.07.2025 17:33:04
Case
Moin Alex, :-)

... die Sonddatei hier hochladen - (zippe sie vorher)?

Servus
Case
Hier ist das...
03.07.2025 17:52:42
Case
Moin Alex, :-)

... Tabellenblatt mit den Daten: ;-)
https://www.herber.de/bbs/user/177993.zip

Also bei mir klingelt die Kasse. ;-)

Servus
Case
Anzeige
AW: Hier ist das...
03.07.2025 19:52:24
Soham235
Deine Datei funktioniert bei mir auch :)
Irgendwie schaffe ich es aber nicht, die Sounddatei in meine Excel-Datei einzubauen.
Vielleicht kannst du mir helfen, zu erkennen, wo bei mir der Denkfehler liegt?

Meine Excel-Datei besteht aus 31 Blättern.
Ich füge also ein neues Blatt (wird automatisch mit 'Tabelle1' bezeichnet) ein.
Dann füge ich im VLB in Tabelle1 ein:

Public Sub Main_So()
Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
strFile = "C:\test4.wav"
lngCount = FileLen(strFile)
ReDim bytSong(1 To lngCount)
intFile = FreeFile
Open strFile For Binary As #intFile
Get #intFile, 1, bytSong
Close #intFile
With Tabelle1
.Range(.Cells(1, 1), .Cells(lngCount, 1)) = WorksheetFunction.Transpose(bytSong)
End With
End Sub

Soweit, so gut. Das Auslesen in Tabelle1 hat funktioniert.
Dann erstelle ich ein neues Modul, speichere ab und starte erneut.

Option Explicit
Private Declare PtrSafe Function PlaySoundA Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long
Const SND_FILENAME = &H20000
Const SND_ASYNC = &H1
Public Sub Main()
Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
Dim lngTMP As Long
lngCount = Tabelle2.Cells(Tabelle2.Rows.Count, 1).End(xlUp).Row
ReDim bytSong(1 To lngCount)
With Tabelle2
For lngTMP = 1 To lngCount
bytSong(lngTMP) = .Cells(lngTMP, 1).Value
Next lngTMP
End With
strFile = Environ("TEMP") & "\TMPSound.wav"
intFile = FreeFile
Open strFile For Binary Access Write As #intFile
Put #intFile, 1, bytSong
Close #intFile
Call PlaySoundAPI(strFile)
End Sub
Sub PlaySoundAPI(ByVal strDatei As String)
PlaySoundA strDatei, 0, SND_FILENAME Or SND_ASYNC
End Sub

Liege ich soweit richtig? Wenn ja, funktioniert es leider (noch) nicht...
Anzeige
AW: Hier ist das...
03.07.2025 20:15:28
Soham235
Sorry, hab den falschen Text kopiert, also nochmal:

Vielleicht kannst du mir helfen, zu erkennen, wo bei mir der Denkfehler liegt?

Meine Excel-Datei besteht aus 31 Blättern.
Ich füge also ein neues Blatt (wird automatisch mit 'Tabelle1' bezeichnet) ein.
Dann füge ich im VLB in Tabelle1 ein:

Public Sub Main_So()
Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
strFile = "C:\test4.wav"
lngCount = FileLen(strFile)
ReDim bytSong(1 To lngCount)
intFile = FreeFile
Open strFile For Binary As #intFile
Get #intFile, 1, bytSong
Close #intFile
With Tabelle1
.Range(.Cells(1, 1), .Cells(lngCount, 1)) = WorksheetFunction.Transpose(bytSong)
End With
End Sub

Soweit, so gut. Das Auslesen in Tabelle1 hat funktioniert.
Dann speichere ich das ff. in ein neues Modul?

Option Explicit
Private Declare PtrSafe Function PlaySoundA Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As LongPtr, ByVal dwFlags As Long) As Long
Const SND_FILENAME = &H20000
Const SND_ASYNC = &H1
Public Sub Main()
Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
Dim lngTMP As Long
lngCount = Tabelle1.Cells(Tabelle1.Rows.Count, 1).End(xlUp).Row
ReDim bytSong(1 To lngCount)
With Tabelle1
For lngTMP = 1 To lngCount
bytSong(lngTMP) = .Cells(lngTMP, 1).Value
Next lngTMP
End With
strFile = Environ("TEMP") & "\TMPSound.wav"
intFile = FreeFile
Open strFile For Binary Access Write As #intFile
Put #intFile, 1, bytSong
Close #intFile
Call PlaySoundAPI(strFile)
End Sub
Sub PlaySoundAPI(ByVal strDatei As String)
PlaySoundA strDatei, 0, SND_FILENAME Or SND_ASYNC
End Sub
Anzeige
Also...
03.07.2025 20:45:11
Case
Moin, :-)

... WorksheetFunction.Transpose funktioniert da nicht mehr. Geht über die Grenze. ;-)

Kopiere einfach mein Tabellenblatt in deine Mappe (du weißt hoffentlich wie man sowas macht). ;-)

Dann schaust du im VBA-Editor welchen Codenamen das Tabellenblatt hat - also das, welches du gerade reinkopiert hast (das ist der Name VOR der Klammer). ;-)
Userbild
Dann nimmst du diese Sub: ;-)
Public Sub Main()

Dim intFile As Integer
Dim strFile As String
Dim bytSong() As Byte
Dim lngCount As Long
Dim lngTMP As Long
With Tabelle3 '!!!!!!!!!!!!!!!!!!!!!!!!!!! BEI BEDARF ANPASSEN
lngCount = .Cells(.Rows.Count, 1).End(xlUp).Row
ReDim bytSong(1 To lngCount)
For lngTMP = 1 To lngCount
bytSong(lngTMP) = .Cells(lngTMP, 1).Value
Next lngTMP
End With
strFile = Environ("TEMP") & "\TMPSound.wav"
intFile = FreeFile
Open strFile For Binary Access Write As #intFile
Put #intFile, 1, bytSong
Close #intFile
Call PlaySoundAPI(strFile)
End Sub
Sub PlaySoundAPI(ByVal strDatei As String)
PlaySoundA strDatei, 0, SND_FILENAME Or SND_ASYNC
End Sub

Jetzt musst du nur noch "Tabelle3" mit deinem Namen anpassen - dann sollte es gehen. ;-)

Und lösche die Sub "Main_So()". ;-)

Das Tabellenblatt mit dem Array kannst du dann ausblenden. ;-)

Servus
Case



Anzeige
AW: Also...
03.07.2025 21:56:30
Soham235
Alles gut, schwere Geburt, habe es aber jetzt hinbekommen ;)
Danke für deine Hilfe und v.a. Geduld mit mir!

Servus
Alex

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige