私はVBAが初めてで、基本的に最初のマクロを書こうとしています。これは、繰り返し値を省略して、あるワークブックから別のワークブックにエントリをコピーするためのものです。次のコードがあります。
Dim s As String
Do While IsEmpty(ActiveCell) = False
If ActiveCell.Value <> s Then
s = ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Windows("Main.xlsm").ActiveCell.Value = s
Windows("Main.xlsm").ActiveCell.Offset(1, 1).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
次の行で実行時エラー 1004 が発生します。
Windows("Main.xlsm").ActiveCell.Offset(1, 1).Select
これは、メソッド Select が正しく機能しなかったことを意味します。(「Main.xlsm」は開いていますが、アクティブではなく、セルが選択されています。) 同様の質問を検索したところ、シートを選択していないことが原因である可能性があることがわかりました。しかし、どういうわけかこの行は機能します:
Windows("Main.xlsm").ActiveCell.Value = s
そして、ワークブック「Main.xlsm」でセルが変更されたことがわかります。Windows("Main.xlsm").ActiveCell
したがって、 Range オブジェクトが作成されると仮定します。
では、なぜエラーが発生するのでしょうか。そして、これを書く正しい方法は何ですか?
また、コードを次のように変更してみました。
Windows("Main.xlsm").ActiveSheet.ActiveCell.Value = s
Windows("Main.xlsm").ActiveSheet.ActiveCell.Offset(1, 1).Select
「実行時エラー 438 オブジェクトはこのプロパティまたはメソッドをサポートしていません」。何故ですか?ここで何が間違っていますか?
そして、次のようにします。
Windows("Main.xlsm").Sheets("Name").ActiveCell.Value = s
Windows("Main.xlsm").Sheets("Name").ActiveCell.Offset(1, 1).Select
どちらも同じ結果になりました。そして、最後の2つが機能しない理由はまだわかりません。
これは私の最初の投稿です。私の編集やその他の何かが間違っている場合は、私を修正してください。ありがとう!