こんにちわ。

相対パスでブックをオープンしようとすると、
「オブジェクト変数、またはwithブロック変数が設定されていません。」というエラーが表示されてしまいます。
絶対パス指定だと、正常にオープンできますし、同じ相対パス指定で、ブックのコピー&ペーストもできています。

なぜなのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

カレントディレクトリが正しくないとか?


CurDir関数?で確認してみてはいかがでしょうか。
最初に起動したときは開いたファイルのディレクトリがカレントになっていない気がします。

ChDirステートメントを使って変更するとうまくと思います。
(それだと絶対パス指定と同じになりますが。。。)

見当違いでしたらすみません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

そのとおり、相対パスで開こうとすると、excel.exeが格納されているパスが
デフォルトパスになっていた為、上記のエラーが出ていました。
そこで、デフォルトパスの指定を行ってから、相対パス指定でファイルのオープンをしてみたところ、上手くできました。

ありがとうございました。

お礼日時:2001/05/25 16:03

Workbooks("Book1.xls").Path


で、開いてるワークブックのパスが取得できるので、

Workbooks.open Workbooks("Book1.xls").Path & "\Book2.xls"
などとしてみてはいかがでしょうか。

親フォルダ上のファイルを開くなら、
Workbooks.open Workbooks("Book1.xls").Path & "\..\Book3.xls"
でOKだと思います。
    • good
    • 0

>質問:相対パスでExcel Bookのオープン


>相対パスでブックをオープンしようとすると、
>「オブジェクト変数、またはwithブロック変数が設定されていません。」
>というエラーが表示されてしまいます。

なにで、相対パスでExcel BookをOpen使用としているのですか?
VBAそれとも・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

Excel2007でIFERROR関数などを使っていました
しかし、以前のExcelバージョンだと使えないようです。
そこで、どの関数がどのExcelバージョンから使用可能か?
というリストのようなものを掲載しているサイトはありますか?

Aベストアンサー

下記ページで2007で追加された関数が解ります。

Excel(エクセル)基本講座:Excel(エクセル)関数一覧表
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html

Q【オブジェクト変数または With ブロック変数が設定されていません】の対処方法

windowsNT、Excel2000を使用しています。
マクロを作成したところエクセルを立ち上げる都度に
【オブジェクト変数または With ブロック変数が設定されていません】
というエラーが表示されるようになりました。

マイクロソフトのHPで調べたところ
http://support.microsoft.com/default.aspx?scid=kb;ja;316478
と解説があったのですが、結局何をすれば良いのか分かりません。
このエラーの解消方法を教えて下さい。

Aベストアンサー

マクロの構文が間違ってるんでしょうね・・・

QExcel関数のようなものはありますか?

こんにちは。まだプログラミングをほとんどしたことがないのでわからないことがあります。

現在Excelを使っていますがExcel関数は非常に使いやすいく重宝しています。
Excel関数は300種類ほどあるそうですが、C++やVB、C#、JAVAなどのプログラムにもExcel関数のようなものが
あらかじめ用意されているのでしょうか?
もしExcel関数の中で使いたいものがあり、そういう関数がソフト側で用意されてない場合は自作するしかないのでしょうか?

Aベストアンサー

office2003以降かつ.Netで作成という話しなら、事実上「ある」に等しいかもしれませんね。

.Netの場合、ライブラリとして読み込む側の言語についてあまり意識する必要はありません。(JAVAで本体のプログラムという訳にはいかないが)
とはいえ、プログラム経験が浅いのでしたら、VB.NETでやるというのが吉であると思います。(関数のみならず、マクロも利用できますのでね/office2003以降)

# 開発環境を安くならC#となります(Borland C#Builderなら無料)

参考URL:https://mypage.borland.co.jp/mypage/index.html?ret_to_semi_list=1&page_act=LI_REG

QエクセルVBAでブックを相対パスで保存する

お世話になります。
苦労しながらもエクセルVBAをいじっています。仕事の効率を上げるために、VBAで自動化をしていますが、わからないことがありますので教えてください。
月ごとのシートを作成して、その月に完成させたプロジェクトのリストを入力するブックを作り、各契約者に配りたいと思っています。そのブックには、報告書提出を簡素化できるように、作成したい該当月のシートだけを抽出して決められた名前で保存し、電子メールに添付して送信できる状態にした報告書作成のプログラムを組んでいます。が、抽出されたシートだけのブックを、オリジナルのブックがあるフォルダと同じところに保存したいんです。"名前を付けて保存"をVBAに設定すると、絶対パスが必要な要ですし、もしも指定しなければ作業フォルダ(カレントフォルダ)に保存されるようですが、何とかしてオリジナルのブックと同じフォルダに保管できないものでしょうか。
どうぞよろしくお願いします。
ちなみに、下記が自分なりにやってみたものです。
---------------------------------
Private Sub CommandButton1_Click()

Dim myName As String
Dim pasu As String
With ListBox1
If (.ListIndex = -1) Then
MsgBox "提出用報告書を作成するシートを選択してください"
Else

Worksheets(.List(.ListIndex)).Select
pasu = ActiveWorkbook.Path
ActiveSheet.Copy
myName = ActiveSheet.Name

ActiveWorkbook.SaveAs Filename:= _
"" & myName & "" & Application.UserName & ".xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Unload UserForm2

End If
End With
End Sub

お世話になります。
苦労しながらもエクセルVBAをいじっています。仕事の効率を上げるために、VBAで自動化をしていますが、わからないことがありますので教えてください。
月ごとのシートを作成して、その月に完成させたプロジェクトのリストを入力するブックを作り、各契約者に配りたいと思っています。そのブックには、報告書提出を簡素化できるように、作成したい該当月のシートだけを抽出して決められた名前で保存し、電子メールに添付して送信できる状態にした報告書作成のプログラムを組んでいます。が、...続きを読む

Aベストアンサー

こんにちは。

ChDir も一つの考え方かもしれませんが、

シート1つのブックが出来上がって、そのActiveWorkbookと同じ場所に保存するなら、作ったpasu を加えればよいのではありませんか?

  pasu = ActiveWorkbook.Path
  ActiveSheet.Copy
  myName = ActiveSheet.Name
  Fname = pasu & "\" & myName & Application.UserName & ".xls"

ActiveWorkbook.SaveAs Filename:= Fname, _
     FileFormat:=xlNormal, _
     Password:="", _
     WriteResPassword:="", _
     ReadOnlyRecommended:=False, _
     CreateBackup:=False

それから、なるべく、コードは見やすいように整列して書くことが上達の早道と言われています。

なお、読み違えていましたら、申し訳ありません。

こんにちは。

ChDir も一つの考え方かもしれませんが、

シート1つのブックが出来上がって、そのActiveWorkbookと同じ場所に保存するなら、作ったpasu を加えればよいのではありませんか?

  pasu = ActiveWorkbook.Path
  ActiveSheet.Copy
  myName = ActiveSheet.Name
  Fname = pasu & "\" & myName & Application.UserName & ".xls"

ActiveWorkbook.SaveAs Filename:= Fname, _
     FileFormat:=xlNormal, _
     Password:="", _
     WriteResPassword:="", _
 ...続きを読む

QExcel関数について

Excel関数についての質問です。


Excel関数で、実際の仕事上でよく使う関数、ベスト5を教えてください。

また、覚えやすいコツなどがありましたら、教えて頂きたいです。

よろしくお願いします。

Aベストアンサー

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組み合わせて、とても便利です。

-------------------------
COUNTIF(カウントイフ)
条件にあったものの個数を数えます。

COUNTIF(A1:A5,"正解") 正解と書かれている個数を数えます

--------------------
TODAY
今日の日付が表示されます。
---------------------


他にも、平均を出すものや
便利なものはたくさんあります。
その都度、やりたいことを検索して
使っていくのがベストかな?と思います。
Excelの、挿入⇒関数のところで、
検索もできたはずです。


参考リンク
http://pc.nikkeibp.co.jp/pc21/tech/excel36/
http://matome.naver.jp/odai/2135607317537215601
http://www.enjoy-web-jp.com/jp/excel/excel00.html


また、セルの書式設定のユーザー定義はとても便利です。
書き方を勉強しておくと役立つかもしれません。

以上、参考まで

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組...続きを読む

Qオブジェクト変数にブックを格納するには?

vbaで新規にブックを立ち上げて、そのブックの位置を指定したのですが

Sub Sample1()
Dim w As Workbook

Workbooks.Add
w = ActiveWorkbook.Name
w.Top = 0
w.Left = 0

End Sub

これだとエラーになります。

w = ActiveWorkbook.Name
これでは新規ブックを変数に格納できないようです。
w = ActiveWorkbook
だけでもダメでした。

どうすればよいでしょうか?
よろしくお願いします。

Aベストアンサー

>Dim w As Workbook

>w = ActiveWorkbook.Name
>これでは新規ブックを変数に格納できないようです。

wの入れ物を、[Workbook]としたなら、それに、「文字列」を入れようとしても、入るはずがありません。

VBAの場合は、Object を格納するなら、Set wb =ActiveWorkbook
か、新規なら、Set wb = Workbooks.Add ですが、

名前を格納するなら、

Dim wb As Workbook
Dim fn As String
Set wb = ActiveWorkbook
fn = wb.Name

ということでしょう。

それに、これは何をしたいのか分からないです。
>w.Top = 0
>w.Left = 0

新規のブックの位置でしたら、例えば、こういうことでしょう。
wb.Application.Top = 0
wb.Application.Left = 0

QEXCEL ゴールシークの関数?

EXCEL ゴールシークの関数?
ゴールシークを画面操作をしなくて ゴールシーク機能を持つ 関数はありませんか?
無ければ 複合関数は? VBを使わないでEXCEL関数だけで 求める方法を探しています。

Aベストアンサー

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分析ツールは完全にExcelの古いマクロです。

私は、マクロを中心とする回答者のひとりです。何かを使わないという条件付き質問は、学校のテストやクイズやお遊びとしてはありえるとしても、ゴールシークというものは、論理的な計算ではなく、反復する時系列な計算です。それは、基本的にマクロにほかなりません。ただし、私たちが考えるよりも、遥かに速い処理です。それを論理的な計算をするというなら、その求める具体的な質問がなければ、話は進みません。解答を求めたいなら、方法論は何でもアリではないかと思います。そうでないなら、純粋に数式で計算させるMathematica のようなもののほうが良いと思います。

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分...続きを読む

QExcel2010VBAでエラーが出る相対パス指定

 ExcelVBAで,Excel2007と2013で問題無いのに,
Excel2010ではエラーが出る相対パス指定について,
ご教示を頂けると助かります.

 ExcelVBAにて,
○○.dll ファイルを 以下のように宣言して使っています.

Private Declare Function LoadTT Lib ".\○○.dll" _
() As Integer

 プログラムの中で,
ret = LoadTT()
を実行すると,
Excel 2007では相対パスでの指定で問題無く動作しますが,
Excel 2010では相対パスでの指定ではエラー(ファイルが見つからない)"48"が出ます.
そこで,相対パス指定をやめて絶対パスに変更すると問題無く動作します.

 念のため Excel2013でも試したところ,
2007と同様に,相対パス指定でも問題なく動作しました.

 なお,ExcelVBAのファイル「○.xlsm」と「○○.dll」は同じフォルダーに入れています.
 また,
ChDrive ThisWorkbook.Path
ChDir ThisWorkbook.Path
の実行によるカレントフォルダーの確認も,どのバージョンでも同じに正しく確認出来ています.
 
 因みに,バージョンの違う各Excelは別々のPCでの動作ですが,使用OSは Windows7 Professional 32bit で同じです.

 以上のように
Excel2010だけ動作が異なります.

 とりあえずは絶対パス指定にすれば問題は解消するのですが,
Excel2010で特に何か設定したということは無いので気持ち悪く,
原因と思われることでご存じ方がいらしたらご教示を頂けると助かります.

 どうぞよろしくお願い致します.

==

 ExcelVBAで,Excel2007と2013で問題無いのに,
Excel2010ではエラーが出る相対パス指定について,
ご教示を頂けると助かります.

 ExcelVBAにて,
○○.dll ファイルを 以下のように宣言して使っています.

Private Declare Function LoadTT Lib ".\○○.dll" _
() As Integer

 プログラムの中で,
ret = LoadTT()
を実行すると,
Excel 2007では相対パスでの指定で問題無く動作しますが,
Excel 2010では相対パスでの指定ではエラー(ファイルが見つからない)"48"が出ます.
そこで,相対パス指定をやめて...続きを読む

Aベストアンサー

#2の回答者です。

質問者さんは、もう論理的な対処をしたり、回答者の書いた内容の確認もないようです。そこで、後の人のためにまとめておこうと思い立ちました。

----------------
 [.dll] は、[.ocx]に読み替えても可

(1)一般的な.dll (ダイナミックリンク・ライブラリ)は、一般的には、実行ファイル(.exe)や WindowsのSystem32 フォルダに入れる。
 基本はこの通り
 http://www.forest.impress.co.jp/info/knowledge/2-5-3xp.html

(2).dllは、パスの通った所に置く。
 - Shellコマンド(SET PATH)や外部オブジェクト(FileSystemObjectのBuildPath)で、パスは通せる。

(3).dllを絶対パスにする。

(4) Excel 等のOfficeの場合は、設定で、[オプション]-[保存]-[規定のファイル]
で、Current Folder を決め、そこに置く。 要 Excelの再起動。
(非推奨-ファイルと同じ場所に置くことは、ユーザーによる削除したり移動したりするトラブルが想定されるから。)

(5)相対パスは、基本的にはお勧めできない。

過去には、このような例もある。ただし、質問者のExcel VBAの技術としてはかなり低い。
通常、ユーザーが作成したライブラリであっても、当時はMS Officeのディベロッパのユーティリティや現在でも流通しているフリーのインストーラーを使うのが基本だから、そのような問題は本来は発生しない。単なる手続き上の手抜きによるトラブル。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5215;id=excel

 ChDrive ActiveWorkbook.Path
 ChDir ActiveWorkbook.Path
が可能と書いてあるが、私自身は、Win32 APIのSetCurrentDirectory をお勧めする。
---------------------

と、以上が、32ビットでの一般的な対処法です。他にも、Excelの特殊なツールによって、設定を変える方法はあるかとは思いますが、基本的なことは変わらないと信じます。自作で、Excel用のライブラリを作れるレベルなら、このような質問はしないはずです。いたずらに、長く話を伸ばしてもしかたがないので、これで終わりにします。

#2の回答者です。

質問者さんは、もう論理的な対処をしたり、回答者の書いた内容の確認もないようです。そこで、後の人のためにまとめておこうと思い立ちました。

----------------
 [.dll] は、[.ocx]に読み替えても可

(1)一般的な.dll (ダイナミックリンク・ライブラリ)は、一般的には、実行ファイル(.exe)や WindowsのSystem32 フォルダに入れる。
 基本はこの通り
 http://www.forest.impress.co.jp/info/knowledge/2-5-3xp.html

(2).dllは、パスの通った所に置く。
 - Shellコマンド(SET PATH)や...続きを読む

Qexcelのピボット関数

excelのピボット関数はどんな関数ですか?

Aベストアンサー

私自身は「ピボット関数」なる言葉を聞いたことがないけど、貴方はそれを何処で知ったのですか?
ひょっとして、[データベース関数]の中の =GETPIVOTDATA()関数のことでしょうか?
Excel のヘルプ文をお読みになったら如何でしょ。
>ピボットテーブル レポートに格納されているデータを返します。
>GETPIVOTDATA 関数を使用すると、ピボットテーブル レポートに
>表示されている集計データを取得することができます。
で始まる説明があります。
それを読んでから不明なところを質問されることをお奨めします。
何?隅から隅まで、チンプンカンプン?

Q別のブックから、特定のシートを指定して他のブックを開くには

マクロ初心者です。
A.xlsと、B.xlsという2つのブックがあります。
B.xlsはこの時、閉じた状態です。
Aには1つのシートのみがあって、Bには日毎に追加されていく不特定数のシートがあります。
Aのブックのシート内のセル番地A1に、「aaa」と入力した場合、B内の「aaa」という名前のシート名を指定してB.xlsを開くマクロはどう書いたら良いのでしょうか。

頼りきりの質問になってしまって申しわけございません。
何卒宜しくお願い申し上げます。

Aベストアンサー

マクロ記録を取ればある程度作れてしまうと思いますが、予め開くシート名を変数に取得しておく方が簡単でしょう。
A1セルに入力シート名が必ずあるならMacro1でよいですが、入力ミスなども想定しておくならMacro2の方がよいと思います。

ブックAとブックBが別フォルダに存在しているなら、4行目のOpenメソッドは "C:\WORK\B.xls" のようにフルパスで記述してください

Sub Macro1()
Dim wh As String
  wh = Range("A1").Value
  Workbooks.Open "B.xls"
  Worksheets(wh).Activate
End Sub

Sub Macro2()
Dim wh As String
  wh = Range("A1").Value
  Workbooks.Open "B.xls"
  On Error GoTo err0
  Worksheets(wh).Activate
  Exit Sub
err0:
  Worksheets(1).Activate
End Sub

マクロ記録を取ればある程度作れてしまうと思いますが、予め開くシート名を変数に取得しておく方が簡単でしょう。
A1セルに入力シート名が必ずあるならMacro1でよいですが、入力ミスなども想定しておくならMacro2の方がよいと思います。

ブックAとブックBが別フォルダに存在しているなら、4行目のOpenメソッドは "C:\WORK\B.xls" のようにフルパスで記述してください

Sub Macro1()
Dim wh As String
  wh = Range("A1").Value
  Workbooks.Open "B.xls"
  Worksheets(wh).Activate
End Sub
...続きを読む


人気Q&Aランキング

おすすめ情報