| |
Visual-Basic EinsteigerZugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 12.05.20 13:22 |
| Hallo Zusammen,
habe mir seit Jahren als Hobby eine Video Filmsammlung zugelegt. Nehme also Filme auf, streiche die Werbeblöcke und lege sie ab als MPG4 Datei.
Nachdem die Anzahl der Filme mittlerweile für eine händische Verwaltung zu groß ist und mir der Überblick verloren ging, habe ich sie nun in 1 Excel Datei kategolisiert, mit:
Titel, Genre, Erscheinungsjahr
Der Titel ist via Hyperlink mit dem Film - der auf einem NAS-Server liegt - verlinkt
Nun möchte ich als zusätzliche Info noch die Laufzeit und die Auflösung hinterlegen.
Frage: geht das überhaupt in VBA ?, da bin ich einigermaßen fit, allerdings habe ich bis dato nichts gefunden, was es mir ermöglicht, den Zugriff auf den Header zu erlauben.
Stelle mir vor, über den HL + FSO auf die Datei zuzugreifen aber wie geht es dann weiter?
Wäre fein, wenn mir jemand behilflich sein könnte
Viele Grüße | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: emaNoN | Datum: 16.05.20 14:43 |
| Vielleicht hilft dir GetDetailsOf weiter: https://stackoverflow.com/a/58191307
Du musst nur den Index (steht dort auf 288) erhöhen (auf z.B. 320), um an Breite und Höhe des Videos heranzukommen (die stehen nämlich in 316 bzw. 314). | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 16.05.20 16:06 |
| Hallo emaNoN,
danke für Info. Wenn ich mir das ansehe, das ist mir zu hoch.
ich habe nun folgendes gemacht: Habe mir für 35€ ein Video Verwaltungsprogramm gekauft. Dies gibt mir die Videos als Export in Excel aus, u.a. die gewünschten Bereiche, die stelle ich dann mit SVerweis zu meinen dazu. Nicht die optimale Lösung, würde es natürlich gerne in einem Rutsch mit meinem VBA machen aber bevor ich mich da lange quäle und solange keine Lösung da ist, die ich auch verstehe, mache ich es mal mit einem Kompromiss.
Gruß | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Wobi | Datum: 17.05.20 01:14 |
| Hallo,
hört sich interessant an. Hast du irgendwo vielleicht einen Link zu einer Doku was der jeweilige Index bedeutet?
Oder hilft da nur try and error? Du scheinst dich da ja aus zu kennen, da du gezielt 316 / 314 angesprochen hast.
Gruß
Frank | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 19.05.20 17:30 |
| Hallo emaNoN,
auf diese "getdetailsof" bin ich auch schon gestossen, habe es aber nicht weiter verfolgt, weil hiermit die Anzeige von der Videoauflösung - die ich mit drin haben wollte - nicht möglich ist.
Gruss | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 19.05.20 17:33 |
| was mir keine Ruhe lässt, ist dieser Beitrag:
https://www.vbarchiv.net/tipps/details.php?id=844
nach dem Motto, warum denn in die Ferne schweifen, wenn das Gute so nahe liegt
Beitrag wurde zuletzt am 19.05.20 um 17:42:49 editiert. | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Kuno60 | Datum: 20.05.20 21:14 |
| GetDetailsOf verwende ich schon seit sehr langer Zeit. Es liefert exakt die gleichen Werte, die auch der Windows-Explorer anzeigt.
Allerdings hab ich noch nie Werte bei 314 und 316 finden können.
Kann aber möglich sein, dass neue Werte hinzugekommen sind.
Ich verwende diese Werte:
Bildhöhe: 283
Bildbreite: 285
Spieldauer: 27
Die vollständige Liste der Indexe kann man abfragen.
Beitrag wurde zuletzt am 20.05.20 um 21:25:38 editiert. | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 29.06.20 17:02 |
| Hallo emaNoN,
nach einigen Irrwegen bin ich zu dem Schluss gekommen, dass Du mit "getdetailsof" total Recht hast.
Darf Dir versichern, dass ich bei zukünftigen Projekten Deine Vorschläge sofort ernster nehmen werde.
Habe nun nur noch das Problem, dass ich mit der Deklarierung der Object-Variablen noch Probleme habe, vielleicht kann mir da Jemand behilflich sein.
Pfad = Left(HL1, InStrRev(HL1, "\"))
Set objFolder = objShell.Namespace(Pfad)
Datei = Mid(HL1, InStrRev(HL1, "\") + 1)
Set objFolderItem = objFolder.parsename(Datei)
In HL1(Hyperlink-Adresse) ist der Zugriff auf die Datei
Den stückle ich in Pfad-String + Datei-String auf.
Das Makro nimmt Set objFolder noch auf, bei SetFolderItem springt er ohne Error-Code ans Ende
Das Seltsame ist: bestücke ich objfolder + objfolderitem direkt, also nicht über die String-Var, funktioniert es.
ObjFolder + ObjFolderItem sind deklariert als Object-Variablen, gibt es da irgendwelche Besonderheiten?
Wäre schön, wenn mir Jemand helfen könnte
Gruß
Tscharlie | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Manfred X | Datum: 29.06.20 19:28 |
| Hallo!
Wie ist die Variable "Datei" deklariert worden?
Explizit als String oder implizit als Variant? | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 29.06.20 20:58 |
| Hallo Manfred,
Datei als String
Gruß
Tscharlie | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 30.06.20 16:24 |
| Hallo Zusammen,
damit es man es sich besser vorstellen kann, habe ich das (vorläufig) komplette Makro mal reingestellt.
es geht um den Block Z.39 - Z.52
Stelle ich den Pfad-Namen direkt in Set ObjFolder rein, dann funktioniert es, kopiere ich ihn per String Variable rein, springt das Makro ohne Err-Code zum Ende
1 Private Sub GetDet()
2 '********************************
3 Dim objShell As Object 'Shell
4 Dim objFolder As Object 'Folder
5 Dim objFolderItem As Object 'Datei
6 Dim I As Long
7 Dim szItem As String
8 '*******************************
9 Dim FSO As Object
10 Dim InsSte As Integer
11 Dim Zae1 As Long, GesZae As Long, Zae2 As Long, FindZei As Long 'Zähler für Schleife
12 Dim HL1 As String, ZellAdr As String, KeyStr As String, DoppStr As String, TMP As String
13 Dim FilKZ As Integer, ZeiNr As Long, intZeile As Integer, IZ As Integer
14 Dim NAECHSTER As String, Pfad As String, Datei As String, Zeich As String
15 '*******************************
16 Set FSO = CreateObject("scripting.filesystemobject")
17 Set objShell = CreateObject("Shell.Application")
18 '*******************************
19 Application.Calculation = xlManual
20 Application.ScreenUpdating = False
21 '*******************************
22 Zae1 = 2
23 IZ = 2
24
25 WEITER:
26 GesZae = Range("D65535").End(xlUp).Row
27 Do While Zae1 <= GesZae
28 If Cells(Zae1, 4) = "" Or Left(Cells(Zae1, 4), 1) = "'" Then GoTo NAECHSTER
29 HL1 = UCase(Cells(Zae1, 4).Hyperlinks(1).Address)
30 If HL1 <> "" And (Cells(Zae1, 14) = 0 Or Cells(Zae1, 14) = "") Then
31 InsSte = UCase(InStr(HL1, "MOVIE")) + 5
32 HL1 = "Z:" & Trim(Mid(HL1, InsSte, 250))
33
34 If FSO.FileExists(HL1) Then
35 With FSO.GetFile(HL1)
36 Cells(Zae1, 14) = .Size / 1000
37 Cells(Zae1, 15) = .DateLastModified
38 End With
39 '*** Anfang: um diesen Block geht es:
40 Pfad = Left(HL1, InStrRev(HL1, "\"))
41 ' lt. Debug.Print = Pfad: "Z:\MÄRCHEN, SAGEN, LEGENDEN\NIBELUNGEN\"
42
43 '***wenn ich das setze, funktioniert es nicht:
44 'Set objFolder = objShell.Namespace(Pfad)
45
46 'Direkteingabe funktioniert, kann ich aber nicht brauchen
47 Set objFolder = objShell.Namespace("Z:\MÄRCHEN, SAGEN, LEGENDEN\NIBELUNGEN\")
48 Datei = Mid(HL1, InStrRev(HL1, "\") + 1)
49 Set objFolderItem = objFolder.parsename(Datei)
50 'Video-Auflösung:
51 Cells(Zae1, 26) = objFolder.GetDetailsOf(objFolderItem, 316) & "x" & Folder.GetDetailsOf(objFolderItem, 314)
52 '***** Blockende
53 Else
54 Stop
55 Debug.Print Zae1 & " "; Cells(Zae1, 4) & " " & HL1 & " HL Link ist nicht i.O." 'falscher HL
56 GoTo NAECHSTER
57 End If
58 End If
59 NAECHSTER:
60 Zae1 = Zae1 + 1
61 HL1 = ""
62 'If Zae1 = 13553 Then Stop
63 'Debug.Print Zae1 '**********************
64 Loop
65
66 Set objFolder = Nothing
67 Set objShell = Nothing
68 Application.Calculation = xlCalculationAutomatic
69 Application.ScreenUpdating = True
70 MsgBox "Fertig!!!"
71 End Sub | |
Re: Zugriff von Excel 2016 auf MPEG Datei Header | | | Autor: Tscharlie | Datum: 30.06.20 18:52 |
| Hallo Zusammen,
habe nun den Knackpunkt gefunden. Wie immer alles ganz easy, wenn man es weiß.
Sollte es jemand interessieren, im Makro Z.47 löschen, dafür in Z.44 das Auskommentieren aufheben und vor der "Pfad"-Var. "cVar" einfügen.
Dies hebt die Pfad-Var. als String auf und macht sie zu einer Variant Variablen
So ganz verstehe ich es zwar nicht, aber es funktioniert.
An Alle, die hier - wenn auch nur kurzfristig - wegen meinem Problem die grauen Zellen in Gang gesetzt haben, vielen Dank
Bis zum nächsten Mal
Tscharlie | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|