痔になりやすい生活習慣とは?

お世話になっております

excelで「今開いたシート名までのパス」を取りたいのですが、方法がわかりません

現在
For FileNo = 1 To .FoundFiles.Count(あるフォルダの中にある)
***************
For intNum = 1 To intSC(ファイルの中のシートを端から開いて作業する)
***************
というようにfor nextであるファイルのあるシートを指定して作業するようになっています
いったん、別のファイルを選択してからまたこの開いたシートに戻る必要があるため、この直前に開いたシートのパスが必要なのです

「ThisWorkbook.Path」などではコードが書いてあるファイルのパスになってしまいます

どうか教えていただけると大変助かります
宜しくお願いします

A 回答 (3件)

.FoundFiles.Countを使える人が、


>Workbooks.Open "myBook.Path & " \ " & myBook.Name"
こんな書き方をするとはちょと信じられませんが。。(^^;;;

という突っ込みは置いといて。。

myBook.PathとかmyBook.Nameは変数ですので(定数ではない)
 ””で囲む必要はありません。

 ¥ だけを囲みます。

 Workbooks.Open myBook.Path & " \ " & myBook.Name

もしこれでエラーがでるようでしたら、質問者のコードを全て提示してください。
その方が解決が早いでしょう。
 
    • good
    • 0
この回答へのお礼

ありがとうございました
シートの選択もやっとなんとかできました
もっとスマートな書き方があるだろうとは思いましたが
とりあえず急ぎだったので今回はこれでよしとします
すぐに対応していただき、またご指摘いただき大変ありがとうございました

お礼日時:2008/03/27 16:43

>別のファイルを選択してから


>またこの開いたシートに戻る必要があるため
>この直前に開いたシートのパスが必要なのです 

この文言ではいくつか受け取り方がありますが、
それは無視して、パスの取得方法のための回答


●のコードを追加する
'-----------------------------------------
● Dim myBook As Workbook

For FileNo = 1 To .FoundFiles.Count

● Set myBook = Workbooks.Open(.FoundFiles(FileNo))

  For intNum = 1 To intSC
    ************
'-------------------------------------------

開いたブックのパス:   myBook.Path
開いたブックのフルパス: myBook.Path & "\" & myBook.Name
開いたブックの選択:   myBook.Select

但し、このオブジェクト変数myBookをどこで使用するかで、
宣言場所が違ってくるのは言うまでもありません。
以上。
 
    • good
    • 0
この回答へのお礼

すいません
Workbooks.Open "myBook.Path & " \ " & myBook.Name"
とすると「型が一致していません」というエラーがでます
色々やってみたのですが、どうしてもできませんでした
そしてそこからシートを指定する方法がわかりませんでした
でも、ご回答いただきありがとうございました
理解が足りず申し訳ありません

お礼日時:2008/03/26 17:40

>別のファイルを選択してからまたこの開いたシートに戻る必要があるため、


ファイルオブジェクトないしシートオブジェクトを変数に保存しておけばいいのでは?
パスは別に必要じゃないです。
    • good
    • 0
この回答へのお礼

すいません。
変数にいれるためのファイルオブジェクトないしシートオブジェクトの書き方が違っているらしくどうしてもできません
ご回答いただきありがとうございました
いただいたお答えを参考にもう少しオブジェクトについて調べてみたいと思います

お礼日時:2008/03/26 17:31

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

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

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

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QExcel VBA:ひとつ前に開いていたシート名の取得

Sheet1,2,3があり、全て同じ種類の「表」が書かれているとします。
例えばクラス名簿だとして、
Sheet1には出席番号1~10の生徒のデータ、
Sheet2には出席番号11~20の生徒のデータ、のように。
各シートのうち、違うのはデータの中身であって、
[出席番号][生徒氏名]などの項目は同じです。
この時、
Sheet1で項目名を変更した時、Sheet2、Sheet3の項目名も同時に変更させたいです。
Sheet1の[出席番号]を[No.]に変更したら、Sheet2,3の[出席番号]も自動的に[No.]に変更させたいです。
また、変更可能なのはSheet1だけでなく、Sheet2の項目を変更した時もSheet1,3の項目を自動的に変更したいです。

常にSheet1の項目を参照するのであれば、
Private Sub Workbook_SheetActivate(ByVal ActSheet As Object)
SName = "Sheet1"
Sheets(SName).Range("A4:G4").Copy'Sheet1の項目をコピー
Sheets(ActSheet.Name).Range("A4").Select
ActiveSheet.Paste'現在アクティブなシートにSheet1の項目をコピー
End Sub
で可能でした(諸事情によりセル内に「=Sheet1!A4」等と書きたくないです)。

このコードで、
参考するシート名を入れる変数SNameに「1つ前に開いていたシート名」を入れることができれば可能だと思うのですが、
そのようなデータを取得することはできるでしょうか?

よろしくお願いします。

Sheet1,2,3があり、全て同じ種類の「表」が書かれているとします。
例えばクラス名簿だとして、
Sheet1には出席番号1~10の生徒のデータ、
Sheet2には出席番号11~20の生徒のデータ、のように。
各シートのうち、違うのはデータの中身であって、
[出席番号][生徒氏名]などの項目は同じです。
この時、
Sheet1で項目名を変更した時、Sheet2、Sheet3の項目名も同時に変更させたいです。
Sheet1の[出席番号]を[No.]に変更したら、Sheet2,3の[出席番号]も自動的に[No.]に変更させたいです。
また、変...続きを読む

Aベストアンサー

私も単純に作業グループで操作すれば良いだけだと思いますが...

> 1つ前に開いていたシート名...

というのは、「セルの変更があったシート」の内容を、それ以外の
シートに同期させる...という動作ですから、SheetChange イベントの
Sh が使えるかと思います。

値の変更のみ対応で良ければ、ThisWorkbook モジュールに下記のような
コードで。

Private Sub Workbook_SheetChange( _
    ByVal Sh As Object, _
    ByVal Target As Range)

  Const ADDR = "A4:G4" ' 同期させるセルのアドレス
  Dim S As Worksheet

  If Not Intersect(Target, Sh.Range(ADDR)) Is Nothing Then
    On Error GoTo ERROR_HANDLER
    Application.EnableEvents = False
    For Each S In ThisWorkbook.Worksheets
      If Not S Is Sh Then
       S.Range(ADDR).Value = Sh.Range(ADDR).Value
      End If
    Next
  End If

TERMINATE:
  Application.EnableEvents = True
  Exit Sub
ERROR_HANDLER:
  MsgBox Err.Description, vbCritical
  Resume TERMINATE
End Sub

書式の変更等まで同期させたいなら、VBA では難しいですから、やはり
作業グループの方法をとった方が手っ取り早いでしょうね。

なお、ActiveSheet.Previous はシートタブ上での並びでアクティブ
シートの一つ前のシートを単に返すだけですから、必ずしも前回の
アクティブシートを返すとは限りません。

私も単純に作業グループで操作すれば良いだけだと思いますが...

> 1つ前に開いていたシート名...

というのは、「セルの変更があったシート」の内容を、それ以外の
シートに同期させる...という動作ですから、SheetChange イベントの
Sh が使えるかと思います。

値の変更のみ対応で良ければ、ThisWorkbook モジュールに下記のような
コードで。

Private Sub Workbook_SheetChange( _
    ByVal Sh As Object, _
    ByVal Target As Range)

  Const ADDR = "A4:G4" ' 同期させるセ...続きを読む

QExcelVBAでBookを開く時にファイル名の一部だけを指定で

VBA初心者です。
ExcelVBAで決まったフォルダーのファイルを開きたいのですが、ファイル名が固定した文字+日付になっているため、この固定した文字だけでこのファイルを開く方法を教えて下さい。このフォルダーには2つファイルがありますが、もう1つは全く違うファイル名です。

Aベストアンサー

> ワイルドカード"*"はどんな時に使えるのですか

Dir関数を使用時の"*" (アスタリスク) および "?" (疑問符) のワイルドカード文字については、
VBAのヘルプを参照し、特に「使用例」のコードを理解してください。

その他 VBAでの ワイルドカード使用に関しては、ヘルプで Like で検索して、
Like 演算子 を参照し、同じく「使用例」のコードを理解されたら宜しいかと思います。


> 通常のOPENメソッドでの> ファイル名指定では使えないと思うのですが。

Workbooks.Openメソッドの1番目の引数は、ファイルが特定出来るように指定する必要が
ありますので、当然 ワイルドカード文字は、使用出来ません。

殆ど、フルバスで指定します。 もし、パス名を省略すると カレントホルダ内のファイルを
指定したことになります。([メニュー]-->[オプション]-->[全般]タブの中で指定)

QVBAでワークブックの名前を変数にして開かせる?

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=myMgs, Title:=mytitle)

If mywbname <> "False" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"

End If

End Sub
なんてなものを作ったのですが、mywbnameを変数として受け取ってくれません。なのでそんなファイルはない…なんてことになっています。

構文自体の見直しも含めてアドバイスお願いします。
蛇足かもしれませんが、○○○のところは個人名が入ります。
C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
の箇所のmywbnameを既存のファイル名にしてみるとMgsBoXに適当な文字さえ入れれば、そのファイルは開いたので問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが、よろしくおねがいします。

最近VBAを勉強し始めたばかりです。 面白いですね…。

さて、恐らく基礎なんでしょうけれど、行き詰まっているので是非アドバイスをお願いします。
とりあえず、テキスト見ながら作ったマクロですがダメでした。
目的は対話型?で入力した名前のワークブックの名前を開かせるというものです。
Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

myMgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Applicatio...続きを読む

Aベストアンサー

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
MsgBox "こちらは" & 変数 & "例です"
End Sub

違い分かりますか


修正したものを載せておきます

Sub Macro1()
Dim mywbname As String
Dim mymsg As String, mytitle As String

mymgs = "開いて欲しいファイル名を入力してください"
mytitle = "ファイルを選択"
mywbname = Application.InputBox(Prompt:=mymgs, Title:=mytitle)

If mywbname <> "" Then

Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"

End If

あと、InputBoxの未入力の戻り値は "False" では無く "" です
>If mywbname <> "False" Then
If mywbname <> "" Then

こんな所でしょうか

>問題なのはmywbnameを入力した名前に置き換えてくれない部分だと思うのですが
その通りです、変数と文字列の連結方法が間違っています
>Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\mywbname.xls"
Workbooks.Open Filename:="C:\Documents and Settings\○○○\デスクトップ\" & mywbname & ".xls"
とします
したのマクロを実行してみてください

Sub test()
Dim 変数 As String
変数 = "変数を""""でくくっていない"
MsgBox "こちらは変数を""""でくくった例です"
Msg...続きを読む

QエクセルVBAでセルに入力したパスでブックを開く

Excel2013で、あるファイルを使用している時に、別のブックを開きたいとして、
例えば、D:\oshiete\Desktop\2014年\開きたい.xlsm
とT6セルにいれてあり、VBAを読み込むと開くようにするにはどうすればよいでしょうか?

はじめに、エラー回避でファイルが存在しているのと、まだ開いていないことを確認してから動かしたいです。 色々やってみたけどうまくいかなかったので、よろしくお願いいたします。

Aベストアンサー

>VBAを読み込むと開くようにする

すいません、ブックを開いたときに同時に開くではなく、
VBA読み込み時に開く場合は

VBEから、挿入→標準モジュールで標準モジュールを挿入し
以下のコードを貼り付けてください。
Alt+F8または表示→マクロから「指定ファイルを開く」を選び実行で
T6セルのファイルを開きます。

コードの内容はNo1と同じものですが、補足致します。
末尾「'★」は同様で、末尾「'☆」の行の「T6」を変更することで
対象のセルアドレスを変更できます。


■VBAコード

Sub 指定ファイルを開く()
Dim i As Integer
Dim filepath As String
filepath = Range("T6").Value '☆
If Dir(filepath) = "" Then
  MsgBox filepath & vbCrLf & "はファイルが見つかりません。" '★
  Exit Sub
End If
For i = 1 To Workbooks.Count
  If filepath = Workbooks(i).FullName Then
    MsgBox filepath & vbCrLf & "は既に開いています。" '★
    Exit Sub
  End If
Next i
Workbooks.Open Filename:=Range("T6").Value
End Sub

>VBAを読み込むと開くようにする

すいません、ブックを開いたときに同時に開くではなく、
VBA読み込み時に開く場合は

VBEから、挿入→標準モジュールで標準モジュールを挿入し
以下のコードを貼り付けてください。
Alt+F8または表示→マクロから「指定ファイルを開く」を選び実行で
T6セルのファイルを開きます。

コードの内容はNo1と同じものですが、補足致します。
末尾「'★」は同様で、末尾「'☆」の行の「T6」を変更することで
対象のセルアドレスを変更できます。


■VBAコード

Sub 指定ファイルを開く()
Di...続きを読む

QEXCELマクロで、開いてはいるがアクティブでないファイルをアクティブにする方法?

いつもこちらのサイトではお世話になっております。EXCELのマクロについて教えてください。

ファイルを2つ開いているとき、アクティブになっていないほうのファイル名を取得し、そのファイルをアクティブにしたいと考えています。

条件1)
アクティブにしたいファイル名は必ず「グラフ」で始まり、「.xls」で終わります。

条件2)
ファイルは2つともEXCELファイルです。



すみませんが、どうしてもやりかたが思いつかず、教えてください。

Aベストアンサー

#1です。

なるほど、こちらの認識不足でした。

If wb.Name <> ActiveWorkbook.Name Then

     ↓

If wb.Name <> ActiveWorkbook.Name And Windows(wb.Name).Visible Then

で、非表示ブックを対象外にします。

Q【Excel】 空白以外の行を選択するマクロを教えてください。

こんにちは

Excelで、オートフィルターを使い「空白以外のセル」を表示させ、
その空白以外の行をコピーしたいのですが、ここまでをマクロにすると
どのようになるでしょうか。

よろしくお願いします。

Aベストアンサー

> オートフィルターを使い「空白以外のセル」を表示
これは、マクロの自動記録で取得できますよね。

> 選択された空白以外の行をコピー
事前にデータ範囲に名前(例:QQQ)をつけておけば、
 Range("QQQ").Copy
を、上記マクロに続ければよいでしょう。


人気Q&Aランキング