質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.40%

  • VBA

    1957questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1683questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • サーバ

    815questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • ファイル

    183questions

    ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

  • コピー

    25questions

    元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

サーバー内のブックを開く際に出る「インデックスが有効範囲にありません。」の回避方法を教えてください。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,379

VBA_beginner

score 1

 前提・実現したいこと

共有制限がされているサーバー上で、閲覧権限を持っているフォルダ内のブック(データ元)を開いて、別のシート(コピー先)に値を貼り付けるマクロを作っています。
コピー先のシートはActiveSheetで、自分のパソコンドライブ内にあります。
まずはデータ元を開いて……と思ったら、以下のエラーメッセージが出てうまくデータ元のブックを開くことができず困っています。
どうか、お知恵をお貸しくださいませ。

インデックスが有効範囲にありません。

 該当のソースコード

Sub データ元の値をコピー先にコピー()
    Dim i As Long
    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = Workbooks("\\サーバー(閲覧権限有)\フォルダA\フォルダA-A_
                  \フォルダA-A-A\フォルダA-A-A-A\データ元ブック.xlsx")
          ↑ここでエラーが出ます。
    Set ws = Worksheets("データ元シート1")

        Workbooks.Open wb, UpdateLinks:=0
End Sub

 試したこと

正しいブック名の取得(存在しないブック名ではない)
自分のパソコン内での操作は問題なくいけました。

 補足情報(FW/ツールのバージョンなど)

Windows2010,Excel2010を使用しています。
変数の定義をするときに、WorkBooksのあとのブック名で上記エラーが出ます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • unz.hori

    2018/03/08 17:53

    "_"を使って改行しているようですが、変数名の途中や文字列の途中で改行することはできないようです。

    キャンセル

  • VBA_beginner

    2018/03/09 09:06

    ご教示誠にありがとうございます。実際のコードは改行なしで書いています。投稿のために見やすくなるよう改行しました。

    キャンセル

回答 3

+2

こうじゃないですかねぇ。
Workbooks("ファイル名")は、オープンしていない状態では通用しないと思います。

Set wb = Workbooks.Open("\\サーバー(閲覧権限有)\フォルダA\フォルダA-A\フォルダA-A-A\フォルダA-A-A-A\データ元ブック.xlsx")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/09 09:10

    ご教示誠にありがとうございます。一度試してみます。

    キャンセル

checkベストアンサー

+1

すでにsousukeさん、TTyp03さんからも回答がありますが、記載いただいたコードには問題が3点あります。

①1命令を次行に継続するための_を文字列指定である"~"の中で行ってしまっており、次行への継続という意味で解釈されていない。
Workbooks("ファイルパス")では開いていないブックを開くことはできない。
Workbooks("ファイルパス")では開いているブックの特定もできない。


①についてはsousukeさんから指摘がある通りです。
ただ、この状態では実行前に文法エラーとなるはずですので、投稿時の記載ミスではないかと推測しています。


②についてはTTyp03さんから指摘がある通りです。
開いていないブックを開く場合はWorkbooks.Open("ファイルパス")を使用します。


③については今回は使用しないかもしれませんが、開いているブックを取得する場合はWorkbooks("ブック名")と指定します。
例えば
\\サーバー(閲覧権限有)\フォルダA\フォルダA-A\フォルダA-A-A\フォルダA-A-A-A\データ元ブック.xlsx
のブックを既に開いている状態であれば、
Set wb = Workbooks("データ元ブック.xlsx")
で対象ブックが取得できます。

フルパス指定してしまうと、やはりブックを見つけられず「インデックスが有効範囲にありません。」と言われてしまうと思います。

i参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/09 09:27

    ご教示誠にありがとうござます。
    Workbooks.Open("ファイルパス")で一発解決しました。これで開発が進められます。
    誠にありがとうございました!

    キャンセル

+1

やるとしたらこうですかね

    Set wb = Workbooks("\\サーバー(閲覧権限有)\フォルダA\フォルダA-A" & _
                  "\フォルダA-A-A\フォルダA-A-A-A\データ元ブック.xlsx")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/09 09:10

    ご教示誠にありがとうございました!実際のコードでは”~”内で改行をしていないので、別の問題のようです。色々試してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.40%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    1957questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1683questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • サーバ

    815questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • ファイル

    183questions

    ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

  • コピー

    25questions

    元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

  • トップ
  • VBAに関する質問
  • サーバー内のブックを開く際に出る「インデックスが有効範囲にありません。」の回避方法を教えてください。