Два разных массива, питающие одну подпрограмму, создали RTE-13 «Несоответствие типов» с Excel VBA - PullRequest
0 голосов
/ 09 января 2019

Это небольшой пример моей проблемы У меня есть две кнопки, которые я нажимаю, чтобы запустить анализ. Кнопка 1 имеет список из 4 человек Кнопка 2 имеет список из 3 животных Я не могу смешать списки, иначе в моем анализе будут ошибки.

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

После некоторых исследований мне удалось опубликовать несколько переменных. Вариант кажется особенным. Есть предложения?

Public thisList As Variant 
Public xlEvalSheet As Worksheet

Sub CommandButton1_Click()
    thisList(1) = "Bobby"
    thisList(2) = "Jane"
    thisList(3) = "Lord Winter"
    thisList(4) = "Jose"
Call DoStuff
EndSub

Sub CommandButton2_Click
    thisList(1) = "Fluffy"
    thisList(2) = "Fido"
    thisList(3) = "Dog"
Call DoStuff
End Sub

Sub DoStuff()
    Dim k Ks Variant
    Dim counterTemple as Integer
    Dim evalTables (0 to 3) as Variant
evalTables(0)= "EvalTable1.xlsx"
evalTables(1)= "EvalTable2.xlsx"
evalTables(2)= "EvalTable3.xlsx"
evalTables(3)= "EvalTable4.xlsx"
    For Each doIt in evalTables
    strEvalTable = NetworkLocation & doIt
        counterTemple = 3 ' used inside the wdUpdateDataInText 

        For Each k In thisList
        controlThis = k & "-" & counterTemple  'passes a string to the wdApp.contentcontrol
            xlEvalSheet.Rows.Hidden = False
            xlEvalSheet.Cells(1, 4).Value = k  'initialize k
            xlEvalSheet.Calculate
            DoEvents
                Call wdUpdateDataInText 'this feeds data to MS Word ContentControls

            currentDifference = xlEvalSheet.Cells(5, 6).Value  'stop blank tables from being produced
            If currentDifference = 0 Then  
                Else
                Call PDFcrate 'produces tables as PDFs with FixedFormatExport 
            End If
         Next  'repeats for each tab with name "k" in the workbooks
     xlEval.Close
     counterTemple = counterTemple + 1
    next
End Sub`

1 Ответ

0 голосов
/ 09 января 2019

Не используйте глобальные переменные для передачи значений между различными методами - для этого нужны параметры. Ненужные глобалы быстро приводят к проблемам.

Sub CommandButton1_Click()
    DoStuff Array("Bobby","Jane","Lord Winter","Jose")
EndSub

Sub CommandButton2_Click
    DoStuff Array("Fluffy", "Fido", "Dog")
End Sub

Sub DoStuff(thisList As Variant)

   'use thisList

End sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...