以下のコードは、ワークブックからデータを読み取り、さまざまな配列に格納した後、別のワークブックを開いて特定のタブおよび場所。別のワークブックからマクロを呼び出すときにVBAコードがループを終了する
一度入力すると、新たに開かれたブックのサブルーチンが呼び出され、サブルーチンが正常に実行され(2-3分かかる)、コードは自動的にループを終了します(次のファイルはループ)。呼び出されたマクロの処理時間のためですか?私はこの問題に関するいくつかの洞察を使うことができます、それは非常に役に立つでしょう。事前に感謝:)
Public strFileName As String
Public strfilename2 As String
Public currentWB As Workbook
Public dataWB As Workbook
Sub GetData()
Dim strListSheet As String
Dim ws As Worksheet
Dim Tabnames() As Variant
Dim celladdress() As Variant
Dim values() As Variant
Dim tabcount As Integer
Dim filecount As Integer
Dim j As Integer
Dim k As Integer
Dim i As Integer
strListSheet = "Data_Specifics"
Sheets(strListSheet).Select
tabcount = WorksheetFunction.CountA(Rows(6)) - 1
filecount = WorksheetFunction.CountA(Columns(2)) - 4
ReDim Tabnames(0, 0 To tabcount - 1)
ReDim celladdress(0, 0 To tabcount - 1)
ReDim values(0 To filecount - 1, 0 To tabcount - 1)
For k = 0 To tabcount - 1
Tabnames(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(6, k + 4).Value
celladdress(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(7, k + 4).Value
Next k
For j = 0 To filecount - 1
For k = 0 To tabcount - 1
values(j, k) = ActiveWorkbook.Sheets(strListSheet).Cells(j + 9, k + 4).Value
Next k
Next j
Range("B8").Select
i = -1
Set currentWB = ActiveWorkbook
Do While ActiveCell.Value <> ""
strFileName = ActiveCell.Offset(1, 1)
strfilename2 = ActiveCell.Offset(1, 0)
Application.Workbooks.Open strFileName, UpdateLinks:=False, ReadOnly:=False
Set dataWB = ActiveWorkbook
i = i + 1
For k = 0 To tabcount - 1
Sheets(Tabnames(0, k)).Select
Range(celladdress(0, k)).Select
If values(i, k) <> "XXXXX" Then
Selection.Value = values(i, k)
Else
End If
Next k
strfilename2 = "'" & strfilename2 & "'" & "!ValidateDataNew"
Application.Run strfilename2
dataWB.Close SaveChanges:=True
currentWB.Activate
Sheets(strListSheet).Select
ActiveCell.Offset(1, 0).Select
i = i
Loop
Exit Sub
End Subの
私はあなたのループ内でのActiveCell使用しているからだと疑っていないが、あなたは他のブックを開いているので、セルがアクティブでなくなります。 Debug.Print ActiveCell.Valueを置き、直接ウィンドウを開きます。最後の値は列Bのリストの最後の値に対応していますか? – Absinthe
問題を引き起こしている可能性が非常に高いので、[選択の使用を避ける方法](https://stackoverflow.com/q/10714251/6535336)を実際に調べるべきですが、可能なことはもう1つありますのことを考える;開いているブックが閉じられる前にコードが停止している場合は、他のマクロに 'End'ステートメントがある可能性があります。関連するコードを見ることなく、わかりません。 – YowE3K
アクティブセルをループ状態で使用するとトラブルが発生することがあります。代わりにカウンターを使用して、あなたが作業しているセルを完全に参照してください。 –