У меня есть электронная таблица, которая используется для регистрации изменений инвентаризации.Из-за обстоятельств мне нужно также перечислить эти данные в другом журнале, который включает корректировки, сделанные несколькими лицами.Есть ли способ сократить / улучшить текущий метод, который у меня есть?
Я осмотрел этот сайт и другие, пытаясь понять, копируя код, когда могу, потому что я ни в коем случае не являюсь промежуточным пользователем.
Option Explicit
Sub moveInput()
'Worksheets("test").Range("A3:G3").Copy
'Workbooks("Book2").Worksheets("Sheet7").Activate
'Range("A1").End(xlDown).Offset(1, 0).Select
Workbooks("Book1").Worksheets("test").Range("A3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("B3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("B1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("C3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("C1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("D3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("D1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("E3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("J1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("F3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("M1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Workbooks("Book1").Worksheets("test").Range("G3").Copy
Workbooks("Book2").Worksheets("Sheet7").Range("Q1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
End Sub
Option Explicit
Sub moveInput_2()
'*****************'
'Declare Variables'
'*****************'
Dim lastRow As Long
Dim wB1 As Workbook
Dim wB2 As Workbook
Dim wsTest As Worksheet
Dim ws7 As Worksheet
Dim i As Integer
'*************'
'Set Variables'
'*************'
Set wB2 = Workbooks("Book2.xlsm")
Set ws7 = wB2.Sheets("Sheet7")
Set wB1 = Workbooks("Book1.xlsm")
Set wsTest = wB1.Sheets("test")
i = 1
'***********************'
'Find Last Row For Input'
'***********************'
'On Error GoTo errlastrow
With ws7
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lastRow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lastRow = 1
End If
End With
'On Error GoTo 0
'****************************'
'Find Rows That Need Transfer'
'****************************'
'On Error GoTo errinput
With wsTest
For i = 1 To 250
If .Cells(i, 6).Value > 300 Then
wB2.ws7.Range(lastRow, 1).Value = wB1.wsTest.Range(i, 1).Value 'Error pops up here, object doesn't support this property or method
'I've tried switching them around, including wb, sheet, range and nothing.
ws7.Range("lastrow, 2").Value = wsTest.Range(i, 2).Value
ws7.Range("lastrow, 1").Value = wsTest.Range(i, 3).Value
ws7.Range("lastrow, 1").Value = wsTest.Range(i, 4).Value
ws7.Range("lastrow, 10").Value = wsTest.Range(i, 5).Value
ws7.Range("lastrow, 13").Value = wsTest.Range(i, 6).Value
ws7.Range("lastrow, 17").Value = wsTest.Range(i, 7).Value
End If
Next i
lastRow = lastRow + 1
End With
'On Error GoTo 0
Exit Sub
'**************'
'Error Handling'
'**************'
'errlastrow:
'MsgBox "Could not find last row, check dataset!" & Err.Description
'End
'errinput:
'MsgBox "No data to input" & Err.Description
'End
End Sub
Моя конечная цель - создать макрос (предпочтительно назначаемый кнопке), который будет идентифицировать строки, в которых значение моей стоимости будет превышать определенную сумму в долларах, а затем скопировать и вставить определенные ячейки из этогострока в основной журнал.Строки и столбцы не будут одинаковыми.Также было бы полезно, но не обязательно (я мог бы осмотреться), иметь возможность проверять наличие активных пользователей при открытии отдельной рабочей книги и отменять действия, если таковые имеются.