如何在For Loop中全局设置变量,或者在子或另一个子/表单中访问变量?

时间:2018-10-19 13:16:48

标签: excel vb.net function for-loop global-variables

这是一个非常基本的问题,我在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”变量?还是可以将其转换为函数,以便我的整个子程序始终可以使用该变量?

1 个答案:

答案 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

希望对您有帮助