2016-05-26 3 views
1

2枚のシートで交換しているときにエラーが発生しています。 私は1枚のシートを開き、この中にいくつかのデータを貼り付けた後、別のシートを開く関数を呼び出します。最初のシートにデータを貼り付けたときにエラーがスローされます。それが正常に動作しますが、機能getNewValue()を呼び出した後、それはエラーワークシートで、「範囲外の添字」(「シート1」)。レンジ(「B」& rowCntr).Valueの=「ABCをスロー初めて別のシートに行く前に現在のシートを無効にする

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 

"行。

助けてください。

+1

「Dim newV = 123」は無効です。 VBAで変数を初期化することはできません。 –

+0

この問題は、開いているブックの両方に「src」という名前を付けたこととは関係があります。第2のものを異なるものにする。それと上記のPaul Ogilvieの言葉。変数を宣言してから値を設定する必要があります。 – DDuffy

答えて

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 
+0

'src'はグローバル変数で、main関数と' getNewValue() 'の両方に設定されているようです。何かがそこに行きます! –

+0

@Paul Ogilvieあなたは正しいです。しかし、私は "参照対活動化"問題に集中しました。なぜなら、与えられたコードは他の場所で何が起こっているのかを推測するにはあまりにも少なすぎるからです。 'Option Explicit'文がなければ、ローカルスコープと暗黙的にVariant変数を使用している可能性があります。そしてその間違った薄暗い声明から、私はそれがそういうものだと大いに思うだろう – user3598756

2

あなたのコード例は不完全であるが、以下のように。明らかに、それはsrcが何であるかは定義していませんが、それはまさにエラーとなります。srcはグローバル変数で、メイン関数と関数getNewValueの両方でsrcを設定する必要があります。

getNewValueが返された場合、srcは、範囲が存在しない別のブックをポイントするようになりました。

さらに、ブックを再度開いて再読み込み、リセット、または複数のコピーが開かれるかどうかはわかりません。たとえば、1度だけ開くことをおすすめします。例:

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 
関連する問題