0

リスト ボックス (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
4

2 に答える 2

0

cPlanets を MSForms.ListBox として宣言していますが、質問では、シート上の ActiveX リストボックスを操作していると言っています。したがって、次のように cPlanets をオブジェクトとして宣言する必要があります。

Dim cPlanets As Object
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets
于 2016-04-18T14:35:48.660 に答える
0

このコードを別のコンピューターで試してみましたが、うまくいきました。問題の原因となっているのは、コンピューターの構成にあるようです。コードは、いくつかの異なるコンピューターで問題なく動作します。

于 2016-04-20T23:01:37.630 に答える