点击获取错误的button,将表单中的行复制到另一个表单

点击一个button后,一些行正在从一个表复制到另一个,但我得到一个错误:

此工作簿包含指向可能不安全的一个或多个外部来源的链接。
如果您信任链接,请更新它们以获取最新数据。 否则,你可以继续处理你的数据。
[更新] [不更新] [帮助]

我已经尝试点击更新不更新,但它不以任一方式复制数据。

我正在从一个单元格的值wbLocationPath:

Set wbLocationPath = WSheet.Range("A2") While wbLocationPath.Value <> "" If IsWorkBookOpen(wbLocationPath.Value) Then For Each wks In Workbooks If (wks.Path & "\" & wks.Name) = wbLocationPath Then Set wb = wks Exit For End If Next wks Else Set wb = Application.Workbooks.Open(wbLocationPath.Value, ReadOnly:=False) End If 

所以在debugging时我得到了设置wb值的错误。

wbLocationPath.value具有A2中的path作为c\users\me\desktop\project\XYZ.xlsx

IsWorkBookOpen(wbLocationPath.Value)则返回false,所以控件出现其他出错的部分。

在粘贴价值方面我没有任何问题。 我的代码对其他数千个文件path工作正常,但它不适用于某些文件path。 我有一些文件夹,我从每个文件夹复制每个文件的数据。 在特定的文件夹(“FOOD ADD”)中获取一些特定文件的问题。 由于我有一些像“10024125(01-0RD)”这样的文件名,因此所有这些types的文件的数据拷贝,但是文件名是“10016818(03-1RD)FOOD ADD”的文件并不复制和通过我提到的错误。

如果打开工作簿并且它来自受信任的位置(请参阅Excel选项►信任中心►信任中心设置►受信任的位置),那么使用select性粘贴,值应该没有问题,因为您只关心值,而不是原来的公式。 但是,直接价值转移可能足以绕过警告。 还有一些隐含的单元格父级工作表引用应该明确。

 with tmpSheet lastrow = .Cells(Rows.Count, "A").End(xlUp).Row Set rng = .Range(.Cells(1, 1), .Cells(lastrow, 1)) '<~~ note all parts belong to tmpSheet end with with pasteSheet For Each c In rng.Cells If c = "ABC" Then 'the following is an alternative method of direct value transfer .Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(1, columns.count) = _ c.Resize(1, columns.count).Value End If Next c end with 

请注意,当你定义rng 。 父级工作表对于.Range是明确的,但不包括.Cells范围的.Cells 。 而且,直接值转移是一种在不使用剪贴板的情况下获得值的更有效的方法。

我强烈怀疑IsWorkBookOpen不期望您发送它的完整path和工作簿名称。 如果只是期望Workbook.Name属性,那么当您发送Workbook.FullName属性时,您将永远不会获得匹配。

 Function IsWorkBookOpen2(sWS As String) Dim b As Long For b = 1 To Workbooks.Count 'Debug.Print Workbooks(b).FullName If lcase(Workbooks(b).FullName) = lcase(sWS) Then _ Exit For Next b IsWorkBookOpen2 = CBool(b <= Workbooks.Count) End Function 

此replace例程对打开的工作簿的完整path和文件名(又名Workbook.FullName属性 )执行不区分大小写的比较,以将其存储在WSheet.Range("A2")

请注意,它被称为IsWorkBookOpen2而不是IsWorkBookOpen

其实在VBA代码中没有问题。 问题在于excel文件。 excel是“链接的工作表”,即它被链接到任何服务器来更新Excel中的值,只要你想打开。 因此,您可以通过select“EditLink”从“数据”菜单更改链接属性。

那么我们可以根据您的要求更改提示属性。

请从MS支持中查看以下解决scheme以禁止该消息:

https://support.microsoft.com/en-us/kb/826921