动态RTD数据记录到另一张纸

时间:2018-12-14 20:25:39

标签: excel vba range row rtd

当从一系列C4:C7列中显示数据时,此代码可以正常工作,但是我的工作表中的数据来自C4:K4行。我不能得到一行而不是一列来解决。有什么帮助吗?谢谢view pic with issue

{{__ 'name'}}

1 个答案:

答案 0 :(得分:1)

移置Capture.Value是问题所在;您不需要这样做,因为目标范围和源范围都具有相同的形状。

建议:避免通过工作表在Excel中的选项卡上显示的名称来引用工作表。这些名称通常会随着时间而改变,并会导致您的代码中断。例如,将Sheet2的名称更改为其他名称后,With Worksheets("Sheet2")...就会失败,并出现错误9“下标超出范围”。

您可以给工作表一个稳定的“内部”名称,并直接在VBA代码中使用它,只要所说的VBA代码与工作表位于同一工作簿中即可。我要引用的工作表属性称为CodeName。您可以从Visual Basic编辑器中进行设置,方法是在“项目资源管理器”中单击工作表,然后在“属性”窗口中将其分配给(名称)属性,如下所示,其中我已将CodeName“ SourceWs”赋予了一个名为从Excel中看到的“源工作表”:

enter image description here

然后,您的代码可以重写为:

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,您会发现不胜枚举。玩得开心。