【问题标题】:Need to set a Sheet so code works, regardless of what sheet I am on需要设置工作表以便代码工作,无论我在哪个工作表上
【发布时间】:2021-02-22 14:04:18
【问题描述】:

我用它来拆分 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

【问题讨论】:

标签: excel vba web-scraping screen-scraping


【解决方案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))

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

【讨论】:

  • 超级,我将ws. 添加到 Rang,但没有添加到 Cells。这就是问题所在。只用了 4 小时就搞定了。感谢您的帮助 PEH,花了您 2 分钟
  • @Sharid 是的 每个 位于工作表中的对象都需要该引用是可靠的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多