代码之家  ›  专栏  ›  技术社区  ›  Markus Sacramento

Ping IP地址并循环,直到另一个工作簿中的范围高达50英寸

  •  0
  • Markus Sacramento  · 技术社区  · 5 年前

    我有一个Excel工作簿,其中O列有许多来自不同子网的IP地址,如192.168.0.0和192.168.1.0等。 我想从另一个工作簿使用这些IP地址,并ping每个子网50个地址范围。 例如192.168.0.1-192.168.0.50和192.168.1.0-192.168.1.50。 地址和状态应写入新工作簿。

    我有一个很好的ping代码,它在一列中ping地址,在另一列中给出结果。 我的问题是我没有写下所有的IP地址,列表是动态的,可能会改变。 我也无法将状态粘贴到新工作簿中,也不知道如何更改。

    Sub GetIPStatus()
    
      Dim Cell As Range
      Dim ipRng As Range
      Dim Result As String
    
    'Workbook which contains data I want to use in the script
    Dim wb As Workbook
    Dim Wks As Worksheet
    Set wb = Workbooks.Open(Filename:="C:\Temp\RetrieveDataFrom.xlsm")
    Set Wks = wb.Sheets("Datakom")
    
    'Workbook where I want do write result in
    Dim WorkB As Workbook
    Dim Ws As Worksheet
    Set WorkB = Workbooks.Open(Filename:="C:\Temp\Test.xlsm")
    Set Ws = WorkB.Worksheets("Test1")
    
    Set ipRng = Wks.Range("O2")
    Set RngEnd = Wks.Cells(Rows.Count, ipRng.Column).End(xlUp)
    Set ipRng = IIf(RngEnd.Row < ipRng.Row, ipRng, Wks.Range(ipRng, RngEnd))
    
      For Each Cell In ipRng
        Result = GetPingResult(Cell)
        WorkB.Cell.Offset(0, 2) = Result
        If Result = "Connected" Then
            WorkB.Cell.Offset(0, 3) = Now()
        End If
      Next Cell
    
    End Sub
    

    我不会出错,我只是把信息放错了。 另外,我不知道如何循环访问每个IP地址的范围。

    0 回复  |  直到 5 年前
        1
  •  1
  •   abbsichel    5 年前

    在for each循环中,cells.offset没有附加工作簿,因此vba正在将值放入活动工作簿。在cells.offset前面声明工作簿名称,这样可以解决问题。

    注意:我将首先打开工作簿,然后将工作簿的名称设置为变量,否则当调用设置为打开工作簿的变量时,它将继续打开该工作簿。

    例如:

    Dim wb As Workbook
    Workbooks.Open(Filename:="C:\Temp\Test.xlsm")
    Set wb = Workbooks("Test.xlsm")
    Set Wks = wb.Sheets("Datakom")
    

    。 。 .

      For Each Cell In ipRng
        Result = GetPingResult(Cell)
        wb.Cell.Offset(0, 2) = Result
        If Result = "Connected" Then
            wb.Cell.Offset(0, 3) = Now()
        End If
      Next Cell