vba excel 选择正确的工作表

vba excel choosing the right worksheet

问题出在代码末尾的 "Intersect" 部分。它持续 运行 只有当新的 sheet 被带到前台时。
此外,有没有办法在没有 "with worksheet(" 传播的情况下与命令 "Intersect" 合作")"?

Sub Schaltfläche2_Klicken() 

Dim wb As Workbook, wq As Object
Dim ws As Worksheet, datdatum

Set wb = Workbooks.Add
Set ws = wb.Worksheets("Tabelle1")


ws.Select
ActiveWindow.Zoom = 80


ws.Name = "Spread"
datdatum = Now

Set wq = Workbooks.Open    
(Filename:="C:\Users\topal\Desktop\Spreaddeterminierung\Fundings 020718.xls")

wq.Sheets("Hypothekenbanken").Range("A11:P54").Copy
ws.Range("A3").PasteSpecial
wq.Sheets("Landesbanken").Range("A12:P38").Copy
ws.Range("A50").PasteSpecial

With Worksheets("Spread")
Intersect(.Range("4:92"), Range("F:F,H:H,J:J,M:M")).BorderAround , , 1
End With

End Sub

您错过了第二个 Range 语句中的 . ...

Intersect(.Range("4:92"), Range("F:F,H:H,J:J,M:M")).BorderAround , , 1

应该是...

Intersect(.Range("4:92"), .Range("F:F,H:H,J:J,M:M")).BorderAround , , 1

假设您在模块中编写此子程序,前面没有 .Range 将针对活动 (foreground/frontmost) 工作表。另一方面,如果您在工作表中编写此子程序,则前面没有 .Range 会针对您正在编码的工作表。感谢@Vityata 指出这一点!


在回答您的第二个问题时,您可以通过在 .Range 语句前面明确说明工作表来取消 With 块,例如 ...

With Worksheets("Spread")
    Intersect(.Range("4:92"), Range("F:F,H:H,J:J,M:M")).BorderAround , , 1
End With

会变成

Intersect(Worksheets("Spread").Range("4:92"), Worksheets("Spread").Range("F:F,H:H,J:J,M:M")).BorderAround , , 1