ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] b=dir无效的调用或参数,请教一下?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-4-14 22:20 | 显示全部楼层 |阅读模式
以下代码是把把"d:\aa"目录中所有excel文件打开,进行格式化,另存到其它的目录中,本来很好,由于需要把另存的目录建一个第个字段中文件夹存入其中,加了紫色部分的代码,加了以后处理也没问题,就是不能进行循环了,提示“b=dri无效的调用或参数”,为什么会出现这种情况呢,是在建立文件夹操作之后,b的变量进行变化了?

sub dy()
Dim b
  'Application.ScreenUpdating = False
  'Application.DisplayAlerts = False
   If Dir("d:\ftp\", vbDirectory) = "" Then
    MkDir "d:\ftp\"
    End If
    If Dir("d:\ftp\查询\", vbDirectory) = "" Then
    MkDir "d:\ftp\查询\"
    End If
    If Dir("D:\ftp\查询\查询结果\", vbDirectory) = "" Then
    MkDir "D:\ftp\查询\查询结果\"
    End If

  b = Dir("d:\aa\*.xls")
  Do While b <> ""
    Workbooks.Open Filename:="d:\aa\" & b
MsgBox b
aa = ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count, 1).Value
    bb = Mid(aa, 7, (Len(aa) - 7))
   
    mm = "D:\ftp\查询\查询结果\" & bb & "\"
    If Dir(mm, vbDirectory) = "" Then
    MkDir mm
    End If
    Workbooks(b).Activate
    Call whc
    Workbooks(b).Activate
   
   
    abc = mm & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "-" & Trim(bb) & ".xls"
   
Workbooks(b).Activate
   
   
    ActiveWorkbook.Save
    ActiveWorkbook.SaveAs Filename:=abc
      ActiveWorkbook.Close False
     Kill "d:\aa\" & b
   
    b = Dir
  Loop
  MsgBox "d:\aa文件里没有文件!"
  MsgBox "全部处理完毕!"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-4-14 22:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
把b=dir,换成b = Dir("d:\aa\*.xls"),解决,请高手给分析一下是什么原因呢,

TA的精华主题

TA的得分主题

发表于 2012-4-14 23:12 | 显示全部楼层
mm = "D:\ftp\查询\查询结果\" & bb & "\"
    If Dir(mm, vbDirectory) = "" Then
    MkDir mm
    End If
这个去掉如何?

TA的精华主题

TA的得分主题

发表于 2012-4-15 00:21 | 显示全部楼层
调用Dir时要注意:
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

  1. Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal DirPath As String) As Long

  2. Private Const MAX_PATH    As Long = 260

  3. '创建目录
  4. Public Function MKDirctory(ByVal Path As String) As Boolean
  5.   '如果目录创建成功,或目录已经存在,都将返回True
  6.   '此函数可建立多重目录。
  7.   Path = Path & String(MAX_PATH, vbNullChar)
  8.   PathAddBackslashW StrPtr(Path)
  9.   MKDirctory = MakeSureDirectoryPathExists(Path)
  10. End Function

  11. Sub dy()
  12.   Dim B As String
  13.   'Application.ScreenUpdating = False
  14.   'Application.DisplayAlerts = False
  15.   MKDirctory "D:\ftp\查询\查询结果"
  16.   B = Dir("d:\aa\*.xls")
  17.   Do While B <> ""
  18.     Workbooks.Open Filename:="d:\aa" & B
  19.     MsgBox B
  20.     aa = ActiveSheet.Cells(ActiveSheet.UsedRange.Rows.Count, 1).Value
  21.     bb = Mid(aa, 7, (Len(aa) - 7))
  22.    
  23.     mm = "D:\ftp\查询\查询结果" & bb & ""
  24.     MKDirctory mm
  25.     Workbooks(B).Activate
  26.     Call whc
  27.     Workbooks(B).Activate
  28.    
  29.    
  30.     abc = mm & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "-" & Trim(bb) & ".xls"
  31.    
  32.     Workbooks(B).Activate
  33.    
  34.    
  35.     ActiveWorkbook.Save
  36.     ActiveWorkbook.SaveAs Filename:=abc
  37.     ActiveWorkbook.Close False
  38.     Kill "d:\aa" & B
  39.    
  40.     B = Dir
  41.   Loop
  42.   MsgBox "d:\aa文件里没有文件!"
  43.   MsgBox "全部处理完毕!"
  44. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 15:36 , Processed in 0.036464 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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