2016-04-18 12 views
0

リストボックス(ActiveXコントロール)を作成しようとしています。このリストボックスは、ユーザーフォームではなく、ブックの「ダッシュボード」とラベルされたシートにあります。私は "データ"と書かれたシートから範囲を設定したいと思います。VBA:ワークシートであり、ユーザーフォームではなくListBox ActiveXコントロールを実装する

私の問題は、ワークブックのオープンイベントプロシージャにそれを設定した場合、「ブレークモードで実行できません」というブックが開いたときにエラーが発生するということです。ただし、ブレークポイントはまったくアクティブではありません。

「ダッシュボード」ワークシートのアクティブなイベントプロシージャに入力すると、ブックが開いているときに表示されません。別のワークシートをクリックした後でDashboardワークシートに戻ってから、そのワークシートが作成されます。

リストボックスを作成して、常に入力され準備が整うようにする方法がありますか?私は、リストボックスに関連付けられている多くの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のコードワークシート上で持っているものですあなたはMSForms.ListBoxとしてcPlanetsを宣言しているが、あなたの質問にあなたはActiveXのリストボックスを使用して作業していると言う手順

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 
+0

ダッシュボードシート上でパブリック関数を作成しようとしましたが、これはリストを埋め込み、Workbook_Open()でこの関数を呼び出していますか? –

+0

私もこれを試しましたが、ワークブックを開いてもまだ読み込まれません。パブリック関数addListsWorksheetActivate() – Rosario

答えて

0

私はこのコードを別のコンピュータで試してみました。それは問題を引き起こしていたのはコンピュータの設定だと思われます。コードは、いくつかの異なるコンピュータ上で動作するはずです。

0

を活性化させますシート上にしたがって、cPlanetsをObjectとして宣言する必要があります。

Dim cPlanets As Object 
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets 
+0

ありがとうございます、私は今あなたの提案に変更しました。しかし、workbook_openプロシージャーでそれを入力すると、それはまだ入力されません。なぜなら、開くときにブレークモードになっていると思ってエラーが発生するからですが、ブレークモードにはコード行はありません。 – Rosario

関連する問題