ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yy10

如何使用vba获取一个文件夹下所有视频文件的总长度

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-10 19:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做个记号,学习一下,特别是获取播放时长太有用了

TA的精华主题

TA的得分主题

发表于 2017-10-10 21:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
守柔 发表于 2008-7-7 18:27
QUOTE:以下是引用konggs在2008-7-7 7:48:42的发言:老大好,我以为楼主可能是想知道视频的播放长度,不一定 ...

若想知道一个具体的音频文件的时间长度,该怎样表达?
比如win7下,获取"F:\音视频\汽车音乐\新歌6\爱你一生.mp3"这首歌的时间长度,怎样表达?
恳请守版主指教,
对shell我是一窍不通。

TA的精华主题

TA的得分主题

发表于 2017-10-11 02:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
weiyingde 发表于 2017-10-10 21:21
若想知道一个具体的音频文件的时间长度,该怎样表达?
比如win7下,获取"F:\音视频\汽车音乐\新歌6\爱你 ...

Sub GetFileDuration()
    Dim O As Object, fd As Object, F As Object
    Set O = CreateObject("Shell.Application")
    Set fd = O.Namespace("F:\音视频\汽车音乐\新歌6")
    For Each F In fd.Items
        If F.Name = "爱你一生.mp3" Then
            MsgBox fd.GetDetailsOf(F, 27)
        End If
    Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-10-11 11:33 | 显示全部楼层
yy10 发表于 2008-7-7 09:30
    谢谢几位版主的热心,帖子里我没有说清楚,我要计算的是时间总长度,深表歉意。 & ...

这一句  Dim iMPlayer As New MediaPlayer.MediaPlayer
是不是 Dim iMPlayer As New WindowsMediaPlayer
另外,
我测试的时候,为什么代码一直在运行,而没有结果?
烦请看看

TA的精华主题

TA的得分主题

发表于 2017-10-11 11:44 | 显示全部楼层
duquancai 发表于 2017-10-11 02:07
Sub GetFileDuration()
    Dim O As Object, fd As Object, F As Object
    Set O = CreateObject("S ...

谢谢杜老师赐代码,经测试,非常好。
杜老师,另辟蹊径,很好的一种方法。
问一句:能否不用循环的方式,直接获取媒体时间长?

我自己将源代码变通,写出了能用的代码,显然不你这啰嗦不少,也算是一种吧:
代码如下:
Sub 获取对应文件时间长()
'请在VBE/工具/引用中勾选对于MICROSOFT SHELL CONTROLS AND AUTOMATION
    Dim SHL As New Shell32.Shell
    Dim SHFD As Shell32.Folder
    Dim F As Object
    Dim prr()
With Sheet2
      rw = .Cells(65536, 3).End(3).Row
      For i = 2 To rw
         txt = .Cells(i, 3).Text
         cmt1 = .Cells(i, 3).Comment.Text
         cmt2 = "." & .Cells(i, 5).Comment.Text
         txt1 = .Cells(i, 3).Text & cmt2
         txt2 = Left(cmt1, Len(cmt1) - Len(txt1) - 1)
         ReDim Preserve prr(1 To rw - 1, 1 To 2)
           prr(i - 1, 1) = txt1
           prr(i - 1, 2) = txt2
      Next
      For ii = 1 To UBound(prr)
         FolderSpec = prr(ii, 2)
         Set SHFD = SHL.Namespace(FolderSpec)
         For Each F In SHFD.Items
             If F.Name = prr(ii, 1) Then
                n = n + 1
                .Cells(n + 1, "G") = SHFD.GetDetailsOf(F, 27)
             End If
         Next
      Next
      '.Cells(rw,"E") = worksheetfunction.SumIf(
  End With
End Sub

但我还对四楼的代码念念不忘,如果算是一种方法,那就有三种了。
只可惜,我测试的时候,鼠标指针,一直在转圈,代码一直在运行,没有结果。
等了20多分钟,强行终止代码运行。
我想不会是代码运行这么慢吧?
若真有这么慢,这段代码也没有什么价值。
有时间,杜老师试试,指点指点。
谢谢了。

TA的精华主题

TA的得分主题

发表于 2017-10-12 15:35 | 显示全部楼层
守柔 发表于 2008-7-7 18:27
QUOTE:以下是引用konggs在2008-7-7 7:48:42的发言:老大好,我以为楼主可能是想知道视频的播放长度,不一定 ...

守版主,经测试,只能统计mp3、MP4、wmv等音视频的时间。
能否统计下面这些格式呢?
".mp3.wav.mid.ra.rma.midi.rmi.Ogg.flac.acc.asf.mod.au.tta.avi.wmv.mp4.mp5.rm.rmvb.3gp.mkv.flv.f4v.dat.ts.mpg.mpeg.ogg.mov.ifo.tp"
若没有,能否有其他的方式那么最大限度的统计更多格式的音视频的时间长度呢?
请指教。
谢谢你。

TA的精华主题

TA的得分主题

发表于 2017-10-12 15:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2017-10-11 02:07
Sub GetFileDuration()
    Dim O As Object, fd As Object, F As Object
    Set O = CreateObject("S ...

就十六楼的帖子,向杜老师请教。
若有时能给予指点,将万分感谢。

TA的精华主题

TA的得分主题

发表于 2017-10-12 17:46 来自手机 | 显示全部楼层
weiyingde 发表于 2017-10-12 15:38
就十六楼的帖子,向杜老师请教。
若有时能给予指点,将万分感谢。

指点:循环遍历判断

TA的精华主题

TA的得分主题

发表于 2017-10-12 18:19 | 显示全部楼层
本帖最后由 duquancai 于 2017-10-12 22:12 编辑
weiyingde 发表于 2017-10-12 15:38
就十六楼的帖子,向杜老师请教。
若有时能给予指点,将万分感谢。

Sub GetFileDuration()
    Dim O As Object, fd As Object, F As Object
    Set O = CreateObject("Shell.Application")
    Set fd = O.Namespace("F:\音视频\汽车音乐\新歌6") '音视频文件的文件夹
    For Each F In fd.items
        i = 0
        Do While i < 100
            i = i + 1
            If fd.GetDetailsOf(fd.items, i) = "时长" And fd.GetDetailsOf(F, i) <> "" Then
                MsgBox F.Name & "文件的时长:" & fd.GetDetailsOf(F, i): Exit Do
            End If
        Loop
        If i = 100 Then MsgBox F.Name & "文件无时长属性值!"
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-10-12 21:32 | 显示全部楼层
duquancai 发表于 2017-10-12 18:19
Sub GetFileDuration()
    Dim O As Object, fd As Object, F As Object
    Set O = CreateObject("S ...

谢谢再赐代码,明天第一时间测试,弄懂代码。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 21:23 , Processed in 0.035743 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表