Транспонирование Capture.Value
- это проблема;Вам не нужно этого делать, поскольку диапазоны назначения и источника имеют одинаковую форму.
Предложение: не обращайтесь к рабочим листам по имени, которое они отображают на вкладке в Excel.Эти имена обычно меняются с течением времени и приведут к поломке кодаНапример, With Worksheets("Sheet2")...
завершится с ошибкой 9 «Подстрочный индекс вне диапазона», как только вы измените имя Sheet2 на другое.
Вы можете присвоить стабильное «внутреннее» имя рабочей таблице и напрямуюиспользуйте его в коде VBA, если указанный код VBA находится в той же книге, что и лист.Свойство листа, на которое я ссылаюсь, называется CodeName
.Вы можете установить его из редактора Visual Basic, щелкнув по рабочему листу в Project Explorer, а затем присвоив свойству (Name) в окне свойств, как показано ниже, где я присвоил CodeName "SourceWs" рабочему листу с именем«Исходная рабочая таблица», как видно из Excel:
Затем ваш код можно переписать так:
Option Explicit
Sub RecordData()
Dim Interval As Double
Dim cel As Range, Capture As Range
Dim NextTime As Date
Interval = 30 'Number of seconds between each recording of data
Set Capture = SourceWs.Range("C4:K4") 'Capture this row of data
With DestWs 'Record the data on this worksheet
Set cel = .Range("A2") 'First timestamp goes here
Set cel = .Cells(.Rows.Count, cel.Column).End(xlUp).Offset(1, 0)
cel.Value = Now
cel.Offset(0, 1).Resize(1, Capture.Cells.Count).Value = Capture.Value
End With
NextTime = Now + Interval / 86400
Application.OnTime NextTime, "RecordData"
End Sub
Что касаетсяна ваш вопрос об обучающих видео, попробуйте поискать в Google excel mvp blog
, и вы найдете больше, чем вы можете справиться.Веселитесь.