2016-08-01 2 views
0

У меня есть книга Excel с двумя листами, называемая «Просмотр поставщика Dashboard» и «ComputingSolutions». На вкладке представления поставщика панели инструментов пользователь должен записать значение в названии cell "categoryName". Когда пользователь записывает «Вычислительные решения» в этой именованной ячейке и запускает код, я хочу, чтобы код перешел на лист ComputingSolutions и сохранил все прокси-серверы в столбце A на этом листе в массив, чтобы затем распечатайте все просители в оригинальном представлении поставщика приборной панели.VBA: выполняется код, но никакого вывода не генерируется

«n» переменная относится к именованной ячейке на листе ComputingSolutions и представляет собой количество поставщиков на этом листе. (Этот номер уже записан, пользователю не нужно это изменять)

Когда я запускаю код, ничего не появляется. На листке поставщика приборной панели ничего не печатается в указанном месте. Я тоже не ошибаюсь. Я проверил все имена и все написано правильно. Я не уверен, в чем проблема, но я подозреваю, что это имеет какое-то отношение к активации рабочих листов.

Public Sub DashboardSupplier() 

Dim category As String 
Dim supplierArray() As String 
Dim c As Integer 

Worksheets("Dashboard Supplier View").Activate 

category = Names("categoryName").Value 

'Suppliers for selectec category 

If category = "Computing Solutions" Then 

Worksheets("ComputingSolutions").Activate 

n = Names("supplierAmount").Value 

ReDim supplierArray(1 To n) As String 

    For c = 1 To n 

    supplierArray(c) = Cells(3 + c, 1) 

    Next c 

Worksheets("Dashboard Supplier View").Activate 

    For c = 1 To n 

    Cells(6 + c, 4) = supplierArray(c) 

    Next c 

    End If 

    End Sub 
+0

Как переменная 'n' относится к именованной ячейке? Ячейка называется 'n'? –

+0

Вы пробовали отладку? Положите разрыв (например) внутри 'If category =" Computing Solutions "Then' block - ваш код достигнет этой точки? –

+0

n относится к названному вызову providerAmount через n = Имена («поставщикAmount»). Значение –

ответ

2

ОК, я думаю, у меня есть решение этого, потому что это беспокоило меня. Я настроил вашу среду как тест и обнаружил, что по какой-то причине Names("categoryName").Value возвращал адрес ячейки, то есть возвращал Names("categoryName").RefersTo. Попробуйте поменять номер .value на .RefersToRange.Value и посмотреть, есть ли у вас больше удачи. Вот мой рабочий отформатированный код:

Public Sub DashboardSupplier() 
    Dim category As String 
    Dim supplierArray() As String 
    Dim c As Integer 
    Dim n As Long 
    Worksheets("Dashboard Supplier View").Activate 
    category = Range("categoryName").Value 
    'Suppliers for selectec category 
    If category = "Computing Solutions" Then 
     Worksheets("ComputingSolutions").Activate 
     n = CLng(Range("supplierAmount").Text) 
     ReDim supplierArray(1 To n) As String 
     For c = 1 To n 
      supplierArray(c) = Cells(3 + c, 1) 
     Next c 
     Worksheets("Dashboard Supplier View").Activate 
     For c = 1 To n 
      Cells(6 + c, 4) = supplierArray(c) 
     Next c 
    End If 
End Sub 

К сожалению, у меня нет пояснений к этому вопросу.

+0

Это дает мне ошибку времени выполнения 1004: Определенная пользователем или объектная ошибка. Я скопировал весь код и использовал его. Я сбиваю с толку –

+0

F8 через него и скажу, где это всплывает. –

+0

Здесь: n = имена («поставщик»). RefersToRange.Value –