Excel VBA質問箱 IV

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

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


5909 / 13645 ツリー ←次へ | 前へ→

【48110】ユーザーフォームを使った検定ソフト 超初心者 07/4/4(水) 0:59 質問[未読]
【48115】Re:ユーザーフォームを使った検定ソフト りん 07/4/4(水) 8:36 発言[未読]
【48136】Re:ユーザーフォームを使った検定ソフト 超初心者 07/4/5(木) 1:25 お礼[未読]
【48217】Re:ユーザーフォームを使った検定ソフト 超初心者 07/4/9(月) 0:56 質問[未読]
【48218】Re:ユーザーフォームを使った検定ソフト りん 07/4/9(月) 1:05 発言[未読]
【48265】Re:ユーザーフォームを使った検定ソフト 超初心者 07/4/10(火) 17:11 お礼[未読]

【48110】ユーザーフォームを使った検定ソフト
質問  超初心者  - 07/4/4(水) 0:59 -

引用なし
パスワード
   Excelのウィンドウを非表示でユーザーフォームだけを表示した状態で一種の検定ソフトを無謀にも作成している初心者です。

ウィンドウの非表示は

Private Sub Workbook_Open()
  OLDSTATE = Application.WindowState
  Application.WindowState = xlMinimized
  AppActivate "Microsoft Excel"
  UserForm1.Show
End Sub

といった方法を利用し、設問は

If OptionButton12.Value = True Then
     Range("b9").Value = "0"
   ElseIf OptionButton13.Value = True Then
     Range("b9").Value = "1"
   ElseIf OptionButton14.Value = True Then
     Range("b9").Value = "10"
   Else
     OptionButton12.Value = False
     OptionButton13.Value = False
     OptionButton14.Value = False
    
   End If

のようなものを10問づつ3つ程度(total30問)用意して、最後にその合計点によって判定を表示したいと考えています。
(0〜20点は”A”、21〜40点は”B”...というような)

都合6枚程度UserFormを作成し、UserForm1からUserForm2を開くのにUserForm1にボタンを作成し

Private Sub commandbutton2_click()
    UserForm2.Show
End Sub

みたいな感じで一応動いています。(まだ作成途上ですが)

そこで質問なのですが

1.そもそもこのような作製法はいかがなものか?
(邪道なのか、もしそうならスマートな作成法のヒントや参考になりそうなサイトの情報等も教えていただけると幸いです)

2.UserForm1からUserForm2を開き、またUserForm1に戻る方法は?
(実行するとError400というのが出てくるのですが勉強方法が悪いのでイマイチ意味が理解できなく、本を見ても...トホホ!)

いまいち説明がうまくできなくて皆様にご迷惑をお掛けすると思いますが、恥を忍んで是非お叱りも含めたご一報をいただければ幸いです。

【48115】Re:ユーザーフォームを使った検定ソフト
発言  りん E-MAIL  - 07/4/4(水) 8:36 -

引用なし
パスワード
   超初心者 さん、おはようございます。

>都合6枚程度UserFormを作成し、UserForm1からUserForm2を開くのにUserForm1にボタンを作成し

6枚もフォームを作成しなくても、それぞれに載せる予定のコントロールをフレームに載せて、表示を切り替える方が移動が簡単ではないかと。

たとえばこんな方法です。

準備
UserForm1にFrame1〜Frame6およびCommandButton1を配置(親がUserFormになるように)。

以下を全部UserFormに記述
'ココから================================
Dim II%
'
Private Sub CommandButton1_Click()
  Dim JJ%
  JJ% = II%
  II% = (JJ% Mod 6) + 1
  Me.Controls("Frame" & II%).Visible = True
  Me.Controls("Frame" & JJ%).Visible = False
End Sub
Private Sub UserForm_Initialize()
  For II% = 1 To 6
   With Me.Controls("Frame" & II%)
     .Left = Me.Left + 1 '位置調整(お好みで)
     .Top = Me.Top + 1  '位置調整(お好みで)
     .SpecialEffect=fmSpecialEffectFlat
     If II% = 1 Then
      .Visible = True
     Else
      .Visible = False
     End If
   End With
  Next
  '
  II% = 1
End Sub
'ココまで================================

【48136】Re:ユーザーフォームを使った検定ソフト
お礼  超初心者 E-MAIL  - 07/4/5(木) 1:25 -

引用なし
パスワード
   超初心者です。
早速のレス、感謝感激です!(返事遅れて申し訳ありません!)

りん さん wrote:
>6枚もフォームを作成しなくても、それぞれに載せる予定のコントロールをフレームに載せて、表示を切り替える方が移動が簡単ではないかと。
>
>たとえばこんな方法です。

実際にご指導いただいたように作成すると...もうびっくりです!
本当にありがとうございました。

また壁にぶつかったらご相談させていただきたいと思いますので、皆様よろしくご指導お願いいたします。
(今のところずいぶん低い壁でお恥ずかしいのですが...)

それでは!

【48217】Re:ユーザーフォームを使った検定ソフト
質問  超初心者 E-MAIL  - 07/4/9(月) 0:56 -

引用なし
パスワード
   題名の件でご相談させていただいたものですが、新たに分からない点が浮上してご教授いただきたく再度投稿します。

りんさん wrote:
> 6枚もフォームを作成しなくても、それぞれに載せる予定のコントロールをフレームに載せて、表示を切り替える方が移動が簡単ではないかと。
> たとえばこんな方法です。
> 準備
> UserForm1にFrame1〜Frame6およびCommandButton1を配置(親がUserFormになるように)。
以下を全部UserFormに記述
'ココから================================
Dim II%
'
Private Sub CommandButton1_Click()
  Dim JJ%
  JJ% = II%
  II% = (JJ% Mod 6) + 1
  Me.Controls("Frame" & II%).Visible = True
  Me.Controls("Frame" & JJ%).Visible = False
End Sub
Private Sub UserForm_Initialize()
  For II% = 1 To 6
   With Me.Controls("Frame" & II%)
     .Left = Me.Left + 1 '位置調整(お好みで)
     .Top = Me.Top + 1  '位置調整(お好みで)
     .SpecialEffect=fmSpecialEffectFlat
     If II% = 1 Then
      .Visible = True
     Else
      .Visible = False
     End If
   End With
  Next
  '
  II% = 1
End Sub
'ココまで================================

【48115】にて上記のようにご教授いただきました。

当方で実際に制作してみるとフレームが6枚では足りないことに気がつき、都合12枚までフレームを増やす目的で上記コード中の”6”の部分を”12”と置き換えて新たに最初からユーザーフォームを作成したのですがうまく作動しません。
(コマンドボタンを押すと実行時エラーになり、デバッグを選択すると
”Me.Controls("Frame" & JJ%).Visible = False”
の部分がハイライトになっているのですが、理解できなくて...)

お願いばかりで恐縮ですがご教授いただけますよう再度お願いいたします。

【48218】Re:ユーザーフォームを使った検定ソフト
発言  りん E-MAIL  - 07/4/9(月) 1:05 -

引用なし
パスワード
   超初心者 さん、こんばんわ。

>当方で実際に制作してみるとフレームが6枚では足りないことに気がつき、都合12枚までフレームを増やす目的で上記コード中の”6”の部分を”12”と置き換えて新たに最初からユーザーフォームを作成したのですがうまく作動しません。

Private Sub UserForm_Click()
  For Each obj In Me.Controls
   MsgBox obj.Name, vbInformation, obj.Parent.Name & "上の"
  Next
End Sub
このコードを追加して、表示されたフォームをクリックしてみてください。
各FrameのParentがフォームになっていますか?

【48265】Re:ユーザーフォームを使った検定ソフト
お礼  超初心者  - 07/4/10(火) 17:11 -

引用なし
パスワード
   超初心者です。またまた早速の回答、誠にありがとうございます。

▼りん さん:
>Private Sub UserForm_Click()
>  For Each obj In Me.Controls
>   MsgBox obj.Name, vbInformation, obj.Parent.Name & "上の"
>  Next
>End Sub
>このコードを追加して、表示されたフォームをクリックしてみてください。
>各FrameのParentがフォームになっていますか?

実はこの件でアップしたあとに、最初から作り直したら上手く作動しました。
(検証もしないでカキコして申し訳ありません)
たぶん私がコピーとペーストを繰り返しているうちにFrameとFoamの関係が壊したのだと思います。

よって上記のご教授いただいたコードは試していないのですが、今後のためにキープさせていただきます。

当直の為、お礼が遅れて申し訳ありませんでした。
今後ともよろしくご指導のほどお願いいたします。

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