Я написал приведенный ниже код для ввода данных со спецификацией, которую я хочу. «Введите некоторые данные на лист« 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