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

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

新規登録して質問してみよう
ただいま回答率
85.37%
ファイル

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

VBA

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

コピー

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

サーバ

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

Q&A

解決済

3回答

5138閲覧

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

VBA_beginner

総合スコア7

ファイル

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

VBA

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

コピー

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

サーバ

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

0グッド

0クリップ

投稿2018/03/08 08:28

前提・実現したいこと

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

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

該当のソースコード

VBA

1Sub データ元の値をコピー先にコピー() 2 Dim i As Long 3 Dim wb As Workbook 4 Dim ws As Worksheet 5 6 Set wb = Workbooks("\サーバー(閲覧権限有)\フォルダA\フォルダA-A_ 7 \フォルダA-A-A\フォルダA-A-A-A\データ元ブック.xlsx") 8          ↑ここでエラーが出ます。 9 Set ws = Worksheets("データ元シート1") 10 11 Workbooks.Open wb, UpdateLinks:=0 12End Sub 13

試したこと

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/03/08 08:53

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

2018/03/09 00:06

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

回答3

0

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

VBA

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

投稿2018/03/08 09:36

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VBA_beginner

2018/03/09 00:10

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

0

ベストアンサー

すでに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")
で対象ブックが取得できます。

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

参考になれば幸いです。

投稿2018/03/08 11:13

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VBA_beginner

2018/03/09 00:27

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

0

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

VBA

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

投稿2018/03/08 08:56

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VBA_beginner

2018/03/09 00:10

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問