循环不断重置

我有以下代码

Sub Split_data() ' Split_data Dim iCtr As Long Dim Total As Long Dim Iterations As Long Dim FilePath As String ' Save path for new files FilePath = "C:\DataFiles" ' Create folder to store files If FileFolderExists(FilePath) Then ' Delete first row with obsolete data Rows("1:1").Select Selection.Delete Shift:=xlUp Else MkDir (FilePath) ' Delete first row with obsolete data Rows("1:1").Select Selection.Delete Shift:=xlUp End If Total = Range("A1", Range("A1").End(xlDown)).Count Iterations = Application.WorksheetFunction.RoundUp(Total / 2, 0) ' Generate the files For iCtr = 1 To Iterations Generate_Files iCtr, FilePath Next iCtr End Sub 

代码本身正常工作,除了1件事情,当我完成了我的For循环,我的柜台神秘地重置为1,并保持循环。

所以如果我得到5行,它循环3次, iCtr值正常上升,但是一旦第三次循环完成,它突然跳回到1, iCtr开始。

所以,任何人都会看到zhy,因为我已经尝试了几次,一步一步地尝试,但是我找不到zhy,它会跳回到1

其余的代码如果很重要:

 Function Generate_Files(iCtr As Long, FilePath As String) ' ' Generates files which contain copied data of first copied x rows after which these rows are deleted ' ' Create variables Dim wb1 As Excel.Workbook Dim wb2 As Excel.Workbook Dim ws1 As Worksheet Dim ws2 As Worksheet Dim x As Integer Dim CurrPath As String ' Stop screen flickering Application.ScreenUpdating = False ' Initialise variables Set wb1 = ActiveWorkbook Set ws1 = Worksheets(1) ' Create new workbook Set wb2 = Workbooks.Add(1) wb2.Activate Sheets(1).Name = "data" Set ws2 = Worksheets("data") ' Set path of created file CurrPath = ThisWorkbook.FullName ' Copy data from wb1 wb1.Activate ws1.Select Rows("1:2").Select Selection.Copy ' -!- ' Copy done afterwards to prevent issues with copied values disappearing from copy clipboard while creating new file ' -!- ' Activate wb2 wb2.Activate ws2.Select ' Paste data in wb2 Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False ' Remove first x lines from original file wb1.Activate Rows("1:2").Select Selection.Delete Shift:=xlUp ' Save & close wb2 wb2.Activate ActiveWorkbook.SaveAs ("C:\DataFiles\Split Data" & iCtr) ActiveWorkbook.Close Application.ScreenUpdating = True End Function Public Function FileFolderExists(strFullPath As String) As Boolean On Error GoTo EarlyExit If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True EarlyExit: On Error GoTo 0 End Function 

尝试像这样声明你的函数:

 Function Generate_Files(ByVal iCtr As Long, ByVal FilePath As String) ' the rest of the function definition 

默认情况下,VBA FunctionSub的参数是ByRef ,这意味着被调用的函数/子例程可以修改调用函数/子例程中的参数。 ByVal将阻止这一点。

稍后编辑

另一种方法是强制编译器在调用函数中将parameter passing给ByVal

 For iCtr = 1 To Iterations Generate_Files (iCtr), FilePath Next iCtr 

如这里所解释的。

尝试在循环未执行之前或之后确认该代码。 有可能整个Split_data函数被再次调用,或者某种函数recursion导致该函数的多个实例立即执行。 尝试在循环之前和之后输出一些debugging文本,并确保它只进入一次。