2017-05-12 9 views
2

リストボックスの項目を分割して、最初の改行までしか表示しないようにしようとしていますが、添え字が範囲外であるようですが、エラーを特定できません。リストボックスの添え字が範囲外ですexcel vba

Private Sub DisplayTasksInListView() 
    Dim i As Integer 
    Dim taskList As Variant 
    Dim taskItem As Variant 

    With ListBoxTask 
     ListBoxTask.Clear 
     taskList = ActiveSheet.Range("B3:B5") 
     For Each taskItem In taskList 
     ListBoxTask.AddItem Split(taskItem, Chr(10))(0) 
     Next taskItem 
    End With 
End Sub 
+0

あなたは、サブ閉じていることを確認してください: '終わりをSub' –

+0

こんにちは、私はあなたがして失う非常に遊んでいる – Keenlearner

+1

この記事に含めるのを忘れてばかりいることを、元のコードでは、サブ近いましたデータ型。 'taskitem'はあなたがバリアントに割り当てる範囲です。次に、その範囲のデフォルトプロパティである 'Value'を取得し、分割します。 'Value'プロパティを指定して、Excelが範囲オブジェクトを分割することを意味しないことを知るようにしてください。しかし、 'Value'プロパティは、Split関数で必要とされる文字列である可能性があります。もちろん、リストボックスには文字列も必要ですが、バリアントは必要ありません。私はあなたのコードに少し精度を追加すると、エラーが消えたと思われる。 – Variatus

答えて

1

@Variatusアドバイスに加えて、正しいデータ型で変数を作成すると、コードは基本的にOKです。 taskListtaskItemRangeである必要があります。セルの場合は、RangeのプロパティーをValueに明示的に参照し、それをSplitに渡すことができます。

ListBoxを直接参照するのではなく、名前で取得する方法も追加しました。これにより、必要に応じてコードをモジュール化するのが容易になります。

Option Explicit 

Sub FillListBox() 

    Dim ws As Worksheet 
    Dim rngTaskList As Range 
    Dim rngTaskItem As Range 
    Dim lstTasks As MSForms.ListBox 

    Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- change for your sheet 
    Set rngTaskList = ws.Range("B1:B5") '<-- change for your range 
    Set lstTasks = ws.OLEObjects("ListBox1").Object.Value '<-- change for your listbox name 

    With lstTasks 
     .Clear 
     For Each rngTaskItem In rngTaskList 
      .AddItem Split(rngTaskItem.Value, vbLf)(0) 
     Next rngTaskItem 
    End With 

End Sub 

enter image description here

関連する問題