我在用两张纸交换时遇到错误。 我打开一个工作表并粘贴一些数据,之后我调用一个打开另一个工作表的函数。但是当我再次在第一个工作表中粘贴数据时,它会抛出错误。
For y = 1 To size
Set src = Workbooks.Open("C:Template\Mapping.xlsx")
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range("B" & rowCntr).Value = "abc"
newValue= getNewValue()
rowCntr=rowCntr+1
Next
public Function getNewValue()
Dim newV=123
Set src = Workbooks.Open("C:Template\Mapping - Development v1.0.xlsx")
getNewValue=newV
End Function
第一次它正常工作但是在调用函数getNewValue()
之后它会抛出错误"下标超出范围"在工作表(" Sheet1")。范围(" B"& rowCntr).Value =" abc"线。
请帮忙。
答案 0 :(得分:2)
您的代码示例不完整。值得注意的是,它并没有定义src
是什么,但这正是错误所在:我必须假设src
是一个全局变量,并且在你的两个中设置src
主要功能和功能getNewValue
。
当getNewValue
返回时,src
现在指向您的范围不存在的另一个工作簿。
此外,我不确定是否一次又一次地打开工作簿会导致重新加载,重置或打开多个副本。我建议你只打开一次,例如:
Dim src as Object
Dim src2 As Object
Function main (size As Integer)
Dim y As Integer
Dim rowCntr As Integer
Set src = Workbooks.Open("C:Template\Mapping.xlsx")
Set src2 = Workbooks.Open("C:Template\Mapping - Development v1.0.xlsx")
For y = 1 To size
src.Worksheets("Sheet1").Activate
src.Worksheets("Sheet1").Range("B" & rowCntr).Value = "abc"
newValue= getNewValue()
rowCntr=rowCntr+1
Next
End Function
Public Function getNewValue()
Dim newV
newV = 123
'...whatever you want to do...
getNewValue = newV
End Function
答案 1 :(得分:0)
无需选择/激活,而是使用对象(工作簿,范围)引用,如下所示
Set src = Workbooks.Open("C:Template\Mapping.xlsx") '<~~ open workbook outside the loop since it doesn't depend on it
For y = 1 To size
src.Worksheets("Sheet1").Range("B" & rowCntr).Value = "abc" '<~~ use "src" workbook reference to point to it whatever may be the currently active workbook
newValue= getNewValue()
rowCntr=rowCntr+1
Next