2016-07-07 5 views
0

Есть два списка, каждый из которых содержит имена автомобильных деталей, а другой - какие части выбраны пользователем.MS VBA, Изменить диапазон данных графика пользователем

The List Boxes

Каждая часть имеет название той части, ее дату производства, и емкость линии. Цель состоит в том, что, как только пользователь выбирает, какие части он хочет видеть, как это влияет на пропускную способность линии, когда он нажимает кнопку «Сделать меня диаграммой», отображается гистограмма с только частей, которые он/она выбрана.

Я использовал два цикла For и один. Если инструкция сначала для каждого выбранного имени и для каждой ячейки в диапазоне, где указаны все имена этой части, он будет искать это имя, после того как он найден, он создаст диапазон, который включает название этой части, дату производства и мощность. Наконец, он добавит этот диапазон, используя команду Union в диапазон графика.

Однако, когда код работает, на графике отображаются только текущая емкость и последнее. Название части отображается на графике (две полосы).

Любые идеи относительно того, что я делаю неправильно?

Dim actualrange As Range 
Dim totalrange As Range 
Dim c As Range 
Dim workingrange As Range 
Dim findingnameo As Long 
Set totalrange = Range("M1:DA1") 
Dim p As Long 
Dim tryingrange As Range 
For p = 0 To SelectedListBox.ListCount - 1 
    For Each c In totalrange.Cells 
     If c.Text = SelectedListBox.List(p) Then 

     findingnameo = Sheets("The Master").Range("M1:DA1").Find(c.Value, searchdirection:=xlNext, SearchOrder:=xlByColumns).Column 

     Dim thename As Range 
     Dim thedate As Range 
     Dim thecap As Range 

     Set thename = Cells(1, findingnameo) 
     Set thedate = Cells(2, findingnameo) 
     Set thecap = Cells(3, findingnameo) 

      Set workingrange = Union(thename, thedate, thecap) 

      Dim currentcap As Range 

      Set currentcap = Range("M1:M3") 

     Set actualrange = Union(currentcap, workingrange) 

End If 


Next c 


Next p 

спасибо !!

ответ

0

Думал, что это было более сложным, чем это было на самом деле ...

Dim currentcap В диапазоне

  Set currentcap = Range("M1:M3") 
      Set actualrange = currentcap 

For p = 0 To SelectedListBox.ListCount - 1 
    For Each c In totalrange.Cells 
     If c.Text = SelectedListBox.List(p) Then 

     findingnameo = Sheets("The Master").Range("M1:DA1").Find(c.Value, searchdirection:=xlNext, SearchOrder:=xlByColumns, LookAt:=xlWhole).Column 

     Dim thename As Range 
     Dim thedate As Range 
     Dim thecap As Range 

     Set thename = Cells(1, findingnameo) 
     Set thedate = Cells(2, findingnameo) 
     Set thecap = Cells(3, findingnameo) 

      Set workingrange = Union(thename, thedate, thecap) 



     Set actualrange = Union(actualrange, workingrange) 

End If 


Next c 


Next p 

мне просто нужно положить сделать

set actualrange= Union(actualrange,workingrange) 

вместо

set actualrange = Union(currentcap, workingrange) 

Ты правильно учишься своими ошибками?

Хотя, пожалуйста, поделитесь советами или трюками, я хочу учиться!

Смежные вопросы