• ベストアンサー

エクセル リストボックスの複数選択

エクセル ActiveXコントロール のリストボックスで複数選択(fmMultiSelectMulti)ができますが、 エクセルを保存して再起動すると、前回選択した行は全てリセットされています。 エクセルを再起動しても選択部分が保持されるような設定はありますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

'ThisWorkbook に登録してください。 'Application.ScreenUpdating を入れたら、どうも誤動作するようです。 Private Sub Workbook_BeforeClose(Cancel As Boolean)  '閉じる時  Dim LCount As Long  Dim i As Long  Dim ret As Variant  On Error GoTo ErrHandler  With ThisWorkbook   With Worksheets("Sheet2").ListBox1    LCount = .ListCount    For i = 0 To LCount - 1     If .Selected(i) Then      ret = ret & "," & i     End If    Next i   End With   .CustomDocumentProperties("ListData").Value = Mid(ret, 2)  End With  Exit Sub ErrHandler:  With ActiveWorkbook.CustomDocumentProperties   .Add Name:="ListData", _   LinkToContent:=False, _   Type:=msoPropertyTypeString, _   Value:=0 '  End With  Resume Next End Sub Private Sub Workbook_Open()  '開くとき  Dim buf As Variant  Dim ar As Variant  Dim v As Variant  With ThisWorkbook   buf = .CustomDocumentProperties("ListData").Value   ar = Split(buf, ",")   .Worksheets("Sheet2").Select   With Worksheets("Sheet2").ListBox1    For Each v In ar     .Selected(v) = True    Next v   End With  End With End Sub

naolessie
質問者

お礼

で、で、、、出来ました! ありがとうございます。 以下の部分でエラーが出ていたので、この部分を削除しました。 ----------------------------------------------- ErrHandler:  With ActiveWorkbook.CustomDocumentProperties   .Add Name:="ListData", _   LinkToContent:=False, _   Type:=msoPropertyTypeString, _   Value:=0 '  End With ----------------------------------------------- また、"Sheet2"はないので"Sheet1"に書き換えました。 しかし難しいマクロですね。もっと簡単にできると思っていました(汗)。。。。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

シート名、Sheet1を使えなかったので、Sheet2 にしたので、こちらのミスですが、 ErrHandler:  With ActiveWorkbook.CustomDocumentProperties  ・  ・ --------------------------------- ここは、基本的にエラーが出ることはありえませんから、おそらく、VBEditor のオプションのエラーモードが、違っている可能性があります。後々、こまって現象がおきます。 VBE-->ツール-->オプション-->全般(Tab) エラートラップ  エラー処理対象がいのエラーで、中断 を選択されているか確認してください。 http://msdn.microsoft.com/ja-jp/library/cc344016.aspx 「エラー トラップ] セクションでは、デバッグ操作で行う作業に適した  オプションを選択してください。既定の設定は  [エラー処理対象外のエラーで中断] です。」

naolessie
質問者

お礼

ThisWorkbook の中にあった他のマクロが邪魔していたようです。 まっさらにしてから貼り付け直したら出来ました。 ありがとうございました。