Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
時々 実行時エラー9となる。
投稿日時: 23/04/08 14:57:06
投稿者: wing55

お世話になります。
 
下のコードで、データをコピーして、テキストボックスに貼り付けをし、実行すると、実行時エラーとなる場合があります。
テキストボックスの設定範囲とかに、問題があるのでしょうか?
すみません。アドバイスをお願い致します。
 
 
 
Private Sub CommandButton1_Click() '入力
 
    Dim n&, i&
    With Sheets("住所録")
      n = .Range("b" & .Rows.Count).End(xlUp).Row + 1
      For i = 1 To 7
         .Cells(n, i + 1).Value = Controls("textbox" & i).Value
      Next
    End With
 
End Sub

回答
投稿日時: 23/04/08 16:27:56
投稿者: WinArrow

情報が不足しています。
  
(1)コードを記述しているモジュールはどこですか?
(2)実行時エラーは、どこで発生していますか?
(3)実行時エラーのコードとエラーメッセージを掲示してください。
  
※ステップ実行は、できますか?
 ステ ップ実行では、変数の値を見ることができます。
 ステップ実行で原因が分かる場合があります。
 試してみて、その結果も掲示してみましょう。

回答
投稿日時: 23/04/09 10:47:08
投稿者: WinArrow

質問タイトルに「実行時エラー9」って書いてありましたね・・・
 
失礼しました。
 
このエラーは、
「インデックスが有効範囲にありません」
というエラーです。
 
今回のコードでいうと、
@

引用:
.Range("b" & .Rows.Count)

の「"b" & .Rows.Count」がインデクスに相当します。

引用:
.Cells(n, i + 1)

の「n」と「i + 1」がインデックスに相当します。
B
引用:
Controls("textbox" & i).Value.Value

の「"textbox" & i」がインデックスに相当します。
 
>時々
と説明されているので、
@がエラーにはならないでしょう。
➁の「n」と「i」(Bにも影響)の値を確認する必要があります。
 
ステップ実行で確認することをお勧めします。
 

回答
投稿日時: 23/04/09 12:18:00
投稿者: simple

このほか、そのエラーであれば、シート名が違うというケースが可能性として高いでしょうか。
実際にないテキストボックスを指定した場合は別のエラーが出るようです。
 
現時点で再現できる材料がないのであれば、様子を見て、
エラーになったときに徹底的に調べる方針がよいと思います。
現時点で記憶に頼ってあれこれ想像を巡らせても益は少ないでしょう。
(確実なことはわかりません)
 
機械というものは気まぐれでエラーになることはありません。
なにかしらのソフト自体の不具合や、ファイルの物理的な損傷(そうしたレアケースでは、
逆にユーザー側でできることはありません)を別とすれば、必ず、何らかの原因があるはずです。
大抵はユーザーが想定していなかったデータに原因があることが多いでしょう。
そのときにコードが前提としていることが正しいかどうかを調べれば、
普通は簡単に原因が判明するはずです。
 
少なくとも、提示されたコードに致命的なコード作成上の問題はないように思いますので、
そういう方針で、時期を待つのがよいと思います。

投稿日時: 23/04/09 12:33:21
投稿者: wing55

WinArrowさん、ありがとうございます。
 
時間がかかりましたが、以下のようになります。
 
(1)コードを記述しているモジュールはどこですか?
 ・UserForm1になります。
 
(2)実行時エラーは、どこで発生していますか?
 ・住所録ファイルを開いて、別のデータファイルを開き、住所録ファイルのUserFormを開き、
  別のデータファイルのデータをコピーして、テキストボックスに貼り付けをし、CommandButton1_Clickし、
  入力時にエラーがでます。
 ・テキストボックスに直接入力し、CommandButton1_Clickし、入力時にはエラーは発生しないようです。
 
(3)実行時エラーのコードとエラーメッセージを掲示してください。
・実行時エラー”9” インデックスが有効範囲にありません。
  With Sheets("住所録")の部分が黄色になっています。
 
以上が検証結果になります。
ご確認お願い致します。

回答
投稿日時: 23/04/09 12:50:41
投稿者: simple

アクティブなワークブックが、"住所録"シートがあるブックとは別のものになっているのでは?
シートから始めずに、ブックから指定するようにすればよいと思います。

回答
投稿日時: 23/04/09 13:01:19
投稿者: simple

複数のブックがあるという前提が書かれていれば、
コード問題なしと思われるとは言わなかったですね(言い訳)。
WinArrowさんのおかげですね。

回答
投稿日時: 23/04/09 13:32:31
投稿者: WinArrow

アドバイス
 
1つのマクロブックで、複数のブックを参照する場合は、
必ず、ブックとシートで修飾するようにしましょう。
ActiveWorkbook

Activeworksheet
は、NGと考えた方がよいでしょう。
 
質問時、問題のでたコードだけ掲示するのではなく、
それに至るまでの過程なども簡潔に説明したほうが、
早い解決につながります。
長々と書かれても、読んでもらえなければ、無駄な努力とあります。
 
要は、回答者側で再現できるだけの材料がないと、
回答も貰えないことになるということです。
ステップ実行を面倒だと思わずに、活用しましょう。

投稿日時: 23/04/09 13:52:33
投稿者: wing55

WinArrowさん、simpleさん、誠にありがとうございます。
 
ThisWorkbook.Worksheets("住所録") としたところ、エラー回避出来ました。
ありがとうございます。
 
ステップ実行とは、コードの途中に、ブレイクポイントを置いて、
ローカルウインドウで、変数の値を見るという事で、良かったでしょうか?

回答
投稿日時: 23/04/09 14:47:20
投稿者: WinArrow

wing55 さんの引用:

ステップ実行とは、コードの途中に、ブレイクポイントを置いて、
ローカルウインドウで、変数の値を見るという事で、良かったでしょうか?

 
半分かな?
 
ステップ実行を直訳すると
コードを1行ずつ実行することです。
方法は、「F8」キーを使います。
 
目的は、変数の値を確認して
勿論「値」が意図した値か?
ですが、
意図した流れになっているか?
もじゅうようなことです。
 
VBE画面の「デバッグ」タブの中に、デブッグを効率定に進めるコマンドがります。
 
「ステップ実行」でWEB検索してみてください。
 

投稿日時: 23/04/09 15:32:36
投稿者: wing55

WinArrowさん、ご教授ありがとうございました。
 
再度、よく確認し、勉強したいと考えます。
ありがとうございました。