Excel VBA質問箱 IV

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

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


8379 / 13646 ツリー ←次へ | 前へ→

【33622】フォームのチェックボックスなどの情報を一時的に保存 サザエ 06/1/16(月) 23:19 発言[未読]
【33632】Re:フォームのチェックボックスなどの情報... Jaka 06/1/17(火) 9:25 回答[未読]
【33670】Re:フォームのチェックボックスなどの情報... サザエ 06/1/17(火) 21:08 質問[未読]
【33673】Re:フォームのチェックボックスなどの情報... サザエ 06/1/17(火) 21:33 回答[未読]

【33622】フォームのチェックボックスなどの情報を...
発言  サザエ  - 06/1/16(月) 23:19 -

引用なし
パスワード
   フォームのチェックボックスなどの情報を一時的に保存をするためにPublic変数に
保存しようと考えたのですがうまくいきません。どうか、お力添えを
とりあえず自分のやったものをのせます。

Frame1のなかにFrame2があるのですが、このFrame2を消すとうまくいきます。
Frame2は必要だしFrame2の中のOputionButtonの情報も一緒に保存したいのですが。


(モジュール1)
public HenInputControls(50)
public HenControls


(フォーム1)
Private Sub UserForm_Activate()
  Dim i As Byte
  i = 0
  If HenInputControls(0) <> "" Then
    For Each HenControls In Frame1.Controls
      HenControls.Value = HenInputControls(i)  
      i = i + 1
    Next
  End If  
End Sub

Private Sub CommandButton4_Click()(フォーム1上のコマンドボタン)情報保存
  Dim i As Byte
  i = 0
  For Each HenControls In Frame1.Controls
    HenInputControls(i) = HenControls.value
    i = i + 1
  Next
End Sub



【33632】Re:フォームのチェックボックスなどの情...
回答  Jaka  - 06/1/17(火) 9:25 -

引用なし
パスワード
   フォームの履歴ですよね?
前に書いてみた物ですが...。
シート名に「フォーム履歴」と名づけた物を用意してください。
(非表示にした方が何となく良いかも。)
意味が違ったらすみません。

全部フォームモジュール。

Private Sub UserForm_Initialize()
Dim Cel As Range

'Me.ComboBox1.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
'Me.ListBox1.List = Array("AA", "BB", "CC", "DD", "EE", "FF")

With ThisWorkbook.Sheets("フォーム履歴")
  For Each Cel In .Range("A1", .Range("B65536").End(xlUp))
    If Cel.Offset(, 2).Value <> "" Then
     With Me.Controls(Cel.Offset(, 1).Value)
       If Cel.Value = "ComboBox" Or _
         Cel.Value = "ListBox" Then
         .ListIndex = Cel.Offset(, 2).Value
       ElseIf Cel.Value = "CheckBox" Or _
           Cel.Value = "OptionButton" Then
         .Value = Cel.Offset(, 2).Value
       ElseIf Cel.Value = "TextBox" Or _
           Cel.Value = "MultiPage" Then
         .Value = Cel.Offset(, 2).Value
       End If
     End With
    End If
  Next
End With

'無駄な部分もあるけど...。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Dim Pt As Control, i As Long
  With ThisWorkbook.Sheets("フォーム履歴")
    For Each Pt In Me.Controls
      i = i + 1
      If .Cells(i, 1).Value <> TypeName(Pt) Then
        .Cells(i, 1).Value = TypeName(Pt)
      End If
      If .Cells(i, 2).Value <> Pt.Name Then
        .Cells(i, 2).Value = Pt.Name
      End If
      If TypeName(Pt) = "ComboBox" Or _
        TypeName(Pt) = "ListBox" Then
        If .Cells(i, 3).Value <> Pt.ListIndex Then
         .Cells(i, 3).Value = Pt.ListIndex
        End If
      ElseIf TypeName(Pt) = "CheckBox" Or _
          TypeName(Pt) = "OptionButton" Then
        If .Cells(i, 3).Value <> Pt.Value Then
         .Cells(i, 3).Value = Pt.Value
        End If
      ElseIf TypeName(Pt) = "TextBox" Or _
          TypeName(Pt) = "MultiPage" Then
        If .Cells(i, 3).Value <> Pt.Value Then
         .Cells(i, 3).Value = Pt.Value
        End If
      End If
    Next
    '.Cells(i + 2, 2).Value = Me.ActiveControl.Name
  End With
End Sub

【33670】Re:フォームのチェックボックスなどの情...
質問  サザエ  - 06/1/17(火) 21:08 -

引用なし
パスワード
   Jaka さんへ
JAKAさんの様に
>Private Sub UserForm_Initialize()
>Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
の時なんですけど、
JAKAさんの回答のプログラムは、ぱっと見、シートにコントロール
の情報を保存しておく方法なのでしょうか。(何も考えずに単純に、コピーしてみたらエラーになりました)
僕の場合ブックが開いている間のみ情報が残ればよいので配列変数に残したいのですが、フレームの中にフレームがあるためControls.valueだとフレームに
valueプロパティが無いためかエラーになります。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
(フォーム1上のコマンドボタン)情報保存
  Dim i As Byte
  i = 0
  For Each HenControls In Frame1.Controls
    If HenControls Is Not Frame2 then
      HenInputControls(i) = HenControls.value
      i = i + 1
    End If
  Next
End Sub
として配列変数に情報を記録したいのですが、
  If HenControls Is Frame2 Then というやり方は出来ても
  If HenControls Is Not Frame2 Then だとエラー(オブジェクトが必要です)
となるので Is Not というやり方が出来ません。
Is Not がなぜ駄目なのか、または Is Not に変わるやり方があれば
教えてください。

【33673】Re:フォームのチェックボックスなどの情...
回答  サザエ  - 06/1/17(火) 21:33 -

引用なし
パスワード
   自分で解決できました。

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