在转到另一张纸之前停用当前纸张

时间:2016-05-26 11:08:48

标签: excel vba excel-vba

我在用两张纸交换时遇到错误。 我打开一个工作表并粘贴一些数据,之后我调用一个打开另一个工作表的函数。但是当我再次在第一个工作表中粘贴数据时,它会抛出错误。

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"线。

请帮忙。

2 个答案:

答案 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