Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MP3 via VBA abspielen unter 64bit geht nicht mehr

Forumthread: MP3 via VBA abspielen unter 64bit geht nicht mehr

MP3 via VBA abspielen unter 64bit geht nicht mehr
22.02.2017 20:27:51
Olli
Hallo Leute!
Verzweifel gerade und hoffe auf eure Hilfe.
Ich lasse per VBA eine MP3 Datei abspielen. Das hat mit meinem alten Rechner Win10/32bit auch problemlos funktioniert.
Jetzt habe ich einen neuen Rechner mit Win10 /64bit /Office 2016 /32bit und da funktioniert es nicht. Die Codes laufen ohne Probleme, aber es kommt kein Sound raus.
Hat jemand eine Ahung, wo mein Fehler ist? Kann es an der 64bit-Windowsversion liegen?
Würde mich riesig freuen, wenn mir wer helfen könnte.
Viele Grüße
Olli
Nachfolgend der Code:
'Modul MP3-Play and Stop via API
Option Explicit
'zunächst die benötigte API-Deklaration
Private Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpszCommand As String, _
ByVal lpszReturnString As String, _
ByVal cchReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Private Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
'MP3-Datei abspielen

Public Function MP3_Play(ByVal sFile As String, _
ByVal sAlias As String) As Boolean
Dim bResult As Boolean
Dim sBuffer As String
Dim lResult As Long
sBuffer = Space$(255)
lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
If lResult  0 Then
sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
' MCI öffnen
lResult = mciSendString("open " & sFile & _
" type MPEGVideo alias " & sAlias, 0, 0, 0)
If lResult = 0 Then
' MP3 abspielen
If mciSendString("play " & sAlias & _
" from 0", 0, 0, 0) = 0 Then
bResult = True
End If
End If
End If
MP3_Play = bResult
End Function

' Wiedergabe stoppen und MCI schließen

Public Sub MP3_Stop(ByVal sAlias As String)
mciSendString "stop " & sAlias, 0, 0, 0
mciSendString "close " & sAlias, 0, 0, 0
End Sub

Sub losgehts()
MP3_Stop "MyAlias"
MP3_Play ActivePresentation.Path & "\losgehts.mp3", "MyAlias"
End Sub
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MP3 via VBA abspielen unter 64bit geht nicht mehr
22.02.2017 22:55:40
Luschi
Hallo Olli,
so funktioniert es bei mir mit Win10/64-bit und Office 2016/32-bit:
https://www.herber.de/bbs/user/111677.xlsm
Weitere Infos findest Du hier:
https://books.google.de/books?id=aJSvqBYrHlgC&pg=PA378&lpg=PA378&dq=%22type+MPEGVideo+alias+%22&source=bl&ots=o25pVDicJb&sig=ZczzstVO83c-j6uz6eAfz6p9BhU&hl=de&sa=X&ved=0ahUKEwj2xJKZx6TSAhUGlCwKHW6DBDwQ6AEIMzAD#v=onepage&q=%22type%20MPEGVideo%20alias%20%22&f=false
Gruß von Luschi
aus klein-Paris
Anzeige
klappt nicht
23.02.2017 17:07:35
Olli
Hallo Luschi!
Danke für deinen Code. Dasselbe Problem...läuft problemlos durch, aber kein Ton. Keine Ahnung woran es liegt. Ist ein bestimmter Verweis vielleicht erforderlich?
Gruß
Olli
AW: klappt nicht
23.02.2017 18:12:36
Luschi
Hallo Olli,
habe mir meine hochgeladene Datei nochmals auf den Rechner geholt, den Dateipfad zur mp3-Datei angepaßt und aus dem angeschlossenen Lautsprecher sprudeln lauter wohlgeformte Töne.
Laut Original-Vorlage aus dem erwähnten Buch gilt der Code aus meiner Datei für folgende _ Dateitypen:

Case "aif", "aifc", "aiff", "au", "mp3", "snd"
strMMTyp = "MPEGVideo"

Dann habe ich eine mp3-Datei genommen, in der Leerzeichen im Dateinamen sind - und schon blieb der Lautsprecher stumm. Ein oder mehrere Minuszeichen im Dateinamen sind auch kein Problem, aber Leerzeichen lassen den Lautsprecher verstummen.
Auch große Dateien (80 MByte) machen bei mir kkeine Probleme.
Gruß von Luschi
aus klein-Paris
Anzeige
das war es :o)
23.02.2017 18:49:00
Olli
Du bist mein Held des Tages...das war die richtige Idee. Es lag zwar nicht am Dateinamen, aber im Pfad hatte ich ein Leerzeichen, was denselben Effekt hatte. Komisch, dass es auf einem 32bit-System keine Probleme bereitet, aber auf einem 64bit-System.
Egal...das Problem ist gelöst...
Vielen vielen Dank...mein Tag ist gerettet :o)
Gruß
Olli
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

MP3 über VBA abspielen in Excel unter 64-Bit


Schritt-für-Schritt-Anleitung

Um eine MP3-Datei über Excel VBA abzuspielen, befolge diese Schritte:

  1. Öffne das VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Rechtsklicke im Projekt-Explorer, wähle Einfügen und dann Modul.
  3. Kopiere den folgenden Code in das Modul:

Option Explicit

' API-Deklarationen für 64-Bit
#If VBA7 Then
    Private Declare PtrSafe Function mciSendString Lib "winmm.dll" _
        Alias "mciSendStringA" (ByVal lpszCommand As String, _
        ByVal lpszReturnString As String, _
        ByVal cchReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
    Private Declare PtrSafe Function GetShortPathName Lib "kernel32" _
        Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
        ByVal lpszShortPath As String, _
        ByVal cchBuffer As Long) As Long
#Else
    Private Declare Function mciSendString Lib "winmm.dll" _
        Alias "mciSendStringA" (ByVal lpszCommand As String, _
        ByVal lpszReturnString As String, _
        ByVal cchReturnLength As Long, _
        ByVal hwndCallback As Long) As Long
    Private Declare Function GetShortPathName Lib "kernel32" _
        Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
        ByVal lpszShortPath As String, _
        ByVal cchBuffer As Long) As Long
#End If

' MP3-Datei abspielen
Public Function MP3_Play(ByVal sFile As String, ByVal sAlias As String) As Boolean
    Dim bResult As Boolean
    Dim sBuffer As String
    Dim lResult As Long
    sBuffer = Space$(255)
    lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
    If lResult <> 0 Then
        sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
        ' MCI öffnen
        lResult = mciSendString("open " & sFile & " type MPEGVideo alias " & sAlias, 0, 0, 0)
        If lResult = 0 Then
            ' MP3 abspielen
            If mciSendString("play " & sAlias & " from 0", 0, 0, 0) = 0 Then
                bResult = True
            End If
        End If
    End If
    MP3_Play = bResult
End Function

' Wiedergabe stoppen und MCI schließen
Public Sub MP3_Stop(ByVal sAlias As String)
    mciSendString "stop " & sAlias, 0, 0, 0
    mciSendString "close " & sAlias, 0, 0, 0
End Sub

Sub losgehts()
    MP3_Stop "MyAlias"
    MP3_Play ActivePresentation.Path & "\losgehts.mp3", "MyAlias"
End Sub
  1. Ändere den Pfad zur MP3-Datei entsprechend deinem Dateispeicherort.

  2. Führe die Subroutine losgehts aus, um die MP3 abzuspielen.


Häufige Fehler und Lösungen

  • Kein Sound bei Verwendung der Funktion:

    • Überprüfe, ob der Dateipfad Leerzeichen enthält. Dies kann dazu führen, dass der Sound nicht abgespielt wird. Verwende stattdessen einen kurzen Pfad ohne Leerzeichen.
  • VBA läuft ohne Fehler, aber kein Ton:

    • Stelle sicher, dass du die richtige API-Deklaration für 64-Bit verwendest (siehe Code oben).
  • Fehlermeldung bei der Ausführung:

    • Prüfe, ob die MP3-Datei im korrekten Format vorliegt und nicht beschädigt ist.

Alternative Methoden

Falls du Probleme mit mciSendString hast, kannst du auch die Windows Media Player-Objekte in VBA verwenden:

Dim wmp As Object
Set wmp = CreateObject("WMPlayer.OCX")
wmp.URL = "C:\Dein\Pfad\losgehts.mp3"
wmp.controls.play

Diese Methode kann einfacher sein, erfordert jedoch, dass der Windows Media Player auf deinem System installiert ist.


Praktische Beispiele

Hier sind einige nützliche Code-Snippets:

  • MP3 abspielen mit Benutzerinteraktion:
Sub PlayMP3()
    Dim mp3Path As String
    mp3Path = Application.GetOpenFilename("MP3 Files (*.mp3), *.mp3")
    If mp3Path <> "False" Then
        MP3_Play mp3Path, "MyAlias"
    End If
End Sub
  • MP3 abspielen und nach einer bestimmten Zeit stoppen:
Sub PlayAndStop()
    MP3_Play "C:\Dein\Pfad\losgehts.mp3", "MyAlias"
    Application.Wait Now + TimeValue("00:00:10") ' 10 Sekunden warten
    MP3_Stop "MyAlias"
End Sub

Tipps für Profis

  • Verwende Option Explicit, um Variablen zu deklarieren und Fehler zu vermeiden.
  • Teste deinen Code regelmäßig in einer Testumgebung, insbesondere bei Änderungen am Dateipfad oder am Dateiformat.
  • Optimiere Dateinamen: Vermeide Leerzeichen und benutze einfache, klare Namen, um Komplikationen zu vermeiden.

FAQ: Häufige Fragen

1. Warum funktioniert mein Code auf 32-Bit, aber nicht auf 64-Bit? Es kann sein, dass die API-Deklarationen für 64-Bit angepasst werden müssen. Stelle sicher, dass du PtrSafe verwendest.

2. Wo finde ich weitere Informationen zu VBA und MP3 abspielen? Du kannst in einer Suchmaschine nach "VBA MP3 abspielen" suchen oder spezifische Foren besuchen, die sich mit Excel VBA beschäftigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige