MS AccessでMS Excelを操作するルーチンを実行しています。 ワークブック内のすべてのワークシートから統合レポートワークシートを作成しています。ワークシートの一部だけが "dockName"という名前の範囲を持っています。私のルーチンは、ドック名と関連するワークシート名を持つ配列を作成しています。統合ワークシートには、関連するワークシートへのドック名とハイパーリンクのリストが含まれています。特定の名前付き範囲を持つすべてのワークシートを見つける
作品次のコードが、それは二回のワークシートを横断して、私は「dockName」の名前付き範囲とワークシートの合計数を取得するためのより良い方法があると信じて
' cycle through each worksheet to find out if
' the worksheet has a named range of "dockName"
' if the named range is found increment irow
For Each ws In wbWorking.Worksheets
On Error Resume Next
Set rngDock = ws.Range("dockName")
On Error GoTo err_trap
If Not rngDock Is Nothing Then
irow = irow + 1
End If
Next ws
If Not ws Is Nothing Then Set ws = Nothing
' redim an array with the appropriate number of rows
icol = 1
ReDim vDockSheetNames(irow, icol)
irow = 0
' cycle through the worksheets and gather the
' dockName and worksheet Name into vDockSheetNames array
For Each ws In wbWorking.Worksheets
On Error Resume Next
Set rngDock = ws.Range("dockName")
On Error GoTo err_trap
If Not rngDock Is Nothing Then
vDockSheetNames(irow, 0) = rngDock.Value2
vDockSheetNames(irow, 1) = ws.name
irow = irow + 1
End If
Next ws
dockNameの名前を確認しながらループすることができます。見つけられるたびにRedimを使用して配列を展開し、シートと値を記録します。 – SJR
@SJR私は、配列を数回赤くすることは非常に効率が悪いと読んだことがあります。ワークシートを2回ループすることの非効率性が、赤字の非効率性と同等であるかどうかはわかりません。これらのワークブックには数百のワークシートが含まれている場合がありますが、その一部には特定のドックに関する情報が含まれています。 –
私はどちらか分かりません - おそらくテストの価値があります。別のオプションは、ファイル内の名前付き範囲の総数に基づいて最初に1回だけリダイレクトすることです。次に、あなたは十分なスペースがあることを知っています(あなたは配列の空のスペースで終わるでしょうが、それは問題ではありません)。 – SJR