Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过VBA指定Excel文件_Excel_Vba - Fatal编程技术网

通过VBA指定Excel文件

通过VBA指定Excel文件,excel,vba,Excel,Vba,有没有办法在vba中“指定”文件?我的代码逐步进入一系列文件夹,并将数据从存在的每个文件(excel)导入主数据库。操作中最耗时的部分是打开文件-目前,我在导入后为文件名添加前缀。代码查找此前缀,并在下一个导入周期中跳过该文件 是否有一种更优雅且前端不太显眼的文件标记方法,以便VBA可以在不首先打开文件的情况下识别已完成的文件 编辑:为了澄清,将读取文件名,并且如果文件具有前缀(I_),则不会处理该文件。我正在寻找一种在不改变文件各自位置或文件名的情况下标记该文件的方法,该属性对于数据库的其他用

有没有办法在vba中“指定”文件?我的代码逐步进入一系列文件夹,并将数据从存在的每个文件(excel)导入主数据库。操作中最耗时的部分是打开文件-目前,我在导入后为文件名添加前缀。代码查找此前缀,并在下一个导入周期中跳过该文件

是否有一种更优雅且前端不太显眼的文件标记方法,以便VBA可以在不首先打开文件的情况下识别已完成的文件

编辑:为了澄清,将读取文件名,并且如果文件具有前缀(I_),则不会处理该文件。我正在寻找一种在不改变文件各自位置或文件名的情况下标记该文件的方法,该属性对于数据库的其他用户来说并不明显。此标记需要在代码完成后保持,因为稍后会再次检查相同的文件,并且可能来自运行更新代码的多台计算机

我不能保存一个处理过的文件的数据库——有几千个,而且还在增长。与该列表相比,无论之前是否运行过该文件,打开并处理该文件所需的时间都要长


处理过的文件数组不会持久存在。我没有在一次执行中多次处理同一个文件的问题,而是[每次执行代码时处理文件,而不是一次完成]或[重命名文件]。后者不是一个好的解决方案-我不想重命名数千个供其他人和程序参考的文件。

对于少量文件,我会在处理每个文件时,在检查每个文件名是否存在于数组中后,将其添加到数组中

If IsInArray(FileName, ProcessedFilesArray) Then

    'You processing code here

    'Add item to array when processed
    ReDim Preserve ProcessedFilesArray(1 To UBound(ProcessedFilesArray) + 1) As Variant
    ProcessedFilesArray (UBound(ProcessedFilesArray)) = FileName

End If

Function IsInArray(FileToBeFound As String, arr As Variant) As Boolean
  IsInArray = (UBound(Filter(arr, FileToBeFound)) > -1)
End Function

对于大量文件,我会在当前文件夹中为已处理的文件创建一个文件夹,将每个文件移到该文件夹中,然后在完成所有操作后再次将其移回。

对于少量文件,我会在处理时将每个文件名添加到数组中,在检查每个文件名是否存在于数组中之后

If IsInArray(FileName, ProcessedFilesArray) Then

    'You processing code here

    'Add item to array when processed
    ReDim Preserve ProcessedFilesArray(1 To UBound(ProcessedFilesArray) + 1) As Variant
    ProcessedFilesArray (UBound(ProcessedFilesArray)) = FileName

End If

Function IsInArray(FileToBeFound As String, arr As Variant) As Boolean
  IsInArray = (UBound(Filter(arr, FileToBeFound)) > -1)
End Function

对于大量文件,我会在当前文件夹中为已处理的文件创建一个文件夹,将每个文件移到该文件夹中,然后在完成所有操作后再次将其移回。

您不能在数据库中保留已导入文件的日志吗?或者将文件移动到“已完成导入”文件夹或类似的文件夹中?为什么要打开文件来检查文件名?在打开文件之前不能检查文件名吗?如果有前缀,就不要打开它?将文件移动到“已处理”文件夹?为什么只打开文件来获取文件名?修复代码,使其在打开文件之前检查文件名。那会很快。这个“主数据库”是什么格式的?它是另一个工作簿、同一工作簿中的工作表还是实际的数据库?我建议使用这个“数据库”,并在其中添加一个文件跟踪器。你能从基本代码中抽出几行来查找文件并处理文件中的数据吗?主工作簿是另一个工作簿。该文件已发送给客户-我不能在其中包含无关内容。此外,文件列表将花费很长的时间循环,因此简单地处理每个文件将更快,因为有7000个文件并且正在增长。某种形式的自定义文档属性可以工作吗?您不能在数据库中保存已导入文件的日志吗?或者将文件移动到“已完成导入”文件夹或类似的文件夹中?为什么要打开文件来检查文件名?在打开文件之前不能检查文件名吗?如果有前缀,就不要打开它?将文件移动到“已处理”文件夹?为什么只打开文件来获取文件名?修复代码,使其在打开文件之前检查文件名。那会很快。这个“主数据库”是什么格式的?它是另一个工作簿、同一工作簿中的工作表还是实际的数据库?我建议使用这个“数据库”,并在其中添加一个文件跟踪器。你能从基本代码中抽出几行来查找文件并处理文件中的数据吗?主工作簿是另一个工作簿。该文件已发送给客户-我不能在其中包含无关内容。此外,文件列表将花费很长的时间循环,因此简单地处理每个文件将更快,因为有7000个文件并且正在增长。某种形式的自定义文档属性是否有效?