Excel VBA отладка - PullRequest
       1

Excel VBA отладка

0 голосов
/ 12 сентября 2018

Я сейчас пишу код, который в основном должен идти в файл базы данных, проверить в столбце B, есть ли в нем что-то, если да, он должен проверить в столбце C, какие первые 3 числа, а затем посчитать его в зависимости отна этих числах, затем перейдите к исходному файлу и распечатайте их, но код выдает ошибку 13 «Несоответствие типов», и я не могу понять, почему

Кроме того, в идеале, я мог бы обновлять файл каждую неделюи добавьте его в функцию count.Я думал о словаре, но я не уверен, как его создать.

Sub KPI_Year()

    Dim bodyb As Long
    Dim windshield As Long
    Dim frt_sus As Long
    Dim wheels As Long
    Dim pneumatic As Long
    Dim engine As Long
    Dim transmission As Long
    Dim fuel As Long
    Dim furnishing As Long
    Dim destination_sign As Long
    Dim hvac As Long
    Dim painting As Long
    Dim electrical As Long
    Dim audio As Long
    Dim external_acc As Long
    Dim driver As Long
    Dim spare As Long

    Dim SourceWb As Workbook
    Dim DCP_RC_Wb As Workbook
    Dim Path As String
    Dim Path2 As String
    Path = "........"
    Set SourceWb = Workbooks.Open(Filename:=Path, ReadOnly:=True)
    SourceWb.Activate

    Path2 = ".............."'Set DCP_RC_Wb = Workbooks.Open(Filename:=Path2, ReadOnly:=True)
    ''DCP_RC_Wb.Activate


    Dim x As Long
    Dim lastrow As Long
    lastrow = Workbooks(SourceWb).Cells(Rows.Count, 1).End(xlUp)


    Dim DCP_presence As Range
    Dim counter As Range

    For x = 2 To lastrow
        DCP_presence = Workbooks(SourceWb).Range("C" & x).Value
        counter = Workbooks(SourceWb).Range("D" & x).Value


        If DCP_presence <> "" Then

            bodyb = WorksheetFunction.CountIf(counter, ("101*" Or "401*" Or "501*" Or "601*" Or "A01*" Or "B01*" Or "C01*" Or "D01*" Or "E01*" Or "F01*" Or "G01*" Or "H01*" Or "V01*" Or "W01*" Or "102*" Or "402*" Or "502*" Or "602*" Or "A02*" Or "B02*" Or "C02*" Or "D02*" Or "E02*" Or "F02*" Or "G02*" Or "H02*" Or "V02*" Or "W02*"))
            ThisWorkbook.ActiveSheet.Cell(B2) = bodyb

            windshield = WorksheetFunction.CountIf(counter, ("103*" Or "403*" Or "503*" Or "603*" Or "A03*" Or "B03*" Or "C03*" Or "D03*" Or "E03*" Or "F03*" Or "G03*" Or "H03*" Or "V03*" Or "W03*"))
            ThisWorkbook.ActiveSheet.Cell(B3) = windshield

            frt_sus = WorksheetFunction.CountIf(counter, ("104*" Or "404*" Or "504*" Or "604*" Or "A04*" Or "B04*" Or "C04*" Or "D04*" Or "E04*" Or "F04*" Or "G04*" Or "H04*" Or "V04*" Or "W04*" Or "105*" Or "405*" Or "505*" Or "605*" Or "A05*" Or "B05*" Or "C05*" Or "D05*" Or "E05*" Or "F05*" Or "G05*" Or "H05*" Or "V05*" Or "W05*"))
            ThisWorkbook.ActiveSheet.Cell(B4) = frt_sus

            wheels = WorksheetFunction.CountIf(counter, ("106*" Or "406*" Or "506*" Or "606*" Or "A06*" Or "B06*" Or "C06*" Or "D06*" Or "E06*" Or "F06*" Or "G06*" Or "H06*" Or "V06*" Or "W06*" Or "107*" Or "407*" Or "507*" Or "607*" Or "A07*" Or "B07*" Or "C07*" Or "D07*" Or "E07*" Or "F07*" Or "G07*" Or "H07*" Or "V07*" Or "W07*"))
            ThisWorkbook.ActiveSheet.Cell(B5) = wheels

            pneumatic = WorksheetFunction.CountIf(counter, ("108*" Or "408*" Or "508*" Or "608*" Or "A08*" Or "B08*" Or "C08*" Or "D08*" Or "E08*" Or "F08*" Or "G08*" Or "H08*" Or "V08*" Or "W08*"))
            ThisWorkbook.ActiveSheet.Cell(B6) = pneumatic

            engine = WorksheetFunction.CountIf(counter, ("109*" Or "409*" Or "509*" Or "609*" Or "A09*" Or "B09*" Or "C09*" Or "D09*" Or "E09*" Or "F09*" Or "G09*" Or "H09*" Or "V09*" Or "W09*"))
            ThisWorkbook.ActiveSheet.Cell(B7) = engine

            transmission = WorksheetFunction.CountIf(counter, ("110*" Or "410*" Or "510*" Or "610*" Or "A10*" Or "B10*" Or "C10*" Or "D10*" Or "E10*" Or "F10*" Or "G10*" Or "H10*" Or "V10*" Or "W10*"))
            ThisWorkbook.ActiveSheet.Cell(B8) = transmission

            fuel = WorksheetFunction.CountIf(counter, ("111*" Or "411*" Or "511*" Or "611*" Or "A11*" Or "B11*" Or "C11*" Or "D11*" Or "E11*" Or "F11*" Or "G11*" Or "H11*" Or "V11*" Or "W11*"))
            ThisWorkbook.ActiveSheet.Cell(B9) = fuel

            furnishing = WorksheetFunction.CountIf(counter, ("112*" Or "412*" Or "512*" Or "612*" Or "A12*" Or "B12*" Or "C12*" Or "D12*" Or "E12*" Or "F12*" Or "G12*" Or "H12*" Or "V12*" Or "W12*"))
            ThisWorkbook.ActiveSheet.Cell(B10) = furnishing

            destination_sign = WorksheetFunction.CountIf(counter, ("113*" Or "413*" Or "513*" Or "613*" Or "A13*" Or "B13*" Or "C13*" Or "D13*" Or "E13*" Or "F13*" Or "G13*" Or "H13*" Or "V13*" Or "W13*"))
            ThisWorkbook.ActiveSheet.Cell(B11) = destination_sign

            hvac = WorksheetFunction.CountIf(counter, ("114*" Or "414*" Or "514*" Or "614*" Or "A14*" Or "B14*" Or "C14*" Or "D14*" Or "E14*" Or "F14*" Or "G14*" Or "H14*" Or "V14*" Or "W14*"))
            ThisWorkbook.ActiveSheet.Cell(B12) = hvac

            painting = WorksheetFunction.CountIf(counter, ("115*" Or "415*" Or "515*" Or "615*" Or "A15*" Or "B15*" Or "C15*" Or "D15*" Or "E15*" Or "F15*" Or "G15*" Or "H15*" Or "V15*" Or "W15*"))
            ThisWorkbook.ActiveSheet.Cell(B13) = painting

            electrical = WorksheetFunction.CountIf(counter, ("116*" Or "416*" Or "516*" Or "616*" Or "A16*" Or "B16*" Or "C16*" Or "D16*" Or "E16*" Or "F16*" Or "G16*" Or "H16*" Or "V16*" Or "W16*"))
            ThisWorkbook.ActiveSheet.Cell(B14) = electrical

            audio = WorksheetFunction.CountIf(counter, ("117*" Or "417*" Or "517*" Or "617*" Or "A17*" Or "B17*" Or "C17*" Or "D17*" Or "E17*" Or "F17*" Or "G17*" Or "H17*" Or "V17*" Or "W17*"))
            ThisWorkbook.ActiveSheet.Cell(B15) = audio

            external_acc = WorksheetFunction.CountIf(counter, ("118*" Or "418*" Or "518*" Or "618*" Or "A18*" Or "B18*" Or "C18*" Or "D18*" Or "E18*" Or "F18*" Or "G18*" Or "H18*" Or "V18*" Or "W18*"))
            ThisWorkbook.ActiveSheet.Cell(B16) = external_acc

            driver = WorksheetFunction.CountIf(counter, ("119*" Or "419*" Or "519*" Or "619*" Or "A19*" Or "B19*" Or "C19*" Or "D19*" Or "E19*" Or "F19*" Or "G19*" Or "H19*" Or "V19*" Or "W19*"))
            ThisWorkbook.ActiveSheet.Cell(B17) = driver

            spare = WorksheetFunction.CountIf(counter, ("120*" Or "420*" Or "520*" Or "620*" Or "A20*" Or "B20*" Or "C20*" Or "D20*" Or "E20*" Or "F20*" Or "G20*" Or "H20*" Or "V20*" Or "W20*"))
            ThisWorkbook.ActiveSheet.Cell(B18) = spare

        End If
    Next x

End Sub

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Я думаю, вы не выбираете лист.

попробуйте изменить

lastrow = Workbooks(SourceWb).Cells(Rows.Count, 1).End(xlUp)

на

lastrow = SourceWb.Sheets("NAME_OF_THE_SHEET").Cells(Rows.Count, 1).End(xlUp)
0 голосов
/ 12 сентября 2018

Я бы сделал несколько изменений в вашем коде и посмотрел бы, появляется ли ошибка по-прежнему, однако трудно найти решение, если вы не укажете тип ошибки или в какой строке она возникает.

В вашей строке:

counter = Workbooks(SourceWb).Range("D" & x).Value

Я бы удалил бит ".Value", так как вы используете переменную типа Range, это может вызвать проблемы.

Тогда вкаждый бит, куда вы копируете информацию, я никогда не видел, как вы называете ячейку, в которую хотите скопировать информацию, я бы изменил это:

ThisWorkbook.ActiveSheet.Cell(B2) = bodyb

На это:

NamedWorksheet.Range("B2").Value = bodyb

Могут быть и другие проблемы, пожалуйста, дайте мне знать, в какой строке и какую ошибку вы получаете, и я смогу помочь вам лучше.

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