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 Select
和Activate
。 声明cell1
和cell2
。 因此,这应该工作:
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
或其他有意义的东西。