Dateien aneinanderfügen per VBA
#1
Hallo Excel-VBA Profis,

Ich möchte per VBA aus Excel heraus mehrere Audiodateien miteinander verbinden.
Für die Dateien A_0001.mp3 und A_0002.mp3 funktioniert dies über folgenden
Befehl auch sehr gut:

Shell Environ("COMSPEC") & " /C Type C:\Audio\A_0002.mp3 >> C:\Audio\A_0001.mp3

Die Datei A_0002.mp3 wird an die Datei A_0001.mp3 angehängt.

Das Problem: Ich habe in meinem Verzeichnis viele weitere Dateien die
nacheinander an die Datei A_0001.mp3 angehängt werden sollen. Dies
funktioniert dann leider nicht mehr. Wer weiß freundlicherweise Rat?
Top
#2
Hallo Kathrin,

wenn Du nach diesem Befehl
Shell Environ("COMSPEC") & " /C Type C:\Audio\A_0002.mp3 >> C:\Audio\A_0001.mp3
folgenden ausführst,
Shell Environ("COMSPEC") & " /C Type C:\Audio\A_0003.mp3 >> C:\Audio\A_0001.mp3
geht das nicht?

Allerdings hat alles den Nachteil, dass wohl nur der erste Titel hinsichtlich Länge und Abspielfortschritt im Player korrekt angezeigt wird, der zweite wird abgespielt und der dritte ignoriert?
.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo Kathrin,

hier erst mal ein vba-code, mit dem Du in Excel mehr als zwei MP3-Dateien zusammenfügen kannst.
Es fehlt jedoch noch die Korrektur der Längenangabe - ich schaue mal, was sich da mit VBA noch machen lässt :21:

Im Code müssten dann auch die betreffenden MP3-Dateien fest programmiert werden. Alternativ kann man einen Dateiauswahldialog aufrufen und dort die gewünschten Dateien auswählen. Allerdings weiß Excel bei dem Dialog nicht, ob Dir die Reihenfolge der zusammengefügten MP3 so passt oder nicht ...

Code:
Sub Concat_MP3()
'Variablendeklarationen
'String
Dim strMP3 As String
Dim strConcatMP3 As String
Dim iFF As Integer
'freie Filenummer ermitteln
iFF = FreeFile()

'erste MP3 binär oeffnen
'Hinweis: mehrere MP3 koennte man auch ueber Schleife regeln
Open "d:\test\01-.mp3" For Binary As #1
'komplette MP3-Datei einlesen
strMP3 = String(LOF(1), 0)
'MP3 der Variable MP3_x zuweisen
Get #1, iFF, strMP3
'MP3-Datei schliessen, Filenummer wird freigegeben
Close #1
'MP3 zusammenfuegen
strConcatMP3 = strConcatMP3 & strMP3

'Open App.Path & "\MP3_1.mp3" For Binary As #1
Open "d:\test\02-.mp3" For Binary As #iFF
'komplette MP3-Datei einlesen
strMP3 = String(LOF(1), 0)
'MP3 der Variable MP3_x zuweisen
Get #iFF, 1, strMP3
'MP3-Datei schliessen, Filenummer wird freigegeben
Close #iFF
'MP3 zusammenfuegen
strConcatMP3 = strConcatMP3 & strMP3

'Open App.Path & "\MP3_2.mp3" For Binary As #1
Open "d:\test\03-.mp3" For Binary As #iFF
'komplette MP3-Datei einlesen
strMP3 = String(LOF(1), 0)
'MP3 der Variable MP3_x zuweisen
Get #iFF, 1, strMP3
'MP3-Datei schliessen, Filenummer wird freigegeben
Close #iFF
'MP3 zusammenfuegen
strConcatMP3 = strConcatMP3 & strMP3

'Open App.Path & "\AllMP3.mp3" For Binary As #1
Open "d:\test\0012-.mp3" For Binary As #iFF
Put #iFF, 1, strConcatMP3
Close #iFF

End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • kathrin-Flint
Top
#4
Dateien aneinanderfügen - Lösung (Vielen Dank an André aus G in T)
Folgendes Programm habe ich getestet und funktioniert:
(für weitere Verbesserungen bin ich dankbar)

Sub Audiodateizusammenbau_Click()
'Audiodateien im Verzeichnis C:\Audio zur Datei A_Gesamt.mp3 zusammenfassen
'Die Audiodateien haben das Format: A_0001.mp3 , A_0002.mp3 usw.

Dim str_Zahl As String
Dim strMP3 As String
Dim strConcatMP3 As String
Dim lngAnzahlMP3 As Long
Dim I As Long
Dim iFF As Integer
iFF = FreeFile()

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

lngAnzahlMP3 = fso.GetFolder("C:\Audio").Files.Count 'Dateianzahl im Verzeichnis

For I = 1 To lngAnzahlMP3 'Liste der Audiodateien einlesen

str_Zahl = Format(I, "0000")

Open "C:\Audio\A_" & str_Zahl & ".mp3" For Binary As #1
strMP3 = String(LOF(1), 0)
Get #1, iFF, strMP3
Close #1
strConcatMP3 = strConcatMP3 & strMP3

Next I

'Speicherung der Audiodateien in der Datei A_Gesamt.mp3
Open "C:\Audio\A_Gesamt.mp3" For Binary As #iFF
Put #iFF, 1, strConcatMP3
Close #iFF

Set fso = Nothing

End Sub
Top
#5
Hallo zusammen,

habe den oben stehenden Code verwendet und dieser funktioniert auch wunderbar. Gibt es auch eine Möglichkeit um *.wav Dateien auf diese Weise miteinander zu verbinden?
Einfach nur .mp3 durch .wav zu ersetzen, hat bei mir nicht funktioniert (Makro läuft zwar durch und eine Datei wird erstellt, diese lässt sich aber nicht abspielen...).

Danke und Viele Grüße
Eigi (neu hier :19:)
Top
#6
Hallo Eigi,

im Moment leider nicht.

Ähnlich wie bei den MP3, wo in den Headerdaten auch die Abspiellänge steht, müssen bei den WAV-Files von Excel / VBA auch die Headerdaten angepasst werden. WAV ist da allerdings nicht so Fehlertolerant wie MP3. Daher hat Dein Versuch nicht geklappt.

Eventuell geht es mit Audacity, oder google mal nach WAV Joiner. Allerdings habe ich noch keine Waves aneinandergefügt, kann zu den Programmen nix sagen. Sofern ich mal ein WAV hatte, hab ich das in MP3 gewandelt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Eigi
Top
#7
Hallo André,

danke für die Antwort!

Es gibt bestimmt externe Programme, die das können.... Da ich einige/viele Dateien mit einem Makro bearbeite wäre es elegant gewesen diese Funktion direkt zu integrieren (ein manuelles bearbeiten möchte ich vermeiden).

Ich werde wohl am Besten einfach auf mp3 umstellen, das klappt's ja.

Viele Grüße
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste