使用For Each循环遍历另一个工作簿中的每个单元格

时间:2018-07-20 11:17:56

标签: excel vba excel-vba

有关For Each In表达式的快速问题:
我将此行用于同一文件中的所有行,但工作表不同:

For Each c In tarRng
        count = count + 1
        Debug.Print "c.Value: "; c.Value
        Debug.Print "cAdd: "; c.Address
        Debug.Print "count"; count
Next 

tarRng定义为B列的所有行,它们可以完美工作,它循环遍历所有行,并输出该行中的值以及调试屏幕中每个值的地址。这里有一个后面的功能,我刚才在这里省略了。

现在是一个问题:我想在同一个文件夹中获得另一个工作簿的B列,但是当我这样定义它时(这里是固定范围,因为我只是想测试它)。

For Each c In Workbooks("Nvm_Configuration_ASW.xlsm").Worksheets("Tabelle2").Range("B3:B271")   

它只显示一次值为1的计数,甚至不输出c.Value或c.Address。我确信文件和工作表的表达式是正确的,因为我尝试使用与文件名相同的文件来工作,并且可以正常工作。

谢谢, Mathias

1 个答案:

答案 0 :(得分:0)

如果未打开工作簿,则必须使用Workbooks.Open()打开它:

Public Sub TestMe()

    Dim myCell As Range
    Dim wks As Workbook

    Set wks = Workbooks.Open("C:\Users\Nvm_Configuration_ASW.xlsm")        
    For Each myCell In wks.Worksheets(1).Range("A1:A5")
        Debug.Print myCell
    Next        

End Sub

如果已打开,则您的代码应该可以运行,应在同一Excel实例中打开它。

默认情况下,除非您没有其他技巧,否则它将在同一实例中打开:

    为Excel 2017打开时
  • Alt
  • 打开一个Excel文件,并从内部较小的Excel 2013及更早版本的十字中关闭它。