Excel:在一个工作表中运行宏会导致从不同工作表到该工作表的所有引用丢失其引用并返回#REF

33qvvth1  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(123)

我当前在报表模型中使用多个宏。遇到的问题如下:
我使用的第一个宏复制工作表A中的所有数据(数据基于其他工作表的公式)并将硬值粘贴到工作表B中。接下来,我有一个不同的工作表C,其中一些数据引用并链接到工作表B。
当我再次运行工作表1中的宏时,工作表B中的数据可能会更改,这不是问题。但是,工作表C中的引用给予了#REF!,而不是链接到工作表B中的正确单元格。
例如,当我在工作表C中使用以下代码时:

  1. =IF(LEFT('WorksheetB'!A1;3)="Yes"; 'WorksheetB'!B1; 0)

字符串
当我运行宏时,我得到:

  1. =IF(LEFT('WorksheetB'!#REF!;3)="Yes"; 'WorksheetB'!#REF!; 0)


当工作表A中的宏导致工作表B中的数据发生更改时,是否有方法保持与工作表B的链接?
我尝试了所有的方法。从用F4锁定单元格到创建另一个宏。
下面是宏的代码:

  1. Sub X()
  2. '
  3. If Worksheets("Checks").Range("C2").Value > 0.01 Then
  4. MsgBox "One or multiple checks is/are invalid"
  5. Exit Sub
  6. End If
  7. Filename = ActiveWorkbook.Name
  8. Mypath = ThisWorkbook.Path
  9. Sheets("Output for Exact").Select
  10. Myname = Filename & " " & Range("B2") & " " & "Q" & Sheets("General Input").Range("B5").Text & " EXPORTFILE "
  11. Columns("A:W").Select
  12. Selection.Copy
  13. Sheets("Accruals Previous Period").Select
  14. Range("A1").Select
  15. Sheets("Output for Exact").Select
  16. Columns("A:W").Select
  17. Application.CutCopyMode = False
  18. Selection.Copy
  19. Sheets("Accruals Previous Period").Select
  20. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  21. Application.CutCopyMode = False
  22. Application.Run "Wisnullenrf3"
  23. End Sub

deyfvvtc

deyfvvtc1#

让我们从清理代码开始:

  1. Sub X()
  2. If Worksheets("Checks").Range("C2").Value > 0.01 Then
  3. MsgBox "One or multiple checks is/are invalid"
  4. Exit Sub
  5. End If
  6. Filename = ActiveWorkbook.Name
  7. Mypath = ThisWorkbook.Path
  8. 'Sheets("Output for Exact").Select
  9. Myname = Filename & " " & Range("B2") & " " & "Q" & Sheets("General Input").Range("B5").Text & " EXPORTFILE "
  10. 'Columns("A:W").Select
  11. 'Selection.Copy
  12. 'Sheets("Accruals Previous Period").Select
  13. 'Range("A1").Select
  14. Sheets("Output for Exact").Range("A:W").Copy
  15. Sheets("Accruals Previous Period").Range([the specfic cell where the PasteSpecial is to occur]).PasteSpecial Paste:=xlPasteValues
  16. Application.CutCopyMode = False
  17. Application.Run "Wisnullenrf3"
  18. End Sub

字符串
执行PasteSpecial的行需要有特定的单元格,PasteSpecial需要在该单元格中发生。
你会注意到我去掉了所有的“空格”。你不必选择一个单元格来做什么,只要引用这个单元格,然后对它做需要做的事情,或者从它提取你需要的东西(谷歌“面向对象编程”了解更多细节)。

展开查看全部

相关问题