需要设置一个 Sheet 以便代码工作,无论我在 sheet
Need to set a Sheet so code works, regardless of what sheet I am on
我用它来拆分 facebook url,如果我在 SHEET 上,它工作正常。我现在将从用户表单中 运行 并且 sheet 将不再可见或活动 sheet。我一直在尝试设置 sheet,因此无论 sheet 处于活动状态,它仍然可以工作。但是我正在努力这样做。
问)有人可以帮我设置工作sheet“Facebook”吗? (因此无论 sheet 处于活动状态如何,这都会影响用户表单)
我已经注释掉了我的尝试,我也尝试过使用 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
只需确保 每个 Range
、Cells
、Rows
和 Columns
对象都被工作簿和工作表引用喜欢
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))
将此技术应用于所有 您的代码,无论哪个工作表或工作簿处于活动状态,它都将可靠地工作。
我用它来拆分 facebook url,如果我在 SHEET 上,它工作正常。我现在将从用户表单中 运行 并且 sheet 将不再可见或活动 sheet。我一直在尝试设置 sheet,因此无论 sheet 处于活动状态,它仍然可以工作。但是我正在努力这样做。
问)有人可以帮我设置工作sheet“Facebook”吗? (因此无论 sheet 处于活动状态如何,这都会影响用户表单)
我已经注释掉了我的尝试,我也尝试过使用 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
只需确保 每个 Range
、Cells
、Rows
和 Columns
对象都被工作簿和工作表引用喜欢
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))
将此技术应用于所有 您的代码,无论哪个工作表或工作簿处于活动状态,它都将可靠地工作。