1

ワークブックの変更中に行 15 のセルの値を行 6 のセルの値に追加することになっている小さな VBA マクロを Excel で開発しました (私の場合は、行 15 に数値を入力してタブを押します)。

最初は Excel 2013 で開発して使用していましたが、Mac に切り替えてから Excel for Mac 2011 で使用しています。Excel for Mac 2016 をインストールしたところ、突然、マクロが機能しなくなりました。 .

これはスクリプトです:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("C15:H15")) > 0 Then
            Call copySub
    End If
End Sub

Sub copySub()
    Sheets("sheet1").Protect , UserInterFaceOnly:=True
    For i = 3 To 8
        Cells(6, i).Value = Cells(6, i).Value + Cells(15, i).Value
        Cells(15, i).Value = 0
    Next i
End Sub

Excel 2016 で値を入力してタブを押すと、実行時エラー 91 "オブジェクト変数またはブロック変数が設定されていません" が表示されます。エラーは次の行で発生しているようです。

Cells(6, i).Value = Cells(6, i).Value + Cells(15, i).Value

に代入する前に合計を変数に格納しようとしましたCells(6, i).Valueが、それも役に立ちませんでした。

Microsoft はシート保護のロジックを変更しましたか? 特にパラメータUserInterFaceOnlyを に設定してtrue? または、ここで何が起こっていますか?

あなたが私を助けてくれることを願っています。

ありがとう、チャッキー

4

1 に答える 1

2

このコードを正しくコピーしましたか? どのバージョンの Excel でも機能するわけではありません。

あなたの問題は次のとおりです。

  1. Intersectオブジェクトを返すRangeため、コードは 91 エラーをスローします。
  2. Sheets("sheet1").Protect ...おそらく「Sheet1」と呼ばれているため、行に大文字と小文字のエラーがある可能性があります。その場合、これは 91 エラーをスローします。
  3. そのワークシート名を「sheet1」から変更すると、91 エラーがスローされます。
  4. のシートだけを保護しているのはなぜですかWorksheet_Change。これは本当にWorkbook_Open? そして、それを行う場合、特定のセルが保護されていない状態で、ユーザーはどのようにセルを変更するのでしょうか?

copySubどのワークシートを参照していて、ルーチンがどこで開催されているかは不明です。主なエラーを削除し、ワークシートを指定できるようにコードを更新しました - 必要に応じて調整する必要があります。幸運を。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet

    Set ws = Target.Worksheet
    If Not Intersect(Target, ws.Range("C15:H15")) Is Nothing Then
        Call copySub(ws)
    End If
End Sub

Sub copySub(ws As Worksheet)
    ws.Protect , UserInterFaceOnly:=True
    Application.EnableEvents = False
    For i = 3 To 8
        ws.Cells(6, i).Value = ws.Cells(6, i).Value + ws.Cells(15, i).Value
        ws.Cells(15, i).Value = 0
    Next i
    Application.EnableEvents = True
End Sub
于 2015-10-24T09:35:07.303 に答える