マクロについて、質問があります。初めて作りました。
ステップインも実行も問題なく出来るが、使っているうちにデバックエラーが頻発するようになる。デバックエラーで確認するとInsertの行で止まっている。
デバックを終了すると固まってしまい、タスクマネージャーでタスク終了するしかなくなってしまう。
デバック終了後時々、考え中で点滅しながらずっと考え中のままになってしまう時がある。
構文がまちがっているのでしょうか。20個程度のマクロ、条件付き書式・関数を多用している表の中に組み込んでいるマクロなので、パソコンの処理能力とか重いとかそういうことでしょうか。
どうしてこうなるのかさっぱりわかりません。
構文を記載いたします。どなたかアドバイスをお願いいたします。
「アクティブセルの行をコピーして下の行に挿入し、不必要なところを削除する。」
Sub CommandButton1_Click()
Dim rowno As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
rowno = ActiveCell.Row
Rows(rowno).EntireRow.Copy
Rows(rowno + 1).Insert
Rows(rowno + 1).Columns("I:O").ClearContents
Rows(rowno + 1).Columns("I").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
私も少し考えてみました。
#1様の
Application.CutCopyMode = False を追記する。
は入れてみましたね。
まあ、私は、ActiveX コントロールには懲りていますから、使いません。
なお、ActiveX コントロールを起動中は割り込みが効かないはずですから、イベントではあっても、イベントの再帰の恐れはないはずです。
とはいうものの「20個程度のマクロ、条件付き書式・関数を多用」では、どこが原因とか、手元においてしばらく使ってみないとなんとも言えないと思うのです。
.Cellsの前の「.(ピリオド)」が抜けるとあらぬところを指しますからご注意を。
'//
Sub CommandButton1_Click()
Application.Calculation = xlCalculationManual
With ActiveCell.EntireRow
.Copy
.Offset(1).Insert
.Cells(1, "I").Resize(, 8).ClearContents
.Cells(1, 8).Select
Application.CutCopyMode = False
End With
Application.Calculation = xlCalculationAutomatic
End Sub
No.3
- 回答日時:
Private Sub CommandButton1_Click()
CommandButton1.Enabled = False
ActiveSheet.Activate
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
kkcs = Selection(1).Row + 1
kkie = Selection(Selection.Count).Row + 1
Cells.Select
ActiveSheet.Rows(kkcs).Select
Rows(kkcs - 1).EntireRow.Copy
Rows(kkcs & ":" & kkie).Insert Shift:=xlDown
Rows(kkcs & ":" & kkie).Columns("I:O").ClearContents
CommandButton1.Top = Rows(kkcs - 1).Columns("I").Top
Rows(kkcs).Columns("I").Select
Rows(kkcs + 1).Columns("I").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
CommandButton1.Enabled = True
End Sub
こんなのではどうでしょうか。
ただし
「アクティブセルの行をコピーして下の行に挿入し、不必要なところを削除する」
ではなくて、
「選択していた範囲の最上位の行をコピーして、選択していた範囲のすべての行に貼付け、選択していた範囲の2行目以降はその下に移動させる。選択していた範囲のすべての行に貼付けたところは、"I:O"列はデータの値を消す」
コマンドボタンを押す前に選択していたのが5行なら、最初の1行目のあとに5行増やしてしまいます。
コマンドボタンを押す前に選択していたのが1行なら、最初の1行目のあとに1行増やします。
目的がわからないのですが、「使っているうちにデバックエラーが頻発する」のなら、
操作回数を減らしたら、エラーが減るのではないかと思ったからです。
Cells.Select
ActiveSheet.Rows(kkcs).Select
これは何の意味もない無駄な操作に思えるのですが、選択を変えると、もしかすると、エラーが起きにくくなるのではないかと、適当にやったものです。
CommandButton1.Enabled = False
これも、エラーで途中で止まるとやや困るコードですが、まだマクロ実行中にコマンドボタンをクリックして、それがおかしなエラーの原因になるのことは、、、と思って書き加えました。
最後に、マクロ実行が終わるときに、
CommandButton1.Enabled = True
で、正常に戻し、コマンドボタンをクリックできるようにしています。
CommandButton1.Top = Rows(kkcs - 1).Columns("I").Top
Rows(kkcs).Columns("I").Select
Rows(kkcs + 1).Columns("I").Select
これも余計なことですが、次々と行を増やしていくと、コマンドボタンの位置が前のママだと使いにくかったので、入力待ちの行の付近に移動させました。
一応エラーは私の試した範囲では出ませんでしたが、元の状態だと、十数回繰り返すと、実行時オートメーションエラーがでて、その後、どうにもならない状態になって、確かに困りました。 実行時オートメーションエラーがなんででるのか、どうすれば対処できるのかわからなかったので、ガチャガチャ余計なコードを入れてみたら、エラーの出現は少なくはなっているように思います。 ただ、本当に対策になっているのかは、わかりません。
御回答頂きありがとうございます。
動作確認いたしました。元の内容よりも進化していてとても満足しています。ありがとうございます。
エラーの原因が分からないのはもやもやしますが、yoreyore様の入れて下さった内容でしばらく使ってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) エクセル VBA実行中のApplication.ScreenUpdatingについて 3 2023/07/13 21:06
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/04 10:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゼロからのOS自作入門について
-
VBA オートメーションエラー(...
-
マクロが急に動かなくなった
-
VBA+VBSによる別インスタンスB...
-
QuarkXpressファイルが開けない
-
イベントプロパティに指定した...
-
Workbook_openでマクロが実行さ...
-
stop:0x00000124
-
ステートメントの末尾が不正です
-
実行時エラー 13 型が一致...
-
連絡先をあいうえお順にするに...
-
ワードかエクセルで、KOKU...
-
エクセル宛名ラベルが重複する
-
インデックスに印刷する方法
-
ラベルの差込印刷で2ページ目以...
-
一点一葉とはどんな意味ですか?
-
Wordで作った宛名ラベルを印刷...
-
DVDに紙製のラベルを貼りたいの...
-
ワードの差し込み印刷で,ペー...
-
ワード差し込み印刷:作成した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA+VBSによる別インスタンスB...
-
Excel2019 非表示モジュール内...
-
ステートメントの末尾が不正です
-
Linux再起動後のエラーメッセー...
-
ゼロからのOS自作入門について
-
"echo off"の動きをLinuxのシェ...
-
イベントプロパティに指定した...
-
VBA オートメーションエラー(...
-
Apache2.4の起動でエラー
-
エクセルに埋め込んだPDFの実行...
-
[ マクロ ] エラーになったり...
-
「パラメータが無効のため、処...
-
Workbook_openでマクロが実行さ...
-
PCのシャットダウン時の警告...
-
UNIXデータ展開時のエラーメッ...
-
ペイントで取り込んだ画像のサ...
-
LinuxのFedora31のdnfdragoraに...
-
遠隔地にあるパソコンのオフィ...
-
UNIX(Solaris)でのtarファイル...
-
エラーログの意味ご存知でした...
おすすめ情報