动态 RTD 数据记录到另一个 Sheet
Dynamic RTD Data Recording to Another Sheet
当数据来自 C4:C7 列的范围时,此代码工作正常,但是我的工作表设置了来自 C4:K4 的一行数据。我无法得到一行而不是一列来计算。有什么帮助吗?谢谢.
Sub RecordData()
Dim Interval As Double
Dim cel As Range, Capture As Range
Interval = 30 'Number of seconds between each recording of data
Set Capture = Worksheets("Sheet1").Range("C4:K4") 'Capture this row of data
With Worksheets("Sheet2") '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 = Application.Transpose(Capture.Value)
End With
NextTime = Now + Interval / 86400
Application.OnTime NextTime, "RecordData"
End Sub
转置Capture.Value
是问题;您不需要这样做,因为目标范围和源范围具有相同的形状。
建议:避免使用工作表在 Excel 选项卡上显示的名称来引用工作表。这些名称通常会随着时间的推移而改变,并会导致您的代码中断。例如,一旦将 Sheet2 的名称更改为其他名称,With Worksheets("Sheet2")...
将失败并显示错误 9 "Subscript out of range"。
您可以给工作表起一个稳定的 "internal" 名称,并直接在 VBA 代码中使用它,只要所说的 VBA 代码与工作表。我所指的工作表 属性 称为 CodeName
。您可以从 Visual Basic 编辑器中设置它,方法是单击项目资源管理器中的工作表,然后在属性 Window 中分配给(名称)属性,如下所示,我在其中给出了CodeName "SourceWs" 到名为 "Source Worksheet" 的工作表,如 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
至于您关于培训视频的问题,请尝试使用谷歌搜索 excel mvp blog
,您会发现您无法处理的内容。玩得开心。
当数据来自 C4:C7 列的范围时,此代码工作正常,但是我的工作表设置了来自 C4:K4 的一行数据。我无法得到一行而不是一列来计算。有什么帮助吗?谢谢
Sub RecordData()
Dim Interval As Double
Dim cel As Range, Capture As Range
Interval = 30 'Number of seconds between each recording of data
Set Capture = Worksheets("Sheet1").Range("C4:K4") 'Capture this row of data
With Worksheets("Sheet2") '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 = Application.Transpose(Capture.Value)
End With
NextTime = Now + Interval / 86400
Application.OnTime NextTime, "RecordData"
End Sub
转置Capture.Value
是问题;您不需要这样做,因为目标范围和源范围具有相同的形状。
建议:避免使用工作表在 Excel 选项卡上显示的名称来引用工作表。这些名称通常会随着时间的推移而改变,并会导致您的代码中断。例如,一旦将 Sheet2 的名称更改为其他名称,With Worksheets("Sheet2")...
将失败并显示错误 9 "Subscript out of range"。
您可以给工作表起一个稳定的 "internal" 名称,并直接在 VBA 代码中使用它,只要所说的 VBA 代码与工作表。我所指的工作表 属性 称为 CodeName
。您可以从 Visual Basic 编辑器中设置它,方法是单击项目资源管理器中的工作表,然后在属性 Window 中分配给(名称)属性,如下所示,我在其中给出了CodeName "SourceWs" 到名为 "Source Worksheet" 的工作表,如 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
至于您关于培训视频的问题,请尝试使用谷歌搜索 excel mvp blog
,您会发现您无法处理的内容。玩得开心。