ЕСЛИ оператор как макрос - PullRequest
0 голосов
/ 15 января 2020

Ниже приведен мой код макроса для вставки данных из листа1 в лист2. Конечно, это не работает. Кроме этого, я хочу сказать, что если Движение - это «Импорт», то go на Лист2, а в строке, где продукт - это «угловой», категория - «g», а подкатегория «g» делает ячейку Количество такой, какой она была, плюс значение количества.

Пример: предположим, что продукт, который уже существует, равен углу / г / г, а количество равно 10, и я хочу добавить тот же продукт и количество 5, затем go к листу 2 и сделать количество 10 + 5. .

Если я выберу экспорт, то 10-5.

Код, который я уже написал, таков (он не работает):

Sub DatabaseSofkos()
Dim t1, t2, t3, t4, t5, t6, t7

Dim arrayData As Variant
Dim cleanData As Range
Dim keli As Range
Dim baseSheet As Object
Dim formaSheet As Object
Dim meter As Long
Dim Movement As String


    Set baseSheet = Sheets("StockMovements")
    Set formaSheet = Sheets("DataEntry")

    Set t1 = formaSheet.Range("A2")
    Set t2 = formaSheet.Range("B2")
    Set t3 = formaSheet.Range("C2")
    Set t4 = formaSheet.Range("D2")
    Set t5 = formaSheet.Range("E2")
    Set t6 = formaSheet.Range("F2")
    Set t7 = formaSheet.Range("G2")


meter = Application.WorksheetFunction.CountA(baseSheet.Range("A:A"))
arrayData = VBA.Array(meter, t1, t2, t3, t4, t5, t6, t7)
Set cleanData = Union(t1, t2, t3, t4)

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

baseSheet.Cells(meter + 1, 1).Resize(, 8) = arrayData
cleanData.ClearContents

telos:

End Sub

Лист ввода данных enter image description here

Лист данных enter image description here

1 Ответ

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

Я написал приведенный ниже код для ввода данных со спецификацией, которую я хочу. «Введите некоторые данные на лист« DataEntry », укажите тип операции (ИМПОРТ или ЭКСПОРТ). Нажав кнопку, вы перенесете введенный продукт на лист« DataEntry »и найдите его на листе« StockMovements ». На основе типа операции (ИМПОРТ или ЭКСПОРТ ) добавляет или вычитает введенное количество на листе «StockMovements». " Проблема в том, что он вводит данные в новую строку каждый раз, я хочу ввести данные в строку с указанным c продуктом. Кто-нибудь может помочь?

(PS: есть ли лучший способ сделать чек? Я понимаю, что «Для i = 2 до 10000» не очень хороший способ, и продукт может быть до 1000000000 »)

Sub DatabaseSofkos()
Dim t1, t2, t3, t4, t5, t6, t7
Dim t10, t11, t12, t13
Dim thelp

Dim arrayData As Variant
Dim cleanData As Range
Dim keli As Range
Dim baseSheet As Object
Dim formaSheet As Object
Dim meter As Long
Dim Movement As String
Dim product As String
Dim category As String
Dim subcategory As String

Dim finalrow As Integer
Dim i As Integer


    Set baseSheet = Sheets("StockMovements")
    Set formaSheet = Sheets("DataEntry")

    Set t1 = formaSheet.Range("A2")
    Set t2 = formaSheet.Range("B2")
    Set t3 = formaSheet.Range("C2")
    Set t4 = formaSheet.Range("D2")
    Set t5 = formaSheet.Range("E2")
    Set t6 = formaSheet.Range("F2")
    Set t7 = formaSheet.Range("G2")

    Set t10 = baseSheet.Range("B2")
    Set t11 = baseSheet.Range("C2")
    Set t12 = baseSheet.Range("D2")
    Set t13 = baseSheet.Range("E2")

product = Worksheets("DataEntry").Cells(2, "B").Value
category = Worksheets("DataEntry").Cells(2, "C").Value
subcategory = Worksheets("DataEntry").Cells(2, "D").Value

    Movement = Range("I2").Value

 If Movement Like "IMPORT" Then

 For i = 2 To 10000


    With Worksheets("DataEntry")
    If (Worksheets("DataEntry").Cells(2, "B") = Worksheets("StockMovements").Cells(i, "C")) _
        And (Worksheets("DataEntry").Cells(2, "C") = Worksheets("StockMovements").Cells(i, "D")) _
    Then t1 = Worksheets("StockMovements").Cells(i, "B") + Worksheets("DataEntry").Cells(2, "A")

End With
Next i


meter = Application.WorksheetFunction.CountA(baseSheet.Range("A:A"))
arrayData = VBA.Array(meter, t1, t2, t3, t4, t5, t6, t7)
Set cleanData = Union(t2, t3, t4)

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

baseSheet.Cells(meter + 1, 1).Resize(, 8) = arrayData
cleanData.ClearContents
End If





 If Movement Like "EXPORT" Then

 For i = 2 To 10000



    With Worksheets("DataEntry")
    If (Worksheets("DataEntry").Cells(2, "B") = Worksheets("StockMovements").Cells(i, "C")) _
        And (Worksheets("DataEntry").Cells(2, "C") = Worksheets("StockMovements").Cells(i, "D")) _
    Then t1 = Worksheets("StockMovements").Cells(i, "B") - Worksheets("DataEntry").Cells(2, "A")

End With
Next i


meter = Application.WorksheetFunction.CountA(baseSheet.Range("A:A"))
arrayData = VBA.Array(meter, t1, t2, t3, t4, t5, t6, t7)
Set cleanData = Union(t2, t3, t4)

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

baseSheet.Cells(meter + 1, 1).Resize(, 8) = arrayData
cleanData.ClearContents
End If


telos:

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