Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


36234 / 76732 ←次へ | 前へ→

【45681】Re:リンク式の「値の更新」をトラップしたいのですが
お礼  おやじ  - 07/1/10(水) 16:27 -

引用なし
パスワード
   ▼ハチ さん:

ご回答ありがとうございます。
間違っていたらなんて、とんでございません。

  If CreateObject("Scripting.FileSystemObject").FolderExists(FuPa) = False Then
      MsgBox "ネットワークが不良です"
      ActiveWorkbook.Saved = True
      Application.Quit
    ElseIf Dir(FuPa & "\" & WbName & ".xls") = "" Then
      MsgBox "この様式は運用を中止している"
      ActiveWorkbook.Saved = True
      Application.Quit
    Else
      Worksheets(WsName).Range("B1").Value = "='" & FuPa & "\[" & WbName & ".xls]" & WsName & "'!$A$1"
        If Worksheets(WsName).Range("A1").Value <> Worksheets(WsName).Range("B1").Value Then
          MsgBox "この様式は旧版。使用できない。", vbOKOnly + vbCritical
          ActiveWorkbook.Saved = True
          Application.Quit
        End If
  End If

以上でバッチリ行きました。
(リンク式の削除は、Workbook_BeforeSave()でB1=""としています。)
エクセル本体の検知能力に任せた後で対応するのではなく、対象物がある事を確認して、参照式を入れるわけですね。
Dir関数のヘルプ(2000)を見ると、「該当するファイルが見つからないとき、Dir関数は長さ0の文字列を返します」と、ありました。
やりたい事から、命令文が引ける逆引きがあると便利ですね。素人だとヘルプからヒットさせる文言が浮かびません。

作動確認は直ちに取れたのですがご返事が遅れたのは、もう一つ壁に当たってしまったからです。
試行錯誤中に見つけたのですが、参照するシート名が該当するファイルに無いと、「シートの選択」画面が表示されます。
これもトラップして、例えば「原紙のシート名に誤りがある、管理者に問い合わせしろ」的な案内を出したいと思いました。

そこで、上記のElse以降に以下を入れてみたのですが、最初の「c = Workbooks(・・・」でインデックスが有効範囲に無いとエラーが出ました。
対象ファイルを開いていないとだめかと、やってみたのですが同じでした。
変数を使わずにストレートに「\\SV\原紙\62_2」としてみたのですが、同じです。

やっていることは、原紙のシート数を数え、インデックス番号を利用して、同じシート名が有れば自分のシートにリンク式を入力。
無ければ、B1セルが空欄のままなので、それを拾って、同じシート名が無いです。と表示させ抜けようとしています。
シート数は1ブックに原則1シート、多くても3シート以内です。
For Each・・NextやDo Loopを使えばスマートでしょうが、そこまで行かない所でこけてしまっています。(これだと、シートのインデックス番号が変わったり、飛び番号になったら、またエラーですものね。・・・今気が付きました)

ついでと言っては大変無礼で申し訳ないのですが、お分かりになりませでしょうか?

      c = Workbooks(FuPa & "\" & WbName).Worksheets.Count
      For i = 1 To c
        If Workbooks(FuPa & "\" & WbName).Worksheets(c).Name =WsName Then
          Worksheets(WsName).Range("B1").Value = "='" & FuPa& "\[" & WbName & ".xls]" & WsName & "'!$A$1"
        End If
      Next i
      If Worksheets(WsName).Range("B1").Value = "" Then
          MsgBox "保管されている原紙のシート名が間違っている"
          ActiveWorkbook.Saved = True
          Application.Quit
        Else
          If Worksheets(WsName).Range("A1").Value <> Worksheets(WsName).Range("B1").Value Then
            MsgBox "この様式は旧版。使用できない。", vbOKOnly+ vbCritical
            ActiveWorkbook.Saved = True
            Application.Quit
          End If
      End If

0 hits

【45675】リンク式の「値の更新」をトラップしたいのですが おやじ 07/1/10(水) 10:05 質問
【45679】Re:リンク式の「値の更新」をトラップした... ハチ 07/1/10(水) 13:53 回答
【45681】Re:リンク式の「値の更新」をトラップした... おやじ 07/1/10(水) 16:27 お礼
【45682】Re:リンク式の「値の更新」をトラップした... ハチ 07/1/10(水) 17:26 発言
【45684】Re:リンク式の「値の更新」をトラップした... おやじ 07/1/10(水) 18:09 お礼
【45687】Re:リンク式の「値の更新」をトラップした... ハチ 07/1/10(水) 18:32 発言
【45691】Re:リンク式の「値の更新」をトラップした... おやじ 07/1/11(木) 8:18 発言

36234 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free