sheets.count vs工作簿激活

时间:2017-11-13 16:16:58

标签: excel vba excel-vba

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

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

此致 巴特克

2 个答案:

答案 0 :(得分:2)

错误在

 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)

答案 1 :(得分:1)

尝试取消重新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

How to avoid using Select in Excel VBA

通常,作为一种好的做法,不要声明使用VB编辑器使用的相同名称的变量。例如,避免声明cell,但使用cell1或其他任何有意义的内容。

相关问题