dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
ユーザーフォームのlistviewについて質問です。
EXCLE:2013

データ表示にlistviewを使っているのですが
【その他のコントロール→Microsoft listview control】
使用するPCのエクセルにこれのチェックが入っていないと、ユーザーフォームを開いた際に項目名なし、またデータが散乱して表示されてしまいます。
違う支店でも同ブックを使っているため、私が毎回チェックを入れることもできず、上手く表示されなかったら電話で既存のlistviewを消す→チェックをいれてもらう→listviewを作成してもらうを繰り返してます。
その他のコントロールにlistview を自動で追加するマクロがあれば一番なんですが、
どうにか解決する方法はないでしょうか?
それともlistviewのように他のコントロールで表にすることはできますか?
LISTBOXを並べようかと思いましたが、横線が入っていないのでいまいち見にくいです。

Microsoft listview control チェック有
日時 運輸会社 担当者
3/2  ヤマト  佐藤
3/3  佐川   鈴木
3/5  佐川   岡島

Microsoft listview control チェックなし
3/2
   3/3
       3/5

A 回答 (2件)

こんにちは、#1です。


>既存のlistviewを消す→チェックをいれてもらう→listviewを作成してもらう
読み飛ばしていたかもですが、既存のlistviewを消す。削除しないとダメと言う事かな?

その他のコントロールは、ツールボックスを表示すると現れる参照だったと記憶しています。
なので、①VBEのツール ⇒参照設定 (通常ここのリストにない)⇒ 参照で#1に示したパスの ActiveX コントロール(.ocx) を参照させます。

既存のlistviewを消す必要が見えませんが、表示からツールボックスを表示してツールボックス上で右クリック 又はVBE ツール 参照設定からその他のコ・・で
リストに出ます。しかし、この参照はツールボックスコントロールなので、実行のみの場合は、①で良いです。
①を実施してもツールボックスにはlistviewパーツはなく、その他のコントロールも参照されません。

電話で対応するのは大変かと思います。
ファイルを再配布できるなら、ThisWorkbookモジュールに下記を導入すれば多分OKだと思います。
しかし、Officeの64bitバージョンは PtrSafe 属性などを使ってもListViewは、うまくいかないようです。
Workbook_Openに他の処理がすでにある場合は、下の方にうまく組み込んでください。

Private Sub Workbook_Open()
  On Error Resume Next
  For Each refObj In ThisWorkbook.VBProject.References
    If refObj.FullPath = "C:\WINDOWS\SysWOW64\MSCOMCTL.OCX" _
      Or refObj.FullPath = "C:\Windows\System32\MSCOMCTL.OCX" _
      Then Exit Sub '参照登録があれば、ここで抜ける
  Next
#If Win64 Then
  Const setRefFile As String = "C:\WINDOWS\SysWOW64\MSCOMCTL.OCX"
  ActiveWorkbook.VBProject.References.AddFromFile setRefFile
#Else
  Const setRefFile As String = "C:\Windows\System32\MSCOMCTL.OCX"
  ActiveWorkbook.VBProject.References.AddFromFile setRefFile
#End If
  MsgBox ("ListView 設定を実行しました。")  '必要が無ければ削除
End Sub

#1の配布形です。
検証:Windows10 64bit Office Home and Business Excel 2013 MSO,
Office Home and Business premium Excel 2016 MSO

しつこく、すみません。
    • good
    • 0
この回答へのお礼

ありがとう

すごく丁寧に教えていただいてありがとうございます。今日は対応出来ませんでしたが明日試してみます。

お礼日時:2019/12/12 20:15

いくつか確認してください。


①フォームモジュールに Option Explicitは使用されていますか?
②ListView設定時、通常、UserForm_Initialize内でOn Error Resume Nextなどエラースキップを使用してませんか?

参照設定がなく実行された場合、ListViewプロパティ設定時にエラーになるはずと考えました。
エラーが発生しているのに、値をセットしている為の不具合かと、、

>その他のコントロール→Microsoft listview control
ListView作成時には必要ですが、使う時は同じ参照元の
Microsoft Windows common controls (6.0)の参照設定で良いはずです。2013

VBAの実行で参照する場合は、OS環境によりますが、デフォルトなら下記になります。
出来れば、参照されているかを
For Each refObj In ThisWorkbook.VBProject.References
refObj.FullPath  とか refObj.Descriptionで確認して
参照されていなければ、設定するのが良いですがそれは、調べて作り込んでください。
そうすれば、配布ファイルのOpenなどに入れられますね。(このままいれてもよいですが、)

Sub Test_setRefFile()
On Error Resume Next  'すでに参照設定されている場合エラーが返されアラートが出るので抑制しています。Application.DisplayAlertsは効きません。
#If Win64 Then
Const setRefFile As String = "C:\WINDOWS\SysWOW64\MSCOMCTL.OCX"
ActiveWorkbook.VBProject.References.AddFromFile setRefFile
#Else
Const setRefFile As String = "C:\Windows\System32\MSCOMCTL.OCX"
ActiveWorkbook.VBProject.References.AddFromFile setRefFile
#End If
End Sub

的外れなら忘れてください。
    • good
    • 0
この回答へのお礼

助かりました

すみません!
ベストアンサーに選んだつもりが
お礼だけ言ってそのままにしておりました...。
ありがとうございました~!!

お礼日時:2019/12/25 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!