sheets.count与工作簿激活

在下面的代码中,“Master.Activate”中的“Sheets.Count”仅在运行macros之前通过鼠标单击手动select“源”工作簿时才起作用。 否则,“Master.Activate”将激活“主”工作簿的第一个工作表,而不是执行Sheets.Count并select最后一个工作表。 这基本上意味着macros必须从“主”工作簿运行,但只能在点击“源”工作簿之后运行。 我将不胜感激任何build议如何解决这个问题。

 Dim Source As Worksheet Set Source = Workbooks("Source.xlsx").Worksheets("Settlements") Dim Master As Worksheet Set Master = Workbooks("Master Bonviva.xlsm").Worksheets(Sheets.Count) Source.Activate For Each cell In Source.Columns("M").Cells If Not IsEmpty(cell) Then Master.Activate For Each cell2 In Master.Columns("J").Cells If Not IsEmpty(cell2) Then If cell = cell2 Then cell2.Offset(0, 9).Value = cell.Offset(0, -2).Value cell2.Offset(0, 8).Value = cell.Offset(0, -8).Value End If End If Next cell2 End If Next cell End Sub 

问候,Bartek

错误在

  Set Master = Workbooks("Master Bonviva.xlsm").Worksheets(Sheets.Count) 

没有资格Sheets.count是指运行时打开的工作簿中的工作表数量。 换成这个

 Dim wb as workbook Set wb =Workbooks("Master Bonviva.xlsm") Set Master = wb.worksheets(wb.sheets.count) 

尝试disreagart SelectActivate 。 声明cell1cell2 。 因此,这应该工作:

 Public Sub TestMe() Dim Source As Worksheet Set Source = Workbooks("Source.xlsx").Worksheets("Settlements") Dim Master As Worksheet Set Master = Workbooks("Master Bonviva.xlsm").Worksheets(Sheets.Count) Dim cell1 As Range Dim cell2 As Range For Each cell1 In Source.Columns("M").Cells If Not IsEmpty(cell1) Then For Each cell2 In Master.Columns("J").Cells If Not IsEmpty(cell2) Then If cell1 = cell2 Then cell2.Offset(0, 9).Value = cell1.Offset(0, -2).Value cell2.Offset(0, 8).Value = cell1.Offset(0, -8).Value End If End If Next cell2 End If Next cell1 End Sub 

如何避免在Excel VBA中使用Select

一般来说,作为一个好习惯,不要声明variables,它们使用VB编辑器使用的相同名称。 例如,避免声明cell ,但使用cell cell1或其他有意义的东西。