ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL把文件所在文件夹作为变量的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-5 20:28 | 显示全部楼层 |阅读模式
我有一段别人写的代码:
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then GetDirectory = fd.SelectedItems(1)
它是弹出一个对话框让你选择文件夹,然后开始遍历文件夹取里面的文件名,我现在就想让它不弹出对话框,而是直接选择代码所在文件的文件夹,请问该怎么改呢?

TA的精华主题

TA的得分主题

发表于 2016-1-5 21:00 | 显示全部楼层
dim ipath$

ipath = thisworkbook.path '当前代码工作簿所在的路径赋值给变量ipath

或者

ipath = “D:\work\”

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-5 21:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
bajifeng 发表于 2016-1-5 21:00
dim ipath$

ipath = thisworkbook.path '当前代码工作簿所在的路径赋值给变量ipath

谢谢您!按您的方法我修改测试了,有错误,无法获取文件夹内所有文件名称了。

原全部代码如下:
Sub Fileinfo()
Sheets(1).Range("A1").Select
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then GetDirectory = fd.SelectedItems(1)
Dim c As Long, R As Long, i As Long
Dim FileName As Object, ObjShell As Object, ObiFolder As Object
Set ObjShell = CreateObject("shell.Application")
Set ObiFolder = ObjShell.Namespace(GetDirectory)
On Error Resume Next
c = 0
For i = 0 To 34
If i = 27 Or i = 28 Or i = 29 Or i = 31 Then
'
Else
c = c + 1
Cells(1, c) = ObiFolder.getdetailsof(ObiFolder.Items, i)
End If
Next i
R = 1
For Each FileName In ObiFolder.Items
c = 0
R = R + 1
For i = 0 To 34
If i = 27 Or i = 28 Or i = 29 Or i = 31 Then
'
Else
c = c + 1
Cells(R, c) = ObiFolder.getdetailsof(FileName, i)
End If
Next i
Next FileName
ActiveSheet.ListObjects.Add xlSrcRange, [A1].CurrentRegion
Set fd = Nothing

End Sub

我把第3-5句按您的建议改成了:
Dim ipath$
ipath = ThisWorkbook.path '当前代码工作簿所在路径赋值给变量ipath
If ipath = -1 Then GetDirectory = ipath.SelectedItems(1)

就无法获取文件名了

还请您再指点,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-5 21:17 | 显示全部楼层
bajifeng 发表于 2016-1-5 21:00
dim ipath$

ipath = thisworkbook.path '当前代码工作簿所在的路径赋值给变量ipath

谢谢您的回复!
我修改后,虽然不弹出对话框了,但是也无法获取文件夹内的文件名了。

Dim ipath$
ipath = ThisWorkbook.path '当前代码工作簿所在路径赋值给变量ipath
If ipath = -1 Then GetDirectory = ipath.SelectedItems(1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-5 21:18 | 显示全部楼层
bajifeng 发表于 2016-1-5 21:00
dim ipath$

ipath = thisworkbook.path '当前代码工作簿所在的路径赋值给变量ipath

原代码如下:
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then GetDirectory = fd.SelectedItems(1)

Dim c As Long, R As Long, i As Long
Dim FileName As Object, ObjShell As Object, ObiFolder As Object
Set ObjShell = CreateObject("shell.Application")
Set ObiFolder = ObjShell.Namespace(GetDirectory)
On Error Resume Next
c = 0
For i = 0 To 34
If i = 27 Or i = 28 Or i = 29 Or i = 31 Then
'
Else
c = c + 1
Cells(1, c) = ObiFolder.getdetailsof(ObiFolder.Items, i)
End If
Next i
R = 1
For Each FileName In ObiFolder.Items
c = 0
R = R + 1
For i = 0 To 34
If i = 27 Or i = 28 Or i = 29 Or i = 31 Then
'
Else
c = c + 1
Cells(R, c) = ObiFolder.getdetailsof(FileName, i)
End If
Next i
Next FileName
ActiveSheet.ListObjects.Add xlSrcRange, [A1].CurrentRegion
Set fd = Nothing
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 10:13 , Processed in 0.040421 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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