Excel VBA質問箱 IV

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

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


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

【43599】エラーについて なぞなぞ 06/10/19(木) 21:55 質問[未読]
【43600】Re:エラーについて neptune 06/10/19(木) 22:21 回答[未読]
【43601】Re:エラーについて ponpon 06/10/19(木) 22:53 発言[未読]
【43602】Re:エラーについて かみちゃん 06/10/19(木) 23:00 発言[未読]
【43603】Re:エラーについて ponpon 06/10/19(木) 23:18 発言[未読]
【43626】Re:エラーについて Jaka 06/10/20(金) 9:46 発言[未読]
【43605】Re:エラーについて なぞなぞ 06/10/19(木) 23:36 発言[未読]
【43606】Re:エラーについて かみちゃん 06/10/19(木) 23:42 発言[未読]
【43608】解決しました なぞなぞ 06/10/19(木) 23:51 お礼[未読]
【43607】Re:エラーについて Blue 06/10/19(木) 23:46 発言[未読]
【43609】Re:エラーについて なぞなぞ 06/10/19(木) 23:54 お礼[未読]
【43610】Re:エラーについて Blue 06/10/19(木) 23:54 発言[未読]
【43611】Re:エラーについて なぞなぞ 06/10/19(木) 23:57 発言[未読]
【43612】Re:エラーについて Blue 06/10/20(金) 0:08 発言[未読]
【43613】Re:エラーについて なぞなぞ 06/10/20(金) 0:21 発言[未読]
【43631】Re:エラーについて neptune 06/10/20(金) 10:30 発言[未読]

【43599】エラーについて
質問  なぞなぞ  - 06/10/19(木) 21:55 -

引用なし
パスワード
   ユーザーフォームでの質問です。

フォーム上に、ラベルとテキストボックスをセットして、
値はシートから取得するといった作業を行っています。

オブジェクトの数などもしっかりチェックした上で

For i = 1 To 44
 Me("label" & i) = Format(Sheet5.Cells(24 + i, 3), "#,##0")
 Me("textbox" & i) = Format(Sheet5.Cells(24 + i, 6), "#,##0")
Next i

といったソースを書いています。
しかし、どういうわけか実行時エラーが出ます。
ヘルプも立ち上がりますが、中身が出てきません・・・

ちなみに、実行時エラー'-21470284809(80070057)'というエラーが出ます。
色々と調べているのですが、原因が判りません・・・

解決方法で何かアドバイス頂ければと思います・・・

【43600】Re:エラーについて
回答  neptune  - 06/10/19(木) 22:21 -

引用なし
パスワード
   ▼なぞなぞ さん:
>For i = 1 To 44
> Me("label" & i) = Format(Sheet5.Cells(24 + i, 3), "#,##0")
> Me("textbox" & i) = Format(Sheet5.Cells(24 + i, 6), "#,##0")
>Next i
>
Me.controls("label" & i).caption=・・・
のようになにも省略せずに書いてみましょう。

Me("label" & i)
では、VBAが何を見たらよいか判らず迷っているんじゃないでしょうか?

【43601】Re:エラーについて
発言  ponpon  - 06/10/19(木) 22:53 -

引用なし
パスワード
   ▼なぞなぞ さん:
neptuneさんとおなじで、
いろいろと省略しすぎのようですが・・・

>For i = 1 To 44
> Me("label" & i) = Format(Sheet5.Cells(24 + i, 3), "#,##0")
              ~~~~~~ ←転記ミスですか? 
> Me("textbox" & i) = Format(Sheet5.Cells(24 + i, 6), "#,##0")
               ~~~~~~←こんなのないと思います。
>Next i


For i = 1 To 44
 Me.Controls("Label" & i).Caption = Format(Sheets("Sheet5").Cells(24 + i, 3).Value, "#,##0")
 Me.Controls("TextBox" & i).Text = Format(Sheets("Sheet5").Cells(24 + i, 6).Value, "#,##0")
Next i

【43602】Re:エラーについて
発言  かみちゃん  - 06/10/19(木) 23:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>> Me("label" & i) = Format(Sheet5.Cells(24 + i, 3), "#,##0")
>              ~~~~~~ ←転記ミスですか? 
>> Me("textbox" & i) = Format(Sheet5.Cells(24 + i, 6), "#,##0")
>               ~~~~~~←こんなのないと思います。

Sheet5.Cells〜という記述自体は、ありだと思いますよ。
5番目のシートを適当な名前にしていただき、A1セルに何か入れておいて、
以下のコードを実行してみてください。
Sub Test()
 MsgBox Sheet5.Range("A1").Value
End Sub
ただし、5番目のシートがない場合は、「変数が定義されていません」というエラーになります。

【43603】Re:エラーについて
発言  ponpon  - 06/10/19(木) 23:18 -

引用なし
パスワード
   ▼かみちゃん さん:
、A1セルに何か入れておいて、
>以下のコードを実行してみてください。
>Sub Test()
> MsgBox Sheet5.Range("A1").Value
>End Sub

確認しました。
ありなんですね。オブジェクト名だったかな?
インデックスを使って、Sheets(5)するか、Nameを使ってSheets("Sheet5")と
するものだと思いこんでおりました。
ありがとうございました。でもあまり見ないですよね。

【43605】Re:エラーについて
発言  なぞなぞ  - 06/10/19(木) 23:36 -

引用なし
パスワード
   みなさんアドバイスありがとうございます!

> Me("label" & i) = Format(Sheet5.Cells(24 + i, 3), "#,##0")

この件ですが、他にも使ってる箇所があって
思い通りの動きをしてくれます。
もちろん省略し過ぎ?かなと思いますが、
色々試しているうちに、ここまでシンプルにできるんだ〜と思って
使ってます・・・

当初は、

・・・
num = sheet5.cells(24+i,3)
Me("label" & i) = Format(num, "#,##0")
・・・

という風にしてたんですが、別に変数に置き換えなくても
可能だということを理解しました。

ところで、本題のエラーですが、今色々試してますが
どうもうまく行きません・・・

そもそもこのエラーの意味が分からないのが痛いところです・・・

【43606】Re:エラーについて
発言  かみちゃん  - 06/10/19(木) 23:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ところで、本題のエラーですが、今色々試してますが
>どうもうまく行きません・・・

どのように試して、どのようなエラーになるのでしょうか?
[#43600]のコメントは、試されましたか?
本題のエラーは、[#43600]で解決できると思っています。

なお、Excelのバージョン(サービスリリースも含めて)を明記されるといいでしょう。

【43607】Re:エラーについて
発言  Blue  - 06/10/19(木) 23:46 -

引用なし
パスワード
   とりあえず、Debug.Print等を使ってどこまでうまく言っているのか特定してみてはどうでしょうか?

For i = 1 To 44
 Debug.Print "i= " & i
 Me.Controls("label" & i).Caption = Format(Sheet5.Cells(24 + i, 3).Value, "#,##0")
 Debug.Print "label : OK"
 Me.Controls("textbox" & i).Text = Format(Sheet5.Cells(24 + i, 6).Value, "#,##0")
 Debug.Print "textbox : OK"
Next i

>色々試しているうちに、ここまでシンプルにできるんだ〜と思って
>使ってます・・・
コードが短い≒いいプログラム
      ≒処理が速いプログラム
      ≒みやすいプログラム

ですので、注意してください。

【43608】解決しました
お礼  なぞなぞ  - 06/10/19(木) 23:51 -

引用なし
パスワード
   ▼かみちゃん

早い回答ありがとございます!
今、フォームを作り直して実行した結果、すんなり動きました(汗

原因は、曖昧なままになってしまいそうです・・・

>[#43600]のコメントは、試されましたか?
>本題のエラーは、[#43600]で解決できると思っています。

修正した後、↑を試してましたが、もちろん動きますね。。

イミディエイトウィンドウを使いながら一つずつ確認して
どうしてもあるループのところでエラーが出てしまってたので
じっくり研究してみようと思います。
(多分、すっごく単純なミスなのかもしれません・・・)

アドバイス下さった方、本当にありがとうございます。

初心忘れるべからずですね(笑

【43609】Re:エラーについて
お礼  なぞなぞ  - 06/10/19(木) 23:54 -

引用なし
パスワード
   ▼Blue さん:

書き込みしている間に、新たな視点でのアドバイスありがとうございます。

>とりあえず、Debug.Print等を使ってどこまでうまく言っているのか特定してみてはどうでしょうか?

Debug.printは、見たことあるけど今まで使ったことなかったので

>For i = 1 To 44
> Debug.Print "i= " & i
> Me.Controls("label" & i).Caption = Format(Sheet5.Cells(24 + i, 3).Value, "#,##0")
> Debug.Print "label : OK"
> Me.Controls("textbox" & i).Text = Format(Sheet5.Cells(24 + i, 6).Value, "#,##0")
> Debug.Print "textbox : OK"
>Next i

を参考に、これから学んで行きたいと思います。

>>色々試しているうちに、ここまでシンプルにできるんだ〜と思って
>>使ってます・・・
>コードが短い≒いいプログラム
>      ≒処理が速いプログラム
>      ≒みやすいプログラム
>ですので、注意してください。

≒重大なミスを犯す可能性がある

ですね。。了解です。
貴重なアドバイスありがとうございます。

【43610】Re:エラーについて
発言  Blue  - 06/10/19(木) 23:54 -

引用なし
パスワード
   >コードが短い≒いいプログラム
>      ≒処理が速いプログラム
>      ≒みやすいプログラム
>
>ですので、注意してください。
なんか、ぜんぜんまちがっていることかいていた。

というか、≒と≠使い間違えてた orz


λ....

【43611】Re:エラーについて
発言  なぞなぞ  - 06/10/19(木) 23:57 -

引用なし
パスワード
   >というか、≒と≠使い間違えてた orz

だろうと思いました(笑
見やすく書こうと思いつつ、後で分らなくなってしまっては
意味がありませんからね(笑

【43612】Re:エラーについて
発言  Blue  - 06/10/20(金) 0:08 -

引用なし
パスワード
   連投だけどまじめに考えてみる。

1) 短いコードは処理が速いのか?

  ロジックにもよるが、速くなるものもあれば逆に遅くなるものもある。

2) 短いコードは見やすいのか?

  どこまで短くするかによる。
  RangeオブジェクトのValueプロパティのように省略するとExcelでそのときの処理に適した解釈(でいいんだけ?)
  されるようなものは、なるべく省略すべきではない。

3) 短いコードはいいプログラムなのか?

  いいプログラムの定義が個人によっては違うと思うので一概にこうだとは断定できないが、
  私の経験上、いいプログラムではないほうが多いようです。


意見、反論があるようでしたらどんどん突っ込んでください。

【43613】Re:エラーについて
発言  なぞなぞ  - 06/10/20(金) 0:21 -

引用なし
パスワード
   ▼Blue さん:

>3) 短いコードはいいプログラムなのか?
>  私の経験上、いいプログラムではないほうが多いようです。

スマートなプログラム?という表現が適切な分りませんが
誰が見ても分るプログラムっていうのは難しそうですね・・・

当方、職業は設計屋で普段はCADばかりいじってて、
ちょっとした計算する際にマクロを使ってみよう!という域でしか
使ってないのが現実です。

なので、誰が見ても分るプルグラムを書こうにも
なかなかそこまでの知識がなく歯がゆいです・・・

エラーを回避させるためのコツ?みたいものってあるんでしょうか?

できたらヒントでもアドバイスでも頂ければ今後に役立てたいと思います。

お願いします。
ちなみに、今日はもう就寝したいと思いますので
レスは明日になると思いますのでよろしお願いします。

【43626】Re:エラーについて
発言  Jaka  - 06/10/20(金) 9:46 -

引用なし
パスワード
   ▼ponpon さん:
>>Sub Test()
>> MsgBox Sheet5.Range("A1").Value
>>End Sub
VBAプロジェクトに表示されるコードネームですね。
なんか使い方を完全に把握しないと不具合がでるらしいので、私はコードネームで直に指定したことはないです。
前にコードネームで指定すれば、シート名を変えられても何とか動くみたいですが、どんな不具合がでるのか解りません。てな事を書いちゃったけど....。

【43631】Re:エラーについて
発言  neptune  - 06/10/20(金) 10:30 -

引用なし
パスワード
   ▼なぞなぞ さん:
多くの方のアドバイスを頂けてよかったですね。

私なりに思いつくこと。
・Blueさんが書かれているような事。
>なので、誰が見ても分るプルグラムを書こうにも
>なかなかそこまでの知識がなく歯がゆいです・・・
・1年後の自分が見てもすぐわかるようなプログラム
 1年前の自分の書いたプログラムを見て見ましょう。
 必要なことが判ってくると思います。

>エラーを回避させるためのコツ?みたいものってあるんでしょうか?
・処理するデータのチェック。変数のデータも含むデータの整合性。
・on error surume nextは安易に使わない。
・万一エラーが発生する可能性があるところ、
 困る所はエラー処理はして置く。(エラーでのストップは防ぐ)
・Helpをよく読んで、間違った使い方をしない

・・・これぐらいしか思い浮かばない。

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