VBA есть способ сравнить значения из двух разных листов или файлов? - PullRequest
0 голосов
/ 08 мая 2019

Я сталкиваюсь с некоторыми трудностями при попытке сравнить значения двух разных рабочих книг.Код должен удалить строки, которые не соответствуют условию if, то есть, если значение из рабочей книги "Nuevo hoja de cálculo" находится между интервалами значений из другой рабочей книги под названием "Formato CO-08a", он продолжает вычислятьнесколько переменных (m, y_n, y), и если значение выполняет второе условие if, то строка удаляется.

Я также пытался сделать это, работая с листами из той же книги, копируя вРабочая тетрадь "Nuevo hoja de calclo" лист из рабочей тетради "Formato CO-08a".Но это все еще не работает, поскольку программа не может прочитать значения из этого скопированного листа.Пример, который я написал ниже, работает с листами из одной и той же книги, но моя цель - работать с 2 разными книгами.

For i = 1 To Sheets("Seleccion_ECs").listaopciones.ListCount
Line1:
        For Z = 0 To 7
            Debug.Print Z
            If (Sheets("Seleccion_ECs").Cells(i + 1, E).Value >= ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 4).Value) And (Sheets("Seleccion_ECs").Cells(i + 1, E).Value <= ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 4).Value) Then

                m = (ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 2).Value - ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 2).Value) / (ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 4).Value - ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 4).Value)

                y = m * (Sheets("Seleccion_ECs").Cells(i + 1, E).Value - Sheets("Requisitos Contenedor").Cells(40 + Z, 2).Value) + Sheets("Requisitos Contenedor").Cells(40 + Z, 4).Value

                y_n = Sheets("Seleccion_ECs").Cells(i + 1, Q).Value

                Debug.Print ("Se ha encontrado un intervalo")

                If y_n > 1.02 * y Then 'Si se sale en un 2 por ciento de la zona aceptada, se elimina la fila.

                    Worksheets("Seleccion_ECs").Rows(i + 1).Delete

                    GoTo Line1

                Else:

                    i = i + 1 'Preguntar si vale esto teniendo el for i=0

                    GoTo Line1

                End If

            End If

        Next Z

Next i

Заранее спасибо

1 Ответ

0 голосов
/ 08 мая 2019

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

Dim wbSource as Workbook, wbDest as Workbook
Dim shSEC as Worksheet, shREQ as Worksheet

Set wbSource = Thisworkbook
Set wbDest = <.... this is the reference of the other file you're gonna use>
Set shSEC = wbSource.Worksheets("Seleccion_ECs")
...
If shSEC.Cells(i + 1, E).Value >= shREQ.Cells(40 + Z, 4).Value) ...

Вы должны проверять успешность после каждого Set, вставляя If Err.Number <> 0 Then <error hadler>, чтобы убедиться, что перед циклом все в порядке.

Вы можете заменить GoTo ... на Exit For. Прога будет работать так же, но она будет немного элегантнее:)

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