если то другое заявление делает то же самое в VBA Excel - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь найти, что не так с кодом, но я не могу. В первом операторе if я хочу сказать, что движение ADD, и если 3 ячейки листа 1 (DataEntry) равны 3 ячейкам sheet2 (Catalog), тогда не делайте запись, если они не равны, тогда сделайте это. В обеих ситуациях это делает запись, и из-за этого у меня есть дубликаты. Кто-нибудь может помочь?

ps: если я удаляю elseif, и у меня есть только если тогда он показывает сообщение.

Обновлено (24.01.2020) : Вчера все работало нормально. И через несколько минут go я понял, что когда я набираю греческое слово в ячейках A, B, C, например, «φίλτρο» «νερού» «κ.π.» Excel не признает. Даже если кажется, что пытается ввести данные на каталожный лист, ничего не происходит и ничего не появляется. Хотя странные вещи происходят. Иногда все работало нормально (кроме греков), иногда появлялись неправильные окна сообщений. И продолжайте работать и отображать сообщение, даже если я нажму кнопку ОК, а затем Excel вылетает. «У меня закружилась голова», и я не могу понять, ясно.

Sub AddChange()
Dim t1, t2, t3, t4, t5, t6
Dim t10, t11, t12, t13, t14, t15
Dim t18, t19, t20, t21, t22, t23
Dim arrayData As Variant
Dim arrayData2 As Variant
Dim cleanData As Range
Dim keli As Range
Dim baseSheet As Object
Dim formaSheet As Object
Dim Stock As Object
Dim meter As Long
Dim meter2 As Long
Dim Movement As String
Dim i As Integer


    Set Stock = Sheets("StockMovements")
    Set baseSheet = Sheets("Catalogue")
    Set formaSheet = Sheets("DataEntry")
    Set t1 = formaSheet.Range("A6")
    Set t2 = formaSheet.Range("B6")
    Set t3 = formaSheet.Range("C6")
    Set t4 = formaSheet.Range("D6")
    Set t5 = formaSheet.Range("E6")
    Set t6 = formaSheet.Range("F6")
    Set t10 = baseSheet.Range("A2")
    Set t11 = baseSheet.Range("B2")
    Set t12 = baseSheet.Range("C2")
    Set t13 = baseSheet.Range("D2")
    Set t14 = baseSheet.Range("E2")
    Set t15 = baseSheet.Range("F2")

    Set t18 = Stock.Range("B2")
    Set t19 = Stock.Range("C2")
    Set t20 = Stock.Range("D2")
    Set t21 = Stock.Range("E2")
    Set t22 = Stock.Range("F2")
    Set t23 = Stock.Range("G2")

    Movement = Range("G6").Value

If Movement Like "ADD NEW" Then

 For i = 2 To 10000



    With Worksheets("DataEntry")
        If (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
        Then
            MsgBox "The product already exists! Select change and continue.", vbOKCancel

        ElseIf Not (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
        Then
             meter = Application.WorksheetFunction.CountA(baseSheet.Range("A:A"))
             meter2 = Application.WorksheetFunction.CountA(Stock.Range("A:A"))

             arrayData = VBA.Array(t1, t2, t3, t4, t5, t6)
             'arrayData2 = VBA.Array(t1, t2, t3, t4, t5, t6)
             Set cleanData = Union(t1, t2, t3, t4, t5)

             With cleanData.Cells
              Set keli = .Find(What:="*", LookIn:=xlValues)
              If keli Is Nothing Then
              GoTo telos
              End If
             End With

             baseSheet.Cells(meter + 1, 1).Resize(, 6) = arrayData
             Stock.Cells(meter2 + 1, 1).Resize(, 6) = arrayData
             cleanData.ClearContents
        End If
    End With
Next i

End If



If Movement Like "CHANGE" Then


 For i = 2 To 10000



    With Worksheets("DataEntry")
    If (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
    Then

         MsgBox "Do you want to continue?", vbOKCancel
         Worksheets("Catalogue").Cells(i, "A") = Worksheets("DataEntry").Cells(6, "A")
         Worksheets("Catalogue").Cells(i, "B") = Worksheets("DataEntry").Cells(6, "B")
         Worksheets("Catalogue").Cells(i, "C") = Worksheets("DataEntry").Cells(6, "C")
         Worksheets("Catalogue").Cells(i, "D") = Worksheets("DataEntry").Cells(6, "D")
         Worksheets("Catalogue").Cells(i, "E") = Worksheets("DataEntry").Cells(6, "E")
         Worksheets("Catalogue").Cells(i, "F") = Worksheets("DataEntry").Cells(6, "F")

   ElseIf Not (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
            And (UCase(Trim(Worksheets("DataEntry").Cells(6, "C"))) = UCase(Trim(Worksheets("Catalogue").Cells(i, "C")))) _
        Then
             MsgBox "The product does not exist. Select add new.", vbOKCancel
             Set cleanData = Union(t1, t2, t3, t4, t5)

             With cleanData.Cells
              Set keli = .Find(What:="*", LookIn:=xlValues)
              If keli Is Nothing Then
              GoTo telos
              End If
             End With
             cleanData.ClearContents
        End If
    End With
Next i

End If


telos:

End Sub



Я набираю новый предмет и нажимаю кнопку «Изменить», должно появиться сообщение «Товар не существует. Выберите« Добавить новый ».» Оно показывает это сообщение, а затем всплывает и вылетает другое сообщение. enter image description here

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

1 Ответ

0 голосов
/ 24 января 2020

Проблема была не в греческих символах ... проблема была в ElseIF Not. Так что я изменил код с этим

ElseIf (UCase(Trim(Worksheets("DataEntry").Cells(6, "A"))) <> UCase(Trim(Worksheets("Catalogue").Cells(i, "A")))) _
        And (UCase(Trim(Worksheets("DataEntry").Cells(6, "B"))) <> UCase(Trim(Worksheets("Catalogue").Cells(i, "B")))) _
    Then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...