web-dev-qa-db-ja.com

Excelのセルに文字列を書き込む

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

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

私はネット上で多くのソリューションを試しましたが、どれも機能していません。 Excel 2007を使用していますが、ファイルの拡張子は.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

編集:警告アイコンをクリックしてエラーが表示された後、計算ステップの表示が適切に機能することを選択

9
knightrider

私はあなたがシートの保護につまずくかもしれないと思う。コードを少し合理化し、ワークブックおよびワークシートオブジェクトへの参照を明示的に設定しています。この例では、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")は、人間が解析するのがずっと簡単で、額を間違える間違いを防ぐ傾向があります。
14
Jon Crowell

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

1
T. I. Troll

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

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

これも失敗しますか?

同様のことを試したようです:

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

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

1
UberNubIsTrue

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

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

[〜#〜] addition [〜#〜]

ファイルが破損している可能性があります-これは以前にも何度か起こりましたが、唯一の解決策はすべてを新しいファイルにコピーすることです。

以下をお試しください:

  • 新しい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
0
whytheq