2017-01-18 25 views
1

私は現在自分の日に時計を作るのに自己製のスプレッドシートを使用しています。新しいアクティビティを挿入するたびに、最後のアクティビティで私にかかる時間を計算する必要があります。メソッドシートのモジュール内でオブジェクト '_Global'の 'Intersect'が失敗しました - ActiveSheetが認識されません

毎日新しいスプレッドシートを作成するときと同じように正常に動作しますが、スプレッドシートを毎月ファイルにまとめることを検討しています。

自分のタスクを要約したピボットテーブルを更新する同じスプレッドシートにマクロボタンがあります。

私はワークシートのコピーを作成し、ピボットテーブルを更新しようとしたら、残念ながら、それは私にエラーメッセージを表示します。次のようにMethod 'Intersect' of object '_Global' failed

私の現在のコードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range) 

'Stamp Date 

Dim WorkRng As Range 
Dim Rng As Range 

Set WorkRng = Intersect(ActiveSheet.Range("B:B"), Target) 

If Not WorkRng Is Nothing Then 
    Application.EnableEvents = False 
    For Each Rng In WorkRng 
     If Not VBA.IsEmpty(Rng.Value) Then 
      If Rng.Offset(-1, 0).Value = "Start" Then 
       Rng.Offset(0, 1).Value = Rng.Offset(-1, 1) 
       Else: Rng.Offset(0, 1).Value = Now 
       Rng.Offset(0, 1).NumberFormat = "h:mm AM/PM" 
      End If 
     Else 
      Rng.Offset(0, 1).ClearContents 
     End If 
    Next 
    Application.EnableEvents = True 
End If 

'Time Format 

If Target.Cells.Count > 1 Or Target.HasFormula Then GoTo errHandler 
    On Error Resume Next 
     If Not Intersect(Target, Range("C3:C33")) Is Nothing Then 
      Application.EnableEvents = False 
      Target.NumberFormat = "H:MM AM/PM" 
      Application.EnableEvents = True 
     End If 

On Error GoTo errHandler 

    If WorkRng.Offset(0, 1) > 0 Then 
     WorkRng.Offset(1, 0).Select 
    End If 
Exit Sub 

errHandler:  ActiveCell.Select 

End Sub 

デバッグハイライト:Set WorkRng = Intersect(ActiveSheet.Range("B:B"), Target)

VBAの初心者であるため、これらのコードは主に別の場所からコピーされます。その結果、私は何が悪くなったのか分からない。どんな援助も非常に高く評価されるでしょう!

あなたがシートのモジュールの内部で ActiveSheetを使用することはできません
+1

は、「別のActiveSheetの問題」のように見えます別のワークシートから2つ以上の範囲を交差しようとします。ここではエラーです。可能であれば、 'ActiveSheet'を取り除いてください。ところで、シートの新鮮なコピーがActiveSheetになったときに問題が発生したと思います。この時点から、 'ActiveSheetがTarget.Worksheetならば'を、 'そうでなければ' Target.Worksheet.Activate'を比較しようとすることができます(これをしないでください)。 – CommonSense

+0

あなたの 'Private Sub Worksheet_Change(ByVal Target As Range)'サブをどこに置いていますか? – user3598756

答えて

0

(ユーザーフォームでどうなるように)、あなたはMeでそのシートを参照する必要があります:あなたの場合

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Stamp Date 
    Dim WorkRng As Range 
    Dim Rng As Range 

    Set WorkRng = Intersect(Me.Range("B:B"), Target) 

    If Not WorkRng Is Nothing Then 
     Application.EnableEvents = False 
     For Each Rng In WorkRng 
      If Not VBA.IsEmpty(Rng.Value) Then 
       If Rng.Offset(-1, 0).Value = "Start" Then 
        Rng.Offset(0, 1).Value = Rng.Offset(-1, 1) 
        Else: Rng.Offset(0, 1).Value = Now 
        Rng.Offset(0, 1).NumberFormat = "H:MM AM/PM" 
       End If 
      Else 
       Rng.Offset(0, 1).ClearContents 
      End If 
     Next 
     Application.EnableEvents = True 
    End If 

    'Time Format 
    If Target.Cells.Count > 1 Or Target.HasFormula Then GoTo errHandler 

    On Error Resume Next 
     If Not Intersect(Target, Me.Range("C3:C33")) Is Nothing Then 
      Application.EnableEvents = False 
      Target.NumberFormat = "H:MM AM/PM" 
      Application.EnableEvents = True 
     End If 
    On Error GoTo errHandler 

    If WorkRng.Offset(0, 1) > 0 Then 
     WorkRng.Offset(1, 0).Select 
    End If 
Exit Sub 

errHandler 
    Me.ActiveCell.Select 
End Sub 
関連する問題