需要设置一个工作表,以便代码工作,无论我在什么工作表上

时间:2021-02-22 14:04:18

标签: excel vba web-scraping screen-scraping

我用它来分割 facebook url,如果我在工作表上,它工作正常。我现在将从用户表单运行它,并且工作表将不再可见或活动工作表。我一直在尝试设置工作表,因此无论工作表处于活动状态,它仍然可以工作。但是我正在努力做到这一点。

Q) 有人可以帮我设置工作表“Facebook”吗? (因此,无论哪个工作表处于活动状态,都可以在用户表单之外工作)

我已经注释掉了我的尝试,我也尝试过使用 With Sheet 但似乎对我没有任何作用

    Dim i As Long, j As Long
    Dim va, x, z
    'Dim wb As Workbook: Set wb = ThisWorkbook
    'Dim va As Worksheet
       'Set va = wb.Sheets("Facebook")

    va = Range("A2", Cells(Rows.Count, "A").End(xlUp))
    On Error GoTo skip:
    For i = 1 To UBound(va, 1)
    
    x = va(i, 1)
    If Right(x, 1) <> "/" Then x = x & "/"
    
    If InStr(x, "/posts/") Or InStr(x, "/about/") Then
        z = Split(x, "/")
        For j = LBound(z) To UBound(z)
            If z(j) = "posts" Or z(j) = "about" Then x = "https://www.facebook.com/" & z(j - 1) & "/about": 
       Exit For
          Next       
    End If
    
    If InStr(x, "/category/") Then
       z = Split(x, "/")
       For j = LBound(z) To UBound(z)
          If z(j) = "category" Then x = "https://www.facebook.com/" & z(j + 2) & "/about": 
       Exit For
          Next
    End If    
    
  va(i, 1) = x
 
Next

ws.Range("B2").Resize(UBound(va, 1), 1) = va

Exit Sub
skip:

MsgBox "Error number " & Err.Number & " : " & Err.Description & vbLf _
& "Problem at row :" & i + 1 & vbLf & va(i, 1)
'End With

1 个答案:

答案 0 :(得分:1)

只要确保每个 RangeCellsRowsColumns 对象都被类似的工作簿和工作表引用

va = ThisWorkbook.Worksheets("Sheet1").Range("A2", ThisWorkbook.Worksheets("Sheet1").Cells(ThisWorkbook.Worksheets("Sheet1").Rows.Count, "A").End(xlUp))

否则 Excel 无法知道您指的是哪个工作簿和工作表,通常会采用活动工作表(这可能不是您想要的工作表)。

这里 With 块或变量可以方便地缩短它:

With ThisWorkbook.Worksheets("Sheet1")
    va = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))
End With

或者如果您需要使用不同的工作表,您最好使用类似

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

va = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))

将此技术应用于所有您的代码,无论哪个工作表或工作簿处于活动状态,它都能可靠地工作。

相关问题