ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[转帖] excelhome在股票中的应用摘录集中营(每次记录一点,学一点)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-27 08:46 | 显示全部楼层
[转]EXCEL中用TEXT函数将文本转换成日期默认分类
在EXCEL中,text函数的作用是将各种形式的数值转换成特定格式的文本形式,函数如下:
=Text(待转换的单元格,特定格式字符串)
例如:设A1单元格数值为1,我们想将A1的内容转换成001的格式,可用如下公式:
=Text(A1,"000")
那么我们如何将字符串转成日期呢?如果我们的字符串为2007-07-30的格式,那就很好办,可直接用DATEVALUE函数转换,但如果字符串为20070730的格式,DATEVALUE函数将无法识别,此时我们就需要用到TEXT函数,先将20070730格式化成2007-07-30的格式,公式表示如下(设A1内容为20070730):
=Text(A1,"#-00-00")
转换成目标格式后,我们就可以直接用DATEVALUE函数了,即完整公式:
=DateValue(Text(A1,"#-00-00"))
一个简化的方法是直接用如下公式让EXCEL自动转换:
=Text(A1,"#-00-00")*1
上述公式是利用了EXCEL中日期数值的计算规则,由此延伸,我们可用如下公式获取目标日期距离当前时间的天数:
=Now()- Text(A1,"#-00-00")*1   --Now函数为返回当前的时间,应注意此公式所在单元格的格式应设置成数值


补充内容 (2014-7-26 09:26):
DATEVALUE是将文本形式的日期转换成数值!如果对象已经是数值或日期则会出错

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-12 16:33 | 显示全部楼层
【原帖】【已解决】如何在工作表自动画线连接两个给定的(数据)单元格
编号: 227921
  1. [color=Lime]'by 山菊花 发表于 2007-3-22  3楼[/color]
  2. [color=Lime]'如何在工作表自动画线连接两个给定的(数据)单元格[/color]

  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4. If Target.Column <> 14 Or Target.Columns.Count > 1 Then Exit Sub
  5. Stop
  6.     Application.ScreenUpdating = False
  7.     Application.EnableEvents = False
  8.     Dim nRow%, i%
  9.     Dim BeginR As Range, EndR As Range
  10.     nRow = Range("n65536").End(xlUp).Row
  11.     Set BeginR = Range("b2").Offset(0, Range("n2"))
  12.     [color=Lime]'删除已有的图形[/color]
  13.    
  14.     If Me.Shapes.Count > 0 Then
  15.         Me.Shapes.SelectAll
  16.         Selection.Delete
  17.     End If
  18.     Range("B2:K" & nRow).FillDown  '快速向下复制的方法 (即:ctrl + d)

  19.     For i = 3 To nRow '
  20.         Set EndR = Range("b" & i).Offset(0, Range("n" & i))
  21.         
  22.         [color=Lime]'绘制线条 取开始单元格的中心点坐标 BeginR.Left + BeginR.Width / 2,BeginR.Top BeginR.Height / 2[/color]
  23.         Set DrawLine = Me.Shapes.AddLine(BeginR.Left + BeginR.Width / 2, _
  24.             BeginR.Top + BeginR.Height / 2, EndR.Left + EndR.Width / 2, _
  25.             EndR.Top + EndR.Height / 2).Line
  26.         Set BeginR = EndR
  27.     Next
  28.     ActiveSheet.DrawingObjects.ShapeRange.Group
  29.     With ActiveSheet.DrawingObjects.ShapeRange.Line
  30.         .DashStyle = msoLineSolid
  31.         .Weight = 1.5
  32.         .ForeColor.SchemeColor = 10
  33.     End With
  34.     Application.EnableEvents = True
  35.     Application.ScreenUpdating = True
  36.    
  37.     Set BeginR = Nothing
  38.     Set EndR = Nothing
  39. End Sub
复制代码

如何在工作表自动画线连接两个给定的(数据)单元格.rar

16.63 KB, 下载次数: 74

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-14 23:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
【原帖】【已解决】用VBA转换文本文件日期格式变为11/8/2008问题
编号: 368315

用VBA转换文本文件日期格式问题.rar

11.1 KB, 下载次数: 55

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-30 23:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
【原帖】【已解决】 VBA能实现把几个TXT文件导入到同一个工作表里吗?
编号: 918883


如果需要从文本文件中导入数据,可以使用OpenTextFile方法,如下面的代码所示
  1. #001  Sub OpenText()
  2. #002      Dim MyFile As Object
  3. #003      Dim mArr() As String
  4. #004      Dim j As Integer, i As Integer
  5. #005      j = 1
  6. #006      Sheet1.UsedRange.ClearContents
  7. #007      Set MyFile = CreateObject("Scripting.FileSystemObject") _
  8. #008          .OpenTextFile(ThisWorkbook.Path & "" & "工资表.txt")
  9. #009      Do While Not MyFile.AtEndOfStream
  10. #010          mArr = Split(MyFile.ReadLine, ",")
  11. #011          For i = 0 To UBound(mArr)
  12. #012              Sheet1.Cells(j, i + 1) = mArr(i)
  13. #013          Next
  14. #014          j = j + 1
  15. #015      Loop
  16. #016      MyFile.Close
  17. #017      Set MyFile = Nothing
  18. #018  End Sub
复制代码
代码解析:
OpenText过程使用OpenTextFile方法打开示例文件所在文件夹中的“工资表.txt”文件并将数据导入到工作表中。
第7、8行代码使用OpenTextFile方法打开文本文件。应用于FileSystemObject对象的OpenTextFile方法打开一个指定的文件并返回一个TextStream对象,该对象可用于对文件进行读操作或追加操作,语法如下:

01.object.OpenTextFile(filename[, iomode[, create[, format]]])
复制代码
参数object是必需的,FileSystemObject对象的名字。
参数filename是必需的,需要打开的文件名称。
参数iomode是可选的,表示输入/输出方式,设置值如表格所示。
     常数              值                         描述
ForReading         1        打开一个只读文件,不能对此文件进行写操作。
ForAppending     8        打开一个文件并写到文件的尾部。

参数create是可选的,它表示如果指定的参数filename不存在是否可以创建一个新文件。如果创建新文件,其值为True。若不创建文件其值为False。缺省值为False。
参数format是可选的,打开文件的格式,设置值如表格所示。
         常数                    值                    描述
TristateUseDefault        -2        使用系统缺省打开文件
TristateTrue                 -1        以 Unicode 格式打开文件
TristateFalse                  0        以 ASCII 格式打开文件

第9行代码开始对文本文件进行读操作。应用于TextStream对象的AtEndOfStream属性指示文件指针是否位于TextStream文件中的结尾,如果是返回True,否则返回False。
第10行代码使用Split函数将逐行读取的字符串以逗号进行分隔后赋给数组mArr。关于Split函数请参阅技巧169-2。
应用于TextStream对象的ReadLine方法从一个TextStream文件读取一整行(到换行符但不包括换行符)并返回得到的字符串,语法如下:


01.object.ReadLine
复制代码
参数object是必需的,TextStream对象的名字。
第11行到第14行代码将数组元素写入到工作表的单元格。
第15行代码重新读取下一行数据。
第16行使用Close方法关闭打开的文本文件。
运行OpenText过程将“工资表.txt”文件的数据导入到工作表中。



TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-31 17:39 | 显示全部楼层
VB6中的FSO对象模型(对文件操作有很大的作用,可应用于VBA)
       VB6中的FSO对象模型作者:倪秉书 在编程中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。
    一、FSO简介
   FSO对象模型包含以下几种对象:
   Drive对象:允许收集系统物理或通过LAN与系统逻辑连接的硬盘、CD-ROM等驱动器的可用空间、共享名等信息。
   Folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
   Files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
   TextStream对象:允许创建和读写文本文件。
   FileSystemObject对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过FileSystemObject对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。FSO模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。
   FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,可从“工程”选单的“引用”对话框中选择“Microsoft Scripting Runtime”项来引用此文件。
   创建一个FileSystemObject对象,可以通过如下两种方法来完成:1?将一个变量声明为FileSystemObject对象类型:Dim fso As New FileSystemObject;2?使用CreateObject方法来创建:Set fso=CreateObject(″Scripting.FileSystemObject″)。
    二、对驱动器的操作
    对驱动器的操作主要通过Drive对象并配合FileSystemObject对象,FSO不支持进行创建或删除驱动器的操作,而只允许收集关于系统所用驱动器的信息。通过该对象的属性可以获得下列信息:以字节表示的驱动器可用空间(AvailableSpace或FreeSpace);为驱动器指定的字母号(DriveLetter);驱动器类型(DriveType);驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem);驱动器是否可用(IsReady);驱动器的路径或根文件夹(Path和RootFolder);驱动器序列号(SerialNumber);共享名或卷标名(ShareName和VolumeName);以字节表示的驱动器总空间(TotalSize)。下面一例说明了如何收集有关驱动器的信息:
 Private Sub Command1—Click()
 Dim fso As New FileSystemObject, drv As Drive, str As String
 Set drv=fso.GetDrive(fso.GetDriveName(″c:″))
 Debug.Print ″Total Space: ″ & FormatNumber(drv.TotalSize / 1024, 0) & ″Kb″
 Debug.Print ″Free Space: ″ & FormatNumber(drv.FreeSpace / 1024, 0) & ″Kb″
 End Sub
    三、对文件夹的操作
    Folder对象允许通过所提供的方法来复制(Copy)、删除(Delete)或移动(Move)文件夹,并通过其属性向系统查询其名称(Name)、路径(Path)以及创建日期(DateCreated)等。FileSystemObject 对象对文件夹的操作方法有创建(CreateFolder)、复制(CopyFolder)、移动(MoveFolder)和删除(DeleteFolder)。在进行上述操作之前,首先要获得该文件夹的访问句柄(GetFolder)。下例说明了如何对文件夹进行操作:
 Private Sub Command2—Click()
 Dim fso As New FileSystemObject, fldr As Folder
 Set fldr=fso.GetFolder(″c:″)    
 ′获得当前文件夹的访问句柄
 Debug.Print ″Parent folder name is: ″ & fldr
 ′打印文件夹名
 Debug.Print ″Contained on drive ″ & fldr.Drive   ′打印驱动器名
 fso.CreateFolder (″c:\Temp″)
 ′用FileSystemObject对象创建一个新的文件夹
 fso.DeleteFolder (″c:\Temp″)  
  ′删除新建的文件夹
 End Sub
 访问一个对象,要首先用“Get”方法获得该对象的访问句柄,但如果是用“Create”函数新创建一个对象, 函数会返回一个句柄到新创建的对象,这时只要设置一个变量来获取该句柄即可,不必再用“Get”方法。如:Set fldr=fso.CreateFolder(″C:\Temp2″)。
    四、对文件的操作
    读写文件,在VB6之前都是使用Open等语句来实现,FSO支持通过TextStream对象来创建和读写文本文件。
    FSO通过CreateTextFile、OpenTextFile、OpenAsTextStream 三种方法来创建一个顺序文本文件。文件创建后,就可分三步写入数据:
 1.?利用FileSystemObject对象的OpenTextFile方法或File对象的OpenAsTextStream 方法打开文本文件以备写入数据。
 2.?使用TextStream 对象的Write、WriteLine或WriteBlankLines方法写入数据。
 3.?使用TextStream对象的Close方法关闭文件。
 下例说明了如何创建文本文件:
 我们可使用TextStream 对象的Read、ReadLine或ReadAll方法从一个文本文件中读取数据。
 Private Sub Command3—Click()  
  Dim fso As New FileSystemObject, fil As File, ts As TextStream
  fso.CreateTextFile ″c:\testfile.txt″
  Set fil=fso.GetFile(″c:\testfile.txt″)
  Set ts=fil.OpenAsTextStream(ForWriting)
  ts.Write (″这是一个测试文件!″)
  ts.Close
  Set ts=fil.OpenAsTextStream(ForReading)
  s=ts.ReadLine
  MsgBox s
  ts.Close
 End Sub
   除了创建与读写文件之外,VB6还可通过FileSystemObject对象对文件进行复制(CopyFile)、移动(MoveFile)与删除(DeleteFile)等操作,在File对象中等效的方法有Copy 、Move和Delete。例程如下 :
 Private Sub Command4—Click()
   Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File
   Set txtfile=fso.CreateTextFile(″c:\testfile.txt″, True)
   txtfile.Write (″这是一个测试文件!″)
   txtfile.Close
   Set fil1=fso.GetFile(″c:\testfile.txt″)
 ′获得一个文件句柄
   fil1.Copy (″c:\temp1\testfile.txt″)  
 ′将该文件复制到\temp1目录下
   fil1.Move (″c:\temp2\testfile.txt″)  
 ′将该文件移动到\temp2目录下
   Set fil1=fso.GetFile(″c:\temp1\testfile.txt″)
   ′获得这些文件当前位置的句柄
   Set fil2=fso.GetFile(″c:\temp2\testfile.txt″)
   fil1.Delete
   fil2.Delete
 End Sub
 摘自《赛迪网》 倪秉书/文



TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-31 17:51 | 显示全部楼层
Excel-VBA操作文件四大方法之三_文件管理


       三、利用FileSystemObject对象来处理文件
       FileSystemObject对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。其使用面向对象的“object.method”语法来处理文件夹和文件,使用起来十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一个COM组件的形式提供的。因此,要使用先要创建FileSystemObject对象。
       FileSystemObject对象模型包含了下面的对象和集合:
       ·FileSystemObject 主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。
       ·Drive   对象,包含用来获得信息的方法和属性,这些信息是关于连接在系统上的驱动器的,如有多少可用空间等。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是通过网络在逻辑上连接的硬盘(如公司里部门共享的服务器网络硬盘)。
       ·Drives  集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。
       ·File   对象,包含用来创建、删除或移动文件的方法和属性。
       ·Files   集合,提供包含在文件夹内的所有文件的列表。
       ·Folder  对象,包含用来创建、删除或移动文件夹的方法和属性。
       ·Folders  集合,提供包含在文件夹内的所有文件夹的列表。
       ·TextStream  对象,用来读写文本文件。
       (一)准备工作
       要使用FileSystemObject对象,先要创建它。创建FileSystemObject对象要使用CreatObject函数。CreateObject 函数用来创建并返回一个对 ActiveX 对象的引用。
       语法:CreateObject(class,[servername])
       class 是要创建的应用程序名称和类。
       servername 要在其上创建对象的网络服务器名称。(如果要在远程计算机上创建对象才用)
       class 参数使用 appname.objecttype 这种语法,包括以下部分:
       appname 必需的;提供该对象的应用程序名。
       objecttype 必需的;待创建对象的类型或类。

因此,我们用下面的代码创建FileSystemObject对象:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Scripting是类型库的名称,FileSystemObject就是要创建的对象的名字。
同样我们可以创建Dictionary 对象如下:
Dim d
Set d = CreateObject("Scripting.Dictionary")
(二)FileSystemObject对象的方法
FileSystemObject对象模型中有些功能是重复的,如可用FileSystemObject对象的CpoyFile方法,也可用File对象的Copy方法来复制文件。下面先介绍FileSystemObject对象的方法。
1、GetDrive 方法
语法:object.GetDrive drivespec
drivespec参数可以是一个驱动器字符(c)、一个驱动器字符加一个冒号(c:)、一个驱动器字符加冒号和路径分隔符(c:\)或任何网络共享的说明(\\computer2\share1)。
作用:返回一个与指定路径中的驱动器相对应的 Drive 对象。
示例:
Dim d
Set d = fso.GetDrive("D:")  '变量d就代表了驱动器D对象
如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。
注意:为简洁,示例中都假定fso是已经创建的FileSystemObject对象
2、GetDriveName 方法
语法:object.GetDriveName(path)
作用:返回一个包含指定路径的驱动器名字的字符串。
示例:
Debug.Print fso.GetDriveName("c:\test.txt")  '立即窗口显示"c:"
3、GetExtensionName 方法
语法:object.GetExtensionName(path)
作用:返回一个包含路径中最后部件扩展名的字符串。
示例:
Debug.Print fso.GetExtensionName("c:\test.txt")  '立即窗口显示"txt"
4、GetBaseName 方法
语法:object.GetBaseName(path)
作用:返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串。
示例:
Debug.Print fso.GetBaseName("c:\abc\test.txt")  '立即窗口显示"test"
5、GetAbsolutePathName 方法
语法:object.GetAbsolutePathName(pathspec)
作用:从提供的路径说明中返回一个完整、明确的路径。
示例:
如果pathspec为空字符串"",则返回当前路径。假设当前路径为C:\Documents and Settings\yc\My Documents
Debug.Print fs.GetAbsolutePathName("")  '显示C:\Documents and Settings\yc\My Documents
Debug.Print fs.GetAbsolutePathName("c:..") '显示C:\Documents and Settings\yc,即上层目录
Debug.Print fs.GetAbsolutePathName("abc") '显示C:\Documents and Settings\yc\My Documents\abc
Debug.Print fs.GetAbsolutePathName("c:\test.txt") '显示C:\test.txt
6、GetFile 方法
语法:object.GetFile(filespec)
作用:返回一个和指定路径中文件相对应的 File 对象。
示例:
Dim f
Set f = fso.GetFile("c:\test.txt")  '变量f就代表了文件test.txt对象
注意:如果指定的文件不存在,则发生一个错误。
7、GetFileName 方法
语法:object.GetFileName(pathspec)
作用:返回指定路径中的最后部件,该路径不是驱动器说明的一部分。
示例:
Debug.Print fso.GetFileName("c:\abc\test.txt")  '立即窗口显示"test.txt"
8、GetFolder 方法
语法:object.GetFolder(folderspec)
作用:返回一个和指定路径中文件夹相对应的 Folder 对象。
示例:
Dim fd
Set fd = fso.GetFolder("c:\windows")  '变量f就代表了文件夹windows对象
注意:如果指定的文件夹不存在,则发生一个错误。
9、GetSpecialFolder 方法
语法:object.GetSpecialFolder(folderspec)
作用:返回指定的特殊文件夹。
说明:
folderspec 参数可为任何的下列值:
WindowsFolder   0   Windows 文件夹,包含由 Windows 操作系统安装的文件。
SystemFolder   1   系统文件夹,包含库、字体、设备驱动程序。
TemporaryFolder  2   Temp 文件夹,用于存储临时文件。它的路径在 TMP 环境变量中。
10、GetParentFolderName 方法
语法:object.GetParentFolderName(path)
作用:返回一个包含指定路径最后部件父文件夹名字的字符串。
示例:
Debug.Print fso.GetParentFolderName("c:\tmp\test.txt")  '显示"c:\tmp"
11、GetTempName 方法
语法:object.GetTempName
作用:返回一个随机产生的临时文件或文件夹的名字,该名字在执行需要临时文件或文件夹的操作时有用。
说明:GetTempName 方法不产生一个文件,它仅提供一个临时文件名字,该名字可被 CreateTextFile 用于创建一个文件。
示例:
Debug.Print fso.GetTempName   '显示"radB0208.tmp",每次都会变。
12、BuildPath 方法
语法:object.BuildPath(path, name)
作用:追加一个名字到一个已经存在的路径。
示例:
Debug.Print fso.BuildPath("c:\tmp", "abc") '显示"c:\tmp\abc"
13、CreateFolder 方法
语法:object.CreateFolder(foldername)
作用:创建一个文件夹。
注意:如果指定的文件夹已经存在,则发生一个错误。
示例:
fso.CreateFolder("c:\myfolder")   '在C盘创建一个myfolder文件夹
14、CopyFolder 方法
语法:object.CopyFolder source, destination[, overwrite]
source 必需的。指明一个或多个被复制文件夹的字符串文件夹说明,可以包括通配符。
destination 必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。
overwrite 可选的。Boolean 值,它表示已存在的文件夹是否被覆盖。如果为 True,文件被覆盖。如果为 False,文件不被覆盖。缺省值为 True。
作用:复制一个文件夹到另一个地方。
说明:
① 通配符仅可用于 source 参数的最后一个路径部件。
例如:fso.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\" 这是可以的。
但不能这样:fso.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"
② 如果 source 包含通配符或 destination 以路径分隔符(\)为结尾,则认为 destination 是一个已存在的文件夹,在其中复制相匹配的文件夹和子文件夹。否则认为 destination 是一个要创建的文件夹的名字。
例如:fso.copyfolder "c:\tmp", "f:\abc\"
如果F盘没有abc文件夹,将发生错误。如果存在,可看到abc文件夹里有tmp文件夹。
假如写成这样:fso.copyfolder "c:\tmp", "f:\abc"
此时若abc不存在,将创建abc文件夹,且将tmp文件夹里的内容复制到abc文件夹里,而不是tmp文件夹,只有abc是一个已经存在的文件夹时,才复制整个tmp文件夹到abc文件夹里。
③如果 destination 是一个已存在的文件,则发生一个错误。
④如果 destination 是一个目录,它将尝试复制文件夹和它所有的内容。如果一个包含在 source 的文件已在 destination 中存在,当 overwrite 为 False 时发生一个错误,否则它将尝试覆盖这个文件。
⑤如果 destination 是一个只读目录,当尝试去复制一个已存在的只读文件到此目录并且 overwrite为 False 时,则发生一个错误。
⑥如果 source 不存在或使用的通配符不能和任何文件夹匹配,也发生一个错误。
⑦CopyFolder 方法停止在它遇到的第一个错误上,之前所做的操作是不会消失的,所以要注意。
15、MoveFolder 方法
语法:object.MoveFolder source, destination
参数与CopyFolder的前两个一样。
作用:将一个或多个文件夹从一个地方移动到另一个地方。
说明:
①只有在操作系统支持的情况下,这个方法才允许文件夹在卷之间移动。Windows是不允许的,将C盘的文件夹移到D盘是不行的。
②如果 source 包含通配符或 destination 以路径分隔符 (\)为结尾,则认为 destination 指定了一个已存在的文件夹,在此文件夹中移动相匹配的文件。否则,认为 destination 是一个要创建的目标文件夹名字。这点与CopyFolder是一样的。
③如果 destination 是一个已存在的文件,则发生一个错误。
④如果 destination 是一个目录,则发生一个错误。
例如:
fso.movefolder "c:\tmp", "c:"  '发生错误。
⑤如果 source 不存在或使用的通配符不能和任何文件夹匹配,也发生一个错误。
⑥MoveFolder 方法停止在它遇到的第一个错误上。不要尝试回卷在错误发生前所做的任何改变。





TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-31 17:54 | 显示全部楼层
16、DeleteFolder 方法
语法:object.DeleteFolder folderspec[, force]
folderspec 必需的。要删除的文件夹的名字。 Folderspec 可以在最后的路径部件中包含通配符。
force 可选的。Boolean 值,如果要删除具有只读属性设置的文件夹,其值为 True,如果值为 False (缺省),则不能删除具有只读属性设置的文件夹。
作用:删除一个指定的文件夹和它的内容。
说明:如果没有发现相匹配的文件夹,则发生一个错误。DeleteFolder 方法停止在它遇到的第一个错误上,不要尝试回卷或撤消错误发生前所做的任何改变。
示例:
fso.DeleteFolder("c:\tmp")
17、FolderExists 方法
语法:object.FolderExists(folderspec)
作用:如果指定的文件夹存在返回 True,不存在返回 False。
18、DriveExists 方法
语法:object.DriveExists(drivespec)
作用:如果指定的驱动器存在,返回 True,如果不存在返回 False。
19、FileExists 方法
语法:object.FileExists(filespec)
作用:如果指定的文件存在,返回 True,若不存在,则返回 False。
20、CreateTextFile 方法
语法:object.CreateTextFile(filename[, overwrite[, unicode]])
overwrite 可选的。Boolean 值,表示一个已存在文件是否可被覆盖。如果可被覆盖其值为 True,其值为 False 时不能覆盖。如果它被省略,则已存在文件不能覆盖。
unicode 可选的。Boolean 值,表示文件是作为一个 Unicode 文件创建的还是作为一个ASCII 文件创建的。如果作为一个 Unicode 文件创建,其值为 True,作为一个 ASCII 文件创建,其值为 False。如果省略的话,则认为是一个 ASCII 文件。
作用:创建一个指定的文件名并且返回一个用于该文件读写的 TextStream 对象。
示例:
Dim f
Set f = fso.CreateTextFile("c:\testfile.txt", True)
21、OpenTextFile 方法
语法:object.OpenTextFile(filename[, iomode[, create[, format]]])
作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读、写、追加操作。
说明:
·iomode 参数可为下面设置值中的任何值:
ForReading    1  打开一个只读文件,不能对此文件进行写操作。
ForWriting    2  打开一个用于写操作的文件。如果和此文件同名的文件已存在,则覆盖以前内容。
ForAppending    8  打开一个文件并写到文件的尾部。
注意:在VBA帮助里是没有ForWriting的,其实是有的,VBA帮助也是有错误的。另外,这些常数在使用前要先声明,或者直接用数值。
·create 可选的,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。
·Format 参数可为下面设置值中的任何值:
TristateUseDefault   –2   使用系统缺省打开文件。
TristateTrue    –1   以 Unicode 格式打开文件。
TristateFalse      0   以 ASCII 格式打开文件。
示例:
Dim f
Set f = fso.OpenTextFile("c:\testfile.txt", 2, True)
或者:
Const ForWriting = 2
Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
这两者功能是一样的,一个声明了常量,一个直接用数值。都是在C盘创建文件testfile.txt(如不存在),或以写的方式打开(如存在)。
22、CopyFile 方法
语法:object.CopyFile source, destination[, overwrite]
作用:把一个或多个文件从一个地方复制到另一个地方。
说明:需要注意的地方与CopyFolder是完全类似的。
示例:
fso.copyfile "c:\testfile.txt", "f:\abc\"  '若abc不存在则出错。
fso.copyfile "c:\testfile.txt", "f:\abc"  '若abc不存在则复制testfile.txt到F盘文件名变为abc,若abc存在,出错,因为是一个目录。
23、MoveFile 方法
语法:object.MoveFile source, destination
作用:将一个或多个文件从一个地方移动到另一个地方。
说明:需要注意的地方与MoveFolder是完全类似的。
24、DeleteFile 方法
语法:object.DeleteFile filespec[, force]
作用:删除一个指定的文件。
说明:force 可选的。如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。
(三)处理驱动器
可以利用Drive对象来获取有关各种驱动器的信息,Drive对象的属性有:
TotalSize 属性   驱动器的总容量,以字节为单位。
AvailableSpace 属性  驱动器的可用空间容量,以字节为单位。
FreeSpace 属性   驱动器的剩余空间容量,和 AvailableSpace 属性是相同的。
    对于支持限额的计算机系统来说,二者之间可能有所不同。
DriveLetter 属性  驱动器字母,即盘符。
DriveType 属性   驱动器的类型。如"Removable"、"Fixed"、"Network"、"CD-ROM"、"RAM Disk"
SerialNumber 属性  驱动器的序列号。
FileSystem 属性   驱动器所使用的文件系统类型。如FAT、FAT32、NTFS、以及 CDFS。
IsReady 属性   驱动器是否可用。
ShareName 属性   驱动器的网络共享名。
VolumeName 属性   驱动器的卷标名。
Path 属性   驱动器的路径。C 驱动器的路径是 C:,而不是 C:\。
RootFolder 属性   定驱动器的根文件夹。C 驱动器的根文件夹是 C:\。




FILESYSTEMOBJECT简称FSO,是SCRIPTING类库对象(SCRIPTING.FILSYSTEMOBJECT)

同类库的还有字典对象(Dictionary),代码加密算法的ENCODER对象(这个很冷门,因为算法是公开化的,容易破解)
————————————
SCRIPTING在MICROSOFT的中译叫脚本运行时,呃,有点怪异,但它反正不是VBA的默认类库,也不是OFFICE的类库,所以你在EXCEL VBA找不到它的帮助很正常。
EXCELHOME对FSO和Dictionary的类实例讨论比较多,但帮助文件方面没有资源么?

FSO最早在VS98就出现了,随VB98、VC98的MSDN库开始就有它的帮助文件,如果你装了.NET的MSDN也一样可以找到。
问题是MSDN很大,你不做开发就要找。
还有一个专门针对SCRIPTING的是VBS的帮助文件,WSH(Windows Script HOST 5.X 以上),包含了上述模型的介绍,其中还有VBS类库的正则表达式类的帮助。
不能上传过大的附件,随便找个IASK的点,不保证效果(建议你以后查MICROSOFT的)
http://ishare.iask.sina.com.cn/f/12480356.html?retcode=0


MICROSOFT官方目前的下载链
http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=376d98b6-67cf-4473-9b7d-f635292a286f
其中那个SCD56CHS.EXE就是,你执行一下,它会给你解开一个标准的CHM文档.注意文档解开的位置.
如果你下了这个,就不用我前面找的那个链接了,以官方的文档,或MSDN为准。

学习或参考FSO或其它SCRIPTING等类库方法、属性,直接查找“脚本运行时”中的对应类模型,有详细的例子介绍。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-5 10:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jinsha2002 于 2014-7-5 10:13 编辑

VB6中的FSO对象模型(对文件操作有很大的作用,可应用于VBA)


VB6中的FSO对象模型 作者:倪秉书

      在编程中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件等。
      在VB6中新提供了一套称为FSO(File System Object)对象模型来对文件系统进行访问处理。该模型提供了一个基于对象的工具,通过它所提供的一系列属性和方法,我们可以在应用程序中更简单、灵活地对文件系统进行各种操作。
        一、FSO简介
       FSO对象模型包含以下几种对象:
  Drive对象:允许收集系统物理或通过LAN与系统逻辑连接的硬盘、CD-ROM等驱动器的可用空间、共享名等信息。
  Folder对象:允许创建、删除或移动文件夹,并向系统查询文件夹的名称、路径等。
  Files对象:允许创建、删除或移动文件,并向系统查询文件的名称、路径等。
  TextStream对象:允许创建和读写文本文件。
  FileSystemObject对象:提供一整套用于驱动器、文件夹和文件操作的方法,在功能上可以把它看作是上面几个对象的集合并且经常与它们配合使用。与该对象相关联的很多方法重复了前面四个对象中的方法,因此我们既可以通过FileSystemObject对象来对驱动器、文件夹和文件进行大多数操作,也可以通过对应的驱动器、文件夹或文件对象对这些组件进行操作。FSO模型通过两种方法实现对同一对象的操作,其操作效果是相同的,提供这种冗余功能的目的是为了实现最大的编程灵活性。
  FSO对象模型包含在一个称为Scripting的类型库中,此类型库位于Scrrun.dll文件中,可从“工程”选单的“引用”对话框中选择“Microsoft Scripting Runtime”项来引用此文件。
  创建一个FileSystemObject对象,可以通过如下两种方法来完成:
        1 将一个变量声明为FileSystemObject对象类型:Dim fso As New FileSystemObject;
        2 使用CreateObject方法来创建:Set fso=CreateObject(″Scripting.FileSystemObject″)。
  二、对驱动器的操作
  对驱动器的操作主要通过Drive对象并配合FileSystemObject对象,FSO不支持进行创建或删除驱动器的操作,而只允许收集关于系统所用驱动器的信息。通过该对象的属性可以获得下列信息:以字节表示的驱动器可用空间(AvailableSpace或FreeSpace);为驱动器指定的字母号(DriveLetter);驱动器类型(DriveType);驱动器使用的文件系统类型,诸如FAT、FAT32、NTFS等(FileSystem);驱动器是否可用(IsReady);驱动器的路径或根文件夹(Path和RootFolder);驱动器序列号(SerialNumber);共享名或卷标名(ShareName和VolumeName);以字节表示的驱动器总空间(TotalSize)。
       下面一例说明了如何收集有关驱动器的信息:
  Private Sub Command1—Click()
  Dim fso As New FileSystemObject, drv As Drive, str As String
  Set drv=fso.GetDrive(fso.GetDriveName(″c:″))
  Debug.Print ″Total Space: ″ & FormatNumber(drv.TotalSize / 1024, 0) & ″Kb″
  Debug.Print ″Free Space: ″ & FormatNumber(drv.FreeSpace / 1024, 0) & ″Kb″
  End Sub
  三、对文件夹的操作
  Folder对象允许通过所提供的方法来复制(Copy)、删除(Delete)或移动(Move)文件夹,并通过其属性向系统查询其名称(Name)、路径(Path)以及创建日期(DateCreated)等。
       FileSystemObject 对象对文件夹的操作方法有创建(CreateFolder)、复制(CopyFolder)、移动(MoveFolder)和删除(DeleteFolder)。
      在进行上述操作之前,首先要获得该文件夹的访问句柄(GetFolder)。
     下例说明了如何对文件夹进行操作:
  Private Sub Command2—Click()
  Dim fso As New FileSystemObject, fldr As Folder
  Set fldr=fso.GetFolder(″c:″)       ′获得当前文件夹的访问句柄
  Debug.Print ″Parent folder name is: ″ & fldr   ′打印文件夹名
  Debug.Print ″Contained on drive ″ & fldr.Drive   ′打印驱动器名
  fso.CreateFolder (″c:\Temp″)   ′用FileSystemObject对象创建一个新的文件夹
  fso.DeleteFolder (″c:\Temp″)      ′删除新建的文件夹
  End Sub
  访问一个对象,要首先用“Get”方法获得该对象的访问句柄,但如果是用“Create”函数新创建一个对象, 函数会返回一个句柄到新创建的对象,这时只要设置一个变量来获取该句柄即可,不必再用“Get”方法。如:Set fldr=fso.CreateFolder(″C:\Temp2″)。   四、对文件的操作
  读写文件,在VB6之前都是使用Open等语句来实现,FSO支持通过TextStream对象来创建和读写文本文件。
  FSO通过CreateTextFile、OpenTextFile、OpenAsTextStream 三种方法来创建一个顺序文本文件。文件创建后,就可分三步写入数据:
  1.?利用FileSystemObject对象的OpenTextFile方法或File对象的OpenAsTextStream 方法打开文本文件以备写入数据。
  2.?使用TextStream 对象的Write、WriteLine或WriteBlankLines方法写入数据。
  3.?使用TextStream对象的Close方法关闭文件。
  下例说明了如何创建文本文件:
  我们可使用TextStream 对象的Read、ReadLine或ReadAll方法从一个文本文件中读取数据。
  Private Sub Command3—Click()
      Dim fso As New FileSystemObject, fil As File, ts As TextStream
   fso.CreateTextFile ″c:\testfile.txt″
   Set fil=fso.GetFile(″c:\testfile.txt″)
   Set ts=fil.OpenAsTextStream(ForWriting)
   ts.Write (″这是一个测试文件!″)
   ts.Close
   Set ts=fil.OpenAsTextStream(ForReading)
   s=ts.ReadLine
   MsgBox s
   ts.Close
  End Sub
    除了创建与读写文件之外,VB6还可通过FileSystemObject对象对文件进行复制(CopyFile)、移动(MoveFile)与删除(DeleteFile)等操作,在File对象中等效的方法有Copy 、Move和Delete。
例程如下 :
  Private Sub Command4—Click()
    Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File
    Set txtfile=fso.CreateTextFile(″c:\testfile.txt″, True)
    txtfile.Write (″这是一个测试文件!″)
    txtfile.Close
    Set fil1=fso.GetFile(″c:\testfile.txt″)   ′获得一个文件句柄
    fil1.Copy (″c:\temp1\testfile.txt″)     ′将该文件复制到\temp1目录下
    fil1.Move (″c:\temp2\testfile.txt″)     ′将该文件移动到\temp2目录下
    Set fil1=fso.GetFile(″c:\temp1\testfile.txt″)     ′获得这些文件当前位置的句柄
    Set fil2=fso.GetFile(″c:\temp2\testfile.txt″)
    fil1.Delete
    fil2.Delete
  End Sub
  摘自《赛迪网》 倪秉书/文




TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-26 09:43 | 显示全部楼层
本帖最后由 jinsha2002 于 2014-7-26 09:44 编辑

DATEVALUE 应用解释
1.如果是E2003,要加载宏,分析工具库
公式不能认到这个文本格式的日期
2.DATEVALUE
返回 date_text 所表示的日期的系列数。函数 DATEVALUE 的主要功能是将以文字表示的日期转换成一个系列数。
有关 Microsoft Excel 如何使用日期系列数的详细信息,请参阅“说明”部分。
3.语法 DATEVALUE(date_text)
Date_text   以 Excel 日期格式表示日期的文本。例如,"30-Jan-1998" 就是带引号的文本,它用于代表日期。在使用 Excel for Windows 中的默认日期系统时,date_text 必须表示 1900 年 1 月 1 日到 9999 年 12 月 31 日之间的一个日期;而在使用 Excel for Macintosh 中的默认日期系统时,date_text 必须表示 1904 年 1 月 1 日到 9999 年 12 月 31 日之间的一个日期。如果 date_text 超出上述范围,则函数 DATEVALUE 返回错误值 #VALUE!。
如果省略 date_text 中的年代,则函数 DATEVALUE 使用计算机系统内部时钟的当前年代。date_text 中的时间信息将被忽略。
说明
Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日期系统,则 Excel 会将 1904 年 1 月 1 日保存为系列数 0(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中,Excel 会将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795 天。请查阅 Microsoft Excel 如何存储日期和时间。
Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅函数 NOW。
大部分函数都会自动将日期值转换成系列数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-26 09:50 | 显示全部楼层
把文本化的数字、日期格式转换成数字、日期格式,对数据区求值即可:
With [a:a]
    .Value = .Value
End With

With Intersect(ActiveSheet.UsedRange, [a:a])
    .Value = .Value
End With
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 23:12 , Processed in 0.052867 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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