14

「A1」セルに値を書き込もうとしていますが、次のエラーが発生します。

アプリケーション定義またはオブジェクト定義のエラー「1004」

私はネット上で多くの解決策を試しましたが、どれも機能していません。私はExcel2007を使用しており、ファイルの拡張子は.xlsmです。

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

Sub varchanger()
On Error GoTo Whoa
Dim TxtRng  As Range

Worksheets("Game").Activate
ActiveSheet.Unprotect

Set TxtRng = ActiveWorkbook.Sheets("Game").Cells(1, 1)
TxtRng.Value = "SubTotal"

'Worksheets("Game").Range("A1") = "Asdf"

LetsContinue:
    Exit Sub
Whoa:
    MsgBox Err.number
    Resume LetsContinue
End Sub

編集:警告アイコンをクリックしてエラーが発生した後、[計算ステップを表示]を選択すると正しく機能します

4

4 に答える 4

16

シートプロテクションにつまずいたのではないかと思います。コードを少し合理化し、ワークブックとワークシートオブジェクトへの参照を明示的に設定しています。この例では、TxtRngオブジェクトを設定するときにブックとシートを明示的に参照しますが、シートの保護を解除するときは参照しません。

これを試して:

Sub varchanger()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim TxtRng  As Range

    Set wb = ActiveWorkbook
    Set ws = wb.Sheets("Sheet1")
    'or ws.Unprotect Password:="yourpass"
    ws.Unprotect

    Set TxtRng = ws.Range("A1")
    TxtRng.Value = "SubTotal"
    'http://stackoverflow.com/questions/8253776/worksheet-protection-set-using-ws-protect-but-doesnt-unprotect-using-the-menu
    ' or ws.Protect Password:="yourpass"
    ws.Protect

End Sub

ws.Unprotectコメントアウトしてサブを実行すると、実行時エラー1004が発生します(シートを保護し、範囲をロックしていると仮定します)。行のコメントを外すと、コードが正常に実行されます。

ノート:

  1. 範囲に書き込んだ後、シート保護をリセットしています。そもそもシートを保護しておけば、これをやりたいと思います。さらに処理した後で保護を再設定する場合は、その行を削除する必要があります。
  2. エラーハンドラを削除しました。Excelのエラーメッセージには、Err.numberよりもはるかに詳細な情報が表示されます。コードが機能し、必要なものを表示したら、元に戻すことができます。もちろん、Err.Descriptionも使用できます。
  3. 記法はCells(1, 1)非常に多くの悲しみを引き起こす可能性があります。使用には注意してください。Range("A1")人間が解析するのがはるかに簡単で、額を叩くミスを防ぐ傾向があります。
于 2012-07-20T12:08:24.283 に答える
1

今夜はクランベリーウォッカをいくつか食べたので、何かが足りないかもしれません...範囲を設定する必要がありますか?使用しない理由:

Activeworkbook.Sheets("Game").Range("A1").value = "Subtotal"

これも失敗しますか?

似たようなことを試したようです。

'Worksheets("Game").Range("A1") = "Asdf"

ただし、ワークシートはコレクションであるため、「ゲーム」を参照することはできません。代わりにSheetsオブジェクトを使用する必要があると思います。

于 2012-07-21T01:48:04.103 に答える
1

Range( "A1")= "Asdf"をRange( "A1")。value="Asdf"に置き換えます

于 2015-04-16T20:01:30.580 に答える
0

代わりにこれを試してください

Set TxtRng = ActiveWorkbook.Sheets("Game").Range("A1")

添加

たぶんファイルが壊れています-これは以前に何度か私に起こりました、そして唯一の解決策はすべてを新しいファイルにコピーすることです。

次のことを試してください。

  • 新しいxlsmファイルを保存し、「MyFullyQualified.xlsm」という名前を付けます
  • 保護されていないシートを追加し、それを「mySheet」と呼びます
  • モジュールをワークブックに追加し、次の手順を追加します

これは実行されますか?

 Sub varchanger()

 With Excel.Application
    .ScreenUpdating = True
    .Calculation = Excel.xlCalculationAutomatic
    .EnableEvents = True
 End With

 On Error GoTo Whoa:

    Dim myBook As Excel.Workbook
    Dim mySheet As Excel.Worksheet
    Dim Rng  As Excel.Range

    Set myBook = Excel.Workbooks("MyFullyQualified.xlsm")
    Set mySheet = myBook.Worksheets("mySheet")
    Set Rng = mySheet.Range("A1")

    'ActiveSheet.Unprotect


    Rng.Value = "SubTotal"

    Excel.Workbooks("MyFullyQualified.xlsm").Worksheets("mySheet").Range("A1").Value = "Asdf"

LetsContinue:
        Exit Sub
Whoa:
        MsgBox Err.Number
        GoTo LetsContinue

End Sub
于 2012-07-19T20:18:33.553 に答える