リスト ボックス (ActiveX コントロール) を作成しようとしています。このリスト ボックスは、ユーザー フォームではなく、ワークブックの「ダッシュボード」というラベルの付いたシートにあります。「データ」というラベルの付いたシートの範囲を入力したいと思います。
私の問題は、ワークブックのオープン イベント プロシージャに入力すると、ワークブックを開いたときに「中断モードでは実行できません」というエラーが表示されることです。ただし、アクティブなブレークポイントはまったくありません。
「ダッシュボード」ワークシートのアクティブなイベント プロシージャに入力すると、ブックが開いているときに入力されません。別のワークシートをクリックしてからダッシュボード ワークシートに戻ると、データが入力されます。
リスト ボックスにデータを入力して、常にデータを入力してすぐに使用できるようにする、より良い方法はありますか? リスト ボックスに関連付けられている vLookup 関数が多数ありますが、リスト ボックスに値が入力されていないと、コードの残りの部分が機能しません。
私がこれまでに持っているコードを投稿します。1 つ目は、workbook_open イベント プロシージャを使用してリスト ボックスにデータを入力しようとしたときです。2 つ目は、「ダッシュボード」ワークシートのアクティブ化手順です。
Private Sub Workbook_Open()
Dim strName As String
Dim blDone As Boolean
Dim cPlanets As MSForms.ListBox
Dim vArray As Variant
Dim shtData As Worksheet
Dim wkbSolarSystem As Workbook
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm")
Set shtData = wkbSolarSystem.Worksheets("Data")
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets
vArray = shtData.Range("Planets").value
cPlanets.List = vArray
cPlanets.ListIndex = 3
'input box message for user when workbook opens up
strName = InputBox("Hello! Please enter your name", "Welcome!")
'check if there is a name entered via loop and if statement
Do
If Len(strName) = 0 Then
'if no name entered, ask user again
MsgBox ("Please enter a valid name to continue"), vbCritical, "Valid Name Required"
'ask user to type in name again
strName = InputBox("Hello! Please enter your name", "Welcome!")
Else
'display message with information for user
MsgBox ("Hello, " & strName)
blDone = True
End If
'finish loop statement
Loop Until blDone = True
この次のコードは、シート 3 コード ワークシートのアクティブ化手順にあるものです。
Private Sub Worksheet_Activate()
Dim shtData As Worksheet
Dim wkbSolarSystem As Workbook
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm")
Set shtData = wkbSolarSystem.Worksheets("Data")
lstPlanets.List = shtData.Range("Planets").value
lstPlanets.ListIndex = 3
End Sub