在vba excel中调用sub无法正常工作

时间:2018-02-14 12:20:20

标签: excel vba excel-vba

我需要从另一个宏调用一个宏,我正在使用'call'方式。我不明白为什么它不能正常工作,除非你在调用行中放置一个断点。

请参阅。我有这个:

Sub actualizarDatos()   
     Sheets("DATOS CITAS").Select
     Range("A1").Select
     Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

     ActiveWorkbook.RefreshAll

     Call replaceColumns

     Sheets("Resumen").Activate
End Sub

第一部分是这样写的,因为我在使用大张纸时遇到了一些问题。它让我的优秀停止了。

我正在调用的宏看起来像这样:

 Sub replaceColumns()    
   With ThisWorkbook.Sheets("RFS")
       .Columns("A").Replace _
          What:="2", Replacement:="2", _
          SearchOrder:=xlByColumns, MatchCase:=True
   End With
End Sub

为什么我需要第二个宏?由于具有公式的列未自动更新,因此此宏“修改”公式中使用的单元格。

但是,让我们来看看重要部分和主要问题:

为什么呼叫部分不起作用? - 如果我执行RFS表中的第一个宏(第二个宏中的表单),它可以工作!但我必须从另一张纸上的按钮更新它,所以它不是答案。 - 如果我放置一个断点并从随机表中执行第一个宏,它就可以了。

我也直接尝试使用宏名称,而不是使用“调用”。不工作。甚至直接在写入调用行的第一个宏内写宏内容,它也不起作用!! 由于某种原因,它错过了那条线。有谁知道为什么?

谢谢!

[编辑]

解决

我必须在我的表配置中做一些事情。如果有人在刷新时遇到同样的问题,那就到下一个:

对于每个表格,您将在RefreshAll中刷新,选择它并转到顶部菜单中的“设计”。现在转到属性并取消选中“启用后台刷新”复选框。 这是它的外观:

properties window to change the refresh settings of a table

1 个答案:

答案 0 :(得分:1)

你有没有尝试制作Sub Public。像:

#If VBA7 Then
  Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
   Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

此外,对于第一个过程,请尝试放置“睡眠”命令以确保等到Excel完成刷新。

omf

并将此代码放在模块的顶部:

{{1}}