0

私はこれを達成するためにVBAの他のいくつかの部分を一緒にスクラブルしようとしましたが、言語の初心者なので運がありませんでした。VBAを使用して次のことを実現したいと思います。

  • ロード時に以下を実行します。
  • 別のブックが現在開いているかどうかを確認します。このワークブックは、そのワークブックのネットワーク上の場所全体を含む名前付き範囲(input_sheet_location)によって指定されます。
  • 開いていない場合は、開いても大丈夫かどうかをユーザーに確認してください。
  • そのロードが失敗した場合(つまり、ロードが見つからない/制限されている/指定された範囲が空の場合)、エラーメッセージを表示してサブを終了し、ユーザーが続行できるようにします。
  • 開いている場合は、プロンプトなしで続行します。

私はこれらすべてが達成可能であると99%確信しています。私には、それらをすべてつなぎ合わせるために必要なノウハウがありません。そのため、私が本当に欠けているパズルの唯一のピースは、上記の2番目の箇条書きです。他に何でも、私は(うまくいけば)理解することができます。

御時間ありがとうございます!

4

1 に答える 1

0

私はそれを理解することができました。返信ありがとうございます。

こんなふうになります:

Sub IsInputSheetOpen()
Dim Ret

Ret = IsWorkBookOpen(range("input_sheet_location_nobrackets"))

If Ret = True Then
    MsgBox "Input sheet is open."
Else
    MsgBox "Input sheet is not open. Auto output won't work without it."
End If
End Sub

Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long

On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0

Select Case ErrNo
Case 0:    IsWorkBookOpen = False
Case 70:   IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function

重要なことは、参照として使用するために必要な角括弧を使用せずに、名前付き範囲 (input_sheet_location_nobrackets) 内でファイルの場所をフォーマットすることでした。上記はかなり面倒だと思いますが、うまくいくようです!

于 2012-05-21T09:34:11.617 に答える