Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9350 / 13644 ツリー ←次へ | 前へ→

【27862】教えてください! クロリン 05/8/22(月) 16:11 質問[未読]
【27863】Re:教えてください! ちくたく 05/8/22(月) 16:21 回答[未読]
【27864】Re:教えてください! クロリン 05/8/22(月) 17:05 お礼[未読]
【27867】Re:教えてください! ちくたく 05/8/22(月) 17:35 回答[未読]
【27870】Re:教えてください! クロリン 05/8/22(月) 17:56 お礼[未読]
【27868】ごめんなさい ちくたく 05/8/22(月) 17:44 回答[未読]

【27862】教えてください!
質問  クロリン  - 05/8/22(月) 16:11 -

引用なし
パスワード
   質問です。マクロ実行中に
『実行時エラー'91'
オブジェクト変数またはWithブロック変数が設定されていません。』
と出てしまうのですが、このエラーを無視して例えばMsgBoxに動作が移るなどの
良い方法はありませんでしょうか?

【27863】Re:教えてください!
回答  ちくたく  - 05/8/22(月) 16:21 -

引用なし
パスワード
   「VBA エラー処理」などでGoogle検索しましょう。

コードが止まっている処理の前に、
On Erro GoTo Err1などと書き、
End Sub の前にExit Subと書き、
Exit SubとEnd Subの間に、
Err1:と書いて、
MsgBox "エラーです"

みたいなのがひっかかってくると思いますよ。

【27864】Re:教えてください!
お礼  クロリン  - 05/8/22(月) 17:05 -

引用なし
パスワード
   ▼ちくたく さん:
返信ありがとうございます。
早速試してみたのですが、うまくいきません。。。(初心者なものでご勘弁を!)
Do Loop作業をしていて検索してヒットする間はマクロが動くのですが、該当するデータがなくなった時に先程のエラーが出てしまうのです。
下記はLoop記入の前に入力すればいいのかそれとも??
数パターン試してみたのですが、どこの時点で入力したらいいのか分かりません。
>コードが止まっている処理の前に、
ってどこですか?

一応、今作成しているのを明記したので良かったら教えてください。

Sub 2.の場合()

  Workbooks("T_月次細分別マスタ.xls").Worksheets("2.").Activate

  Dim y As Integer
  Dim x As Integer
  Dim z As Integer
  
  Do
  
  Columns("cw:cw").Select
  
  y = Selection.Find(what:="2", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False).Activate
  
  ActiveCell.Offset(2, 0).Select
  
  Selection.EntireRow.Insert
  ActiveCell.Offset(0, -38).Select
  
  Selection.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
  
  Selection.Copy
   
  For x = 1 To 11
   
  ActiveCell.Offset(0, 1).Select
  ActiveCell.PasteSpecial

  Next x
  
  Range(Selection, Selection.End(xlToLeft)).Select
  Application.CutCopyMode = False
  Selection.Copy
  ActiveCell.Offset(-2, 0).Select
  
  Selection.PasteSpecial Paste:=xlPasteValues
  
  ActiveCell.Offset(1, 0).Select
  
  For z = 1 To 2
  Selection.EntireRow.Delete
  Next z
  
  ActiveCell.Offset(-1, 0).Select
  ActiveCell.Offset(0, 38).Select
  ActiveCell.ClearContents

  Loop
  
End Sub

【27867】Re:教えてください!
回答  ちくたく  - 05/8/22(月) 17:35 -

引用なし
パスワード
   エラー処理というより、コードが間違いでした。
エラー処理で無限ループを抜けてます。
マクロの目的がわかりませんので、
正しいコードに直ってるかどうかの保証はありませんよ。

Sub つぎの場合()

  Workbooks("T_月次細分別マスタ.xls").Worksheets("2.").Activate

  Dim y As Range
  Dim x As Integer
  Dim z As Integer
 
  Do
 
  Columns("cw:cw").Select
 
  Set y = Selection.Find _
  (what:="2", After:=ActiveCell, LookIn:=xlFormulas, _
  LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
  MatchCase:=False, MatchByte:=False)
  
  On Error GoTo Err1:
  y.Activate
 
  ActiveCell.Offset(2, 0).Select
 
  Selection.EntireRow.Insert
  ActiveCell.Offset(0, -38).Select
 
  Selection.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"
 
  Selection.Copy
  
  For x = 1 To 11
  
  ActiveCell.Offset(0, 1).Select
  ActiveCell.PasteSpecial

  Next x
 
  Range(Selection, Selection.End(xlToLeft)).Select
  Application.CutCopyMode = False
  Selection.Copy
  ActiveCell.Offset(-2, 0).Select
 
  Selection.PasteSpecial Paste:=xlPasteValues
 
  ActiveCell.Offset(1, 0).Select
 
  For z = 1 To 2
  Selection.EntireRow.Delete
  Next z
 
  ActiveCell.Offset(-1, 0).Select
  ActiveCell.Offset(0, 38).Select
  ActiveCell.ClearContents

  Loop
  
Err1:
Exit Sub
End Sub

【27868】ごめんなさい
回答  ちくたく  - 05/8/22(月) 17:44 -

引用なし
パスワード
   コードは間違っていませんでした。
私の勘違いです。
y = Selection.
の前に、
On Error GoTo Err1:
とかして、

On Error GoTo Err1:
y = Selection.~~~

みたいな感じにして、


End Subのところを、

Err1:
MsgBox "表示したい文字列"
Exit Sub
End Sub

みたいにしてください。

【27870】Re:教えてください!
お礼  クロリン  - 05/8/22(月) 17:56 -

引用なし
パスワード
   完璧です!
ありがとうございました。
独学なので自己流になってしまうので、まだまだ学ばねば!
良かったら勉強方法とか教えてください。

9350 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free