Я очень новичок в VBA, но мне удалось собрать код, который мне действительно нужен. , но код записывает несколько строк в одну строку. Мне нужно записывать диапазон строк каждую неделю и очищать мастер-лист только указанными столбцами. Вторая проблема - это не запись в следующую доступную строку, когда я нажимаю кнопку макроса 2nd time.please, помогите мне разобраться в этом. вот мой код:Скопируйте диапазон данных и вставьте в лист для записи без перезаписывания и следуйте следующей доступной строке
Option Explicit
Sub UpdateReport2()
Dim historyWks As Worksheet
Dim inputWks As Worksheet
Dim RngToCopy As Range
Dim nextRow As Long
Dim oCol As Long
Dim myCell As Range
Set inputWks = Worksheets("Master Sheet")
Set historyWks = Worksheets("report")
With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With inputWks
Set RngToCopy = Range("a2:j56")
If Application.CountA(RngToCopy) <> RngToCopy.Cells.Count Then
MsgBox "Please fill in all the cells!"
Exit Sub
End If
End With
With historyWks
With .Cells(nextRow, "A")
.Value = Now
.NumberFormat = "dd/mm/yyyy"
End With
.Cells(nextRow, "B").Value = Application.UserName
oCol = 3
For Each myCell In RngToCopy.Cells
historyWks.Cells(nextRow, oCol).Value = RngToCopy.Value
oCol = oCol + 1
Next myCell
End With
'clear input cells that contain constants
With inputWks
On Error Resume Next
With .Range("b2:j56").Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.GoTo .Cells(1) ', Scroll:=True
End With
On Error GoTo 0
End With
End Sub
Один быстрой записки, 'Set RngToCopy = Range ("a2: J56")' пропускает '.' перед тем 'Range()', чтобы связать его с 'inputWks'. Таким образом, 'RngToCopy' всегда будет из' ActiveSheet', что бы это ни было. – BruceWayne
Так как вы новичок в VBA, пытались ли вы пройти через код с помощью F8 и точек разрыва? Вот хороший способ: http://www.excel-easy.com/vba/examples/debugging.html. – CRUTER
Также, что делает 'Application.GoTo .Cells (1)' должен делать? – BruceWayne