【问题标题】:Best way to activate between 2 workbooks in a Application.OnTime loop VBA在 Application.OnTime 循环 VBA 中的 2 个工作簿之间激活的最佳方法
【发布时间】:2016-10-22 12:31:44
【问题描述】:

我有workbook1,它连接到数据 API。我希望每 5 秒从workbook1 拍摄一次单元格值的快照,并将其合并到下一个空行上workbook2 中的数据集。

但是我认为我的代码无法在两个工作簿之间正确切换。例如,我在workbook1 中有一些硬数字并运行了宏。代码按预期将硬数字从workbook1 复制并粘贴到workbook2。但是,一旦我手动更改了workbook1 中的数字,宏就无法获取workbook2 中后续合并行的更改。

有人可以帮忙吗?

Sub timer() 

If Hour(Time) <= 16 Then

Application.OnTime Now() + TimeValue("00:00:05"), "dataextract"

ElseIf Hour(Time) >= 18 Then

Application.OnTime Now() + TimeValue("00:00:05"), "dataextract"

End If

End Sub

Sub dataextract()

Dim Datetime As Date
Dim Bid As Single
Dim Ask As Single
Dim BidVol As Integer
Dim AskVol As Integer
Dim dataset As Workbook 

Worksheets("Sheet1").Select
Datetime = Range("B2")
Bid = Range("C2")
Ask = Range("D2")
BidVol = Range("E2")
AskVol = Range("F2")

Set dataset = Workbooks.Open("C:\Users\ali\Desktop\Dataset.xlsx") 'dataset is workbook2
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("B1").Select
RowCount = Worksheets("Sheet1").Range("B1").CurrentRegion.Rows.Count
With Worksheets("Sheet1").Range("B1")
.Offset(RowCount, 0) = Datetime
.Offset(RowCount, 1) = Bid
.Offset(RowCount, 2) = Ask
.Offset(RowCount, 3) = BidVol
.Offset(RowCount, 4) = AskVol
End With

dataset.Save

timer

End Sub

【问题讨论】:

    标签: vba excel macros


    【解决方案1】:

    您应该测试外部工作簿是否已打开。

    Sub timer()
    
        If Hour(Time) <= 16 Or Hour(Time) >= 18 Then
    
            Application.OnTime Now() + TimeValue("00:00:05"), "dataextract"
    
        End If
    
    End Sub
    
    Sub dataextract()
        Dim dataset As Workbook
        On Error Resume Next
    
        Set dataset = Workbooks("Dataset.xlsx")
        If dataset Is Nothing Then Set dataset = Workbooks.Open("C:\Users\ali\Desktop\Dataset.xlsx")
    
        On Error GoTo 0
    
        With dataset.Worksheets("Sheet1")
            With .Range("B" & .Rows.count).End(xlUp).Offset(1)
    
                .Resize(1, 5).Value = ThisWorkbook.Worksheets("Sheet1").Range("B2:F2")
    
            End With
        End With
    
        dataset.Save
    
        timer
    
    End Sub
    

    【讨论】:

    • 我收到错误消息:.Resize(1, 5).Values = ThisWorkbook.Worksheets("Sheet1").Range("B2:F2") 上的“对象不支持此属性或方法”。难道我使用的是 Excel 2013?
    • 我更新了我的答案。它应该是 .Value 而不是 .Values
    • 代码现在运行,但它没有将任何内容粘贴到 dataset.xlsx... 我的意思是我理解这一行采用 B2:F2 范围并将其粘贴到 dataset.xlsx 的下一个空行中...为什么它粘贴为空?
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 2013-09-28
    • 2019-03-03
    • 2016-07-28
    • 1970-01-01
    • 2017-09-16
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多