这是一个非常基本的问题,我在Google上搜索了如何“为每个传递for循环中的变量”等...而所有内容似乎都模棱两可或不足。也许因为它甚至不可能?
我有一个excel文件,其中包含文件编号列表,稍后我将在代码中使用这些文件编号来搜索目录中的PDF。我的代码工作正常,但我的代码充满了循环,嵌套循环,并且所有内容始终必须在这些循环内,因为多数民众赞成在声明变量的地方进行。下面的代码示例:
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop
Module Module1
Dim aCell As Object = Nothing
Dim eachcell As New List(Of String)
Sub Main()
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
Dim range As Excel.Range
Dim aCpage = "unknown"
xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Open("C:\Users\XBorja.RESURGENCE\Desktop\xavier.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("sheet1")
range = xlWorkSheet.UsedRange.SpecialCells(XlCellType.xlCellTypeConstants)
Dim currentcell = Nothing
For Each i In range.Value
eachcell.Add(i)
Next
For Each aCell In eachcell
currentcell = aCell.ToString
Console.WriteLine(currentcell)
Next
End Sub
这很完美,在控制台上显示了我在excel工作表中写的所有文件编号的列表:
ZTEST01.SMITH
ZTEST14.SAMPLE05
ZTEST02.RESTAURANT
ZTEST12.SAMPLE03
ZTEST03.MCDONALD
ZTEST04.DOE
ZTEST10.SAMPLE01
ZTEST13.SAMPLE04
ZTEST11.SAMPLE02
Press any key To Continue . .
但是如果我使用此代码:
For Each i In range.Value
eachcell.Add(i)
Next
For Each aCell In eachcell
currentcell = aCell.ToString
Next
Console.WriteLine(currentcell)
End Sub
这仅告诉我
的最后一个值ZTEST.11.SAMPLE02
我知道逻辑是,由于控制台写入位于for循环内,因此它会在excel中显示每个值,并将这些值附加到控制台,直到循环结束为止。
我的问题是我怎么能在for循环的外部外部调用整个列表/数组?
我知道使用+ =可以在for循环中添加整数以获得总和,而我尝试使用此代码进行操作,它只给了我所有串联的文件编号。
是否可以将此for循环转换为另一个子程序,以便在循环外将其称为“ currentcell”变量?还是可以将其转换为函数,以便我的整个子程序始终可以使用该变量?
答案 0 :(得分:1)
循环的每个迭代都有自己的作用域,该作用域本地的任何内容在每次迭代后都会丢失。
如果您要查找特定元素,则需要将其也保存为自己的值,那么您编写的代码将覆盖您在上一次迭代中发现的所有内容,这就是currentcell
仅具有最后一个值的原因
Dim found As Sting
For each cell in eachCell
If [condition] Then
found = cell.ToString()
Exit For
End If
Next
If Not found is Nothing Then
'Congrats you found it
Else
'Too bad, not in list
End If
如果您想用多个元素做某事,则需要 循环,或将元素作为参数传递给单独的函数
Sub Main()
Dim myArray As List(Of String);
myArray = [get your array of elements]
For Each item As String In myArray
DoThing(item)
Next
End Sub
Sub DoThing(value As String)
Console.WriteLine(value)
End Sub
希望对您有帮助