2017-11-13 2 views
2

次のコードでは、 "Master.Activate"の "Sheets.Count"は、マクロを実行する前にマウスのクリックで「ソース」ブックを手動で選択した場合にのみ機能します。そうでなければ、 "Master.Activate"はSheets.Countを実行して最後のシートを選択するのではなく、 "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 

よろしく、 Bartek

+0

'=" "'の代わりに 'IsEmpty'を使う以外に、これはあなたの最後の質問と同じコードです。コード**が** Source .ActivateとMaster.Activateは含まれていたが、そうではなかった。そして、あなたのコードの唯一の問題は、 'Activate'ステートメントを含めたかどうかにかかわらず、問題であった、不適切な' Sheets.Count'でしょうか、 。 – YowE3K

答えて

2

エラーが資格Sheets.countなし

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

であるが、それが実行された時点で開いている方ブック内のシートの数を指します。

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

SelectActivateをdisreagartしてください。 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などの意味を使用してください。

関連する問題