Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 如何重置..中的变量。。你喜欢打圈吗?_Excel_Vba_Loops_For Loop_Directory - Fatal编程技术网

Excel 如何重置..中的变量。。你喜欢打圈吗?

Excel 如何重置..中的变量。。你喜欢打圈吗?,excel,vba,loops,for-loop,directory,Excel,Vba,Loops,For Loop,Directory,如何在do循环中将保留变量重置为0?我想重置的是idx idx表示正在搜索的子文件夹的编号 例如,总共有100个子文件夹,因此idx max=100。当宏找到匹配文件夹时,例如50。它保留idx=50。所以对于新的搜索,idx不会从头开始,而是从51、52、53…100继续新的搜索。因此,如果匹配的子文件夹idx为20,由于宏没有经过0-50,它将视为未找到并退出循环 在哪里可以重置此变量 Dim idx作为整数 对于idx=0到UBound(数组_子文件夹) 将文件名设置为字符串 fileNa

如何在do循环中将保留变量重置为0?我想重置的是idx

idx表示正在搜索的子文件夹的编号

例如,总共有100个子文件夹,因此idx max=100。当宏找到匹配文件夹时,例如50。它保留idx=50。所以对于新的搜索,idx不会从头开始,而是从51、52、53…100继续新的搜索。因此,如果匹配的子文件夹idx为20,由于宏没有经过0-50,它将视为未找到并退出循环

在哪里可以重置此变量

Dim idx作为整数
对于idx=0到UBound(数组_子文件夹)
将文件名设置为字符串
fileName=Dir(数组_子文件夹(idx)和“/*.xlsb”)
出错时继续下一步
文件名“”时执行此操作
FullPathFileName=数组\子文件夹(idx)&“\”文件名
如果(左(文件名,12)=“Ass_Sheet”,则
将prodName设置为字符串
prodName=ThisWorkbook.Sheets(“主”).Cells(MasterRow,1).Value
如果(InStr(fileName,prodName)>0),则
调用prc\u导入值(文件名)
母排=母排+1
如果结束
如果结束
fileName=Dir()
环
下一个
MsgBox“---已完成--”

首先,我强烈建议删除下一步继续出错时的
,因为如果有什么东西坏了,而你没有收到任何错误信息,那么留在里面只会导致痛苦和心痛。如果删除了错误消息,则应跟踪错误源,并修复该错误,或使用适当的保护子句或错误处理来处理它

其次,我认为您需要重复搜索整个
Array\u子文件夹
,以查找每个子文件夹中名为
prodName
的任何文件。如果是这样的话,我建议如下:

Dim index As Integer
index= 0
Do While index < UBound(Array_SubFolders) 
    Dim fileName As String
    fileName = Dir(Array_SubFolders(index) & "\*.xlsb")
    Do While fileName <> ""
        FullPathFileName = Array_SubFolders(index) & "\" & fileName
        If (Left(fileName, 12) = "Ass_Sheet_") Then
            Dim prodName As String
            prodName = ThisWorkbook.Sheets("Master").Cells(MasterRow, 1).Value
            If (InStr(fileName, prodName) > 0) Then
                Call prc_Import_Values(fileName)
                MasterRow = MasterRow + 1
                index = 0
            End If
        End If
        fileName = Dir()
    Loop
    index = index+ 1
Loop
Dim索引为整数
索引=0
索引0),则
调用prc\u导入值(文件名)
母排=母排+1
索引=0
如果结束
如果结束
fileName=Dir()
环
索引=索引+1
环
与使用
For…Next
循环并尝试重置索引(通常建议不要这样做)不同,它使用
Do While…循环
并在
If(InStr(fileName,prodName)>0)然后
行上找到匹配项时重置索引。如果位置不正确,则可以将
索引=0
移动到实际匹配发生的位置


另外,请注意,我将
idx
更改为
index
。元音是便宜的,我相信不去掉元音变量会使它们更可读。另外,随着VBIDE的自动完成,在中键入可能会以相同的击键次数得到相同的结果。

1)您似乎缺少一些代码,
下一个idx
(可能还有其他内容)缺少2)使用“rest”表示“重置”吗?3)
prc\u Import\u Values
是递归函数吗?上面的代码是递归函数吗?这是函数吗?
Array\u子文件夹从哪里来?@controlnetic.nomad你说得对,1)“rest”=reset.@)prc_Import_Values是在宏找到正确的文件夹和文件后导入值的另一个函数。这部分工作得很好,我没有把代码放在这里。这里唯一的问题是重置idx,因此当新搜索开始时,它将从第一个子文件夹开始搜索,其中数组存储检测到的所有子文件夹。@mdelapena array_Subfolders是存储所有子文件夹的另一个函数,我发布的代码是用来找到匹配文件夹的。旁注-我想你应该用反斜杠来表示这个
“/*.xlsb”)
感谢@FreeMan提供的建设性建议。在阅读您的评论之前,我将其更改为do while..loop。然后我试着根据你上面的修改修改我的代码。索引重置问题已解决,但循环现在没有退出。。例如:我只想搜索2个产品名,但在2个产品名之后,宏仍继续导入数据(下一个索引的文件),很高兴您发现这很有用。如果需要另一种跳出循环的方法,可以在达到“跳出”条件时执行
index=UBount(Array_SubFolder)+1
,也可以将
do While index
更改为
do While index
我在这里有点困惑。也许我之前的问题只是问如何重置索引,然后我没有解释我的场景。实际上,我的索引是指数组保留的特定子文件夹。因此,第一个目标是从产品名称列表中搜索所需的子文件夹,下一个循环是查找与我的条件匹配的文件。在阅读您的建议之前,我的想法非常简单,在产品名称列表结束时退出循环。我尝试将此条件添加到循环中,但尚未成功。最后,它开始工作。谢谢你的帮助,弗里曼。非常感谢!