Excel:触发后无法自动更新

Excel:触发后无法自动更新,excel,vba,Excel,Vba,我有一个单元格A1,它每n秒从服务器提取一个值,但是使用下面的宏(当前使用的宏)是不合适的: Dim preVal As String Dim count As Integer 'Intention is if cell A1 changes, record changes to Column C and Column D Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Th

我有一个单元格A1,它每n秒从服务器提取一个值,但是使用下面的宏(当前使用的宏)是不合适的:

Dim preVal As String
Dim count As Integer

'Intention is if cell A1 changes, record changes to Column C and Column D
Private Sub Worksheet_Change(ByVal Target As Range)
        If Target = Range("A1") Then
                Call cellchange(Range("A1"))
        End If
End Sub

Private Sub cellchange(ByVal a As Range)
   'If row is empty, filled into that row, if not skip to next one  
    If a.Value <> preVal Then
        count = count + 1
'copy the value of A1 from sheet 1 
        preVal = Sheets("Sheet1").Range("A1").Value
        Cells(count, 4).Value = a.Value
 'copy the values of time of which data change detected       
        Cells(count, 3) = Now()
    End If
End Sub
Dim preVal作为字符串
将计数设置为整数
'目的是如果单元格A1发生更改,则将更改记录到C列和D列
私有子工作表_更改(ByVal目标作为范围)
如果目标=范围(“A1”),则
呼叫手机更改(范围(“A1”))
如果结束
端接头
专用子单元更改(ByVal a作为范围)
'如果行为空,则填充到该行,如果不是,则跳到下一行
如果a.值为preVal,则
计数=计数+1
'从表1复制A1的值
preVal=板材(“板材1”).范围(“A1”).值
单元格(计数,4)。值=a。值
'复制检测到数据更改的时间值
单元格(计数,3)=现在()
如果结束
端接头

最简单的方法是,服务器每隔几秒钟就会更新一次单元格A1,因此,当宏检测到单元格A1中非人工输入的更改时,我需要更新/触发宏。

您需要使用真正检查目标单元格是否更新的工具。通常使用
application.intersect
。这里我使用的是地址属性

Dim preVal As String
Dim count As Integer

'Intention is if cell A1 changes, record changes to Column C and Column D
Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.address = Range("A1").address Then
                cellchange target 
        End If
End Sub

Private Sub cellchange(ByVal a As Range)
   'If row is empty, filled into that row, if not skip to next one  
    If a.Value <> preVal Then
        count = count + 1
'copy the value of A1 from sheet 1 
        preVal = Sheets("Sheet1").Range("A1").Value
        Cells(count, 4).Value = a.Value
 'copy the values of time of which data change detected       
        Cells(count, 3) = Now
    End If
End Sub
Dim preVal作为字符串
将计数设置为整数
'目的是如果单元格A1发生更改,则将更改记录到C列和D列
私有子工作表_更改(ByVal目标作为范围)
如果Target.address=范围(“A1”)。地址,则
细胞变化靶
如果结束
端接头
专用子单元更改(ByVal a作为范围)
'如果行为空,则填充到该行,如果不是,则跳到下一行
如果a.值为preVal,则
计数=计数+1
'从表1复制A1的值
preVal=板材(“板材1”).范围(“A1”).值
单元格(计数,4)。值=a。值
'复制检测到数据更改的时间值
单元格(计数,3)=现在
如果结束
端接头
希望能有帮助

问候,

我认为这个代码一点也不好。如果有其他代码要从服务器读取和更新A1,为什么不添加这样的更新过程来添加?同样在CellChange上,如果新条目与周条目相同,则使用这种Preval将使不更新单元格。它假设连续值不能相同!