Excel VBA使用单元格引用从其他工作簿复制数据
我在单元格B1中声明了文件名,我正在尝试从另一个工作表导入数据。当前,这将导致订阅超出范围错误。有什么简单的方法可以解决这个问题吗?还是另一种更喜欢的方式?唯一的要求是单元格中包含来自另一个工作簿的数据(文本),而不是引用该工作簿的公式Excel VBA使用单元格引用从其他工作簿复制数据,vba,excel,reference,Vba,Excel,Reference,我在单元格B1中声明了文件名,我正在尝试从另一个工作表导入数据。当前,这将导致订阅超出范围错误。有什么简单的方法可以解决这个问题吗?还是另一种更喜欢的方式?唯一的要求是单元格中包含来自另一个工作簿的数据(文本),而不是引用该工作簿的公式 Sub UpdateFileInfo() If (Range("B1") = "") Then Range("A2:R200").Value = "" Else Filename = Range("B1").Val
Sub UpdateFileInfo()
If (Range("B1") = "") Then
Range("A2:R200").Value = ""
Else
Filename = Range("B1").Value
Range("A2:R200") = Workbooks(Filename).GetActiveSheet.Range("A2:R200").Value
End If
End Sub
出现此错误是因为工作簿未打开 要做到这一点,您必须在写入范围(“A2:R200”)以打开工作簿的命令之前包含一行。但是,您将打开多个工作簿,因此您可能希望使用变量使其更清晰,如下所示:
Sub UpdateFileInfo()
Dim LocalWorkbook As Workbook
Dim RemoteWorkbook As Workbook
Set LocalWorkbook = ActiveWorkbook
If (Range("B1") = "") Then
Range("A2:R200").Value = ""
Else
FullFilename = Range("B1").Value
Set RemoteWorkbook = Workbooks.Open(Filename:=FullFilename, ReadOnly:=True)
LocalWorkbook.ActiveSheet.Range("A2:R200") = RemoteWorkbook.ActiveSheet.Range("A2:R200").Value
RemoteWorkbook.Close SaveChanges:=False
End If
End Sub
一般来说,当您收到订阅超出范围错误时,这是因为您使用不存在的键或索引引用集合的元素(在本例中为工作簿集合)或数组的元素。如果您已经知道源工作表名称(例如:“Sheet1”),则可以使用此选项
Option Explicit
Sub UpdateFileInfo2()
With Range("A2:R200") ' reference target range
If Range("B1") = "" Then ' if currently active sheet B1 cell is empty
.ClearContents ' clear referenced range content
Else
.FormulaR1C1 = "='C:\Users\...\[" & Range("B1").Value & "]Sheet1'!RC" ' fill referenced range with formulas pointing at the corresponding cell in the wanted sheet of the wanted workbook
.Value = .Value ' get rid of formulas and leave values only
End If
End With
End Sub
否则,您可以使用以下模式:
Sub UpdateFileInfo2()
With Range("A2:R200") ' reference target range
If Range("B1") = "" Then ' if currently active sheet B1 cell is empty
.ClearContents ' clear referenced range content
Else
.Value = Workbooks.Open(Range("B1").Value).ActiveSheet.Range(.Address).Value ' have refereneced range values as the newly opened workbook activesheet corresponding one
ActiveWorkbook.Close false ' close newly opened workbook
End If
End With
End Sub
同时,如果您的范围(“B1”).Value
不包含文件的完整路径,请添加它:
Sub UpdateFileInfo2()
With Range("A2:R200") ' reference target range
If Range("B1") = "" Then if currently active sheet B1 cell is empty
.ClearContents ' clear referenced range content
Else
.Value = Workbooks.Open("C:\Users\...\" & Range("B1").Value).ActiveSheet.Range(.Address).Value ' have refereneced range values as the newly opened workbook activesheet corresponding one
ActiveWorkbook.Close false ' close newly opened workbook
End If
End With
End Sub
什么是
GetActiveSheet
?您需要从中读取的工作簿是否已打开?为什么必须打开工作簿才能从中复制数据?有没有办法在不打开另一个工作簿的情况下复制它?此外,通过添加您提到的行,我得到了另一个错误1004据我所知,您必须打开工作簿或刷新引用它的公式,才能从工作簿中获取数据。以只读方式打开文件会非常快,您可以在最后关闭工作簿。但是,如果确实不想打开工作簿,可以将引用远程工作簿的公式放在本地工作簿中,然后在刷新后立即用它们的值替换。感谢您提供了简单的解决方案!不客气。请参见最后一次编辑。如果我的回答解决了你的问题,那么你可以考虑把它标记为“接受”。非常感谢。