Excel VBA質問箱 IV

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

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


5114 / 13644 ツリー ←次へ | 前へ→

【52437】Excelを開いた時に、フォルダ内に指定されたBookがあれば同時に開く方法 PONDOG 07/11/14(水) 13:46 質問[未読]
【52438】Re:Excelを開いた時に、フォルダ内に指定さ... Jaka 07/11/14(水) 14:20 発言[未読]
【52461】Re:Excelを開いた時に、フォルダ内に指定さ... PONDOG 07/11/14(水) 23:45 質問[未読]
【52463】Re:Excelを開いた時に、フォルダ内に指定さ... りん 07/11/15(木) 7:06 回答[未読]
【52466】ありがとうございます☆すみませんがもう1... PONDOG 07/11/15(木) 9:42 質問[未読]
【52480】Re:ありがとうございます☆すみませんがも... Jaka 07/11/15(木) 14:16 発言[未読]
【52569】Re:ありがとうございます☆すみませんがも... PONDOG 07/11/20(火) 10:28 お礼[未読]

【52437】Excelを開いた時に、フォルダ内に指定さ...
質問  PONDOG  - 07/11/14(水) 13:46 -

引用なし
パスワード
   検索してみたのですが、検索の仕方がよくなかったのか見つからなかったので、どなたか教えてください!

 フォルダ内に"システム"というBookと"データ"というBookがあり、"システム"を開いたときに"データ"を同時に開く場合は、
  Pathname = ThisWorkbook.FullName
  If InStrRev(Pathname, "\") > 0 Then
    Pathname = Left(Pathname, InStrRev(Pathname, "\") - 1)
  End If
  Pathname = Pathname & "\データ.xls"
  Workbooks.Open (Pathname)
  ThisWorkbook.Activate
  Application.ScreenUpdating = True
と記入したら同時に開くことができました。

 しかし、"データ"というBookがフォルダ内になかった場合、"システム"だけを開きたい場合はどうすればよいのでしょうか?

よろしくお願いします。

【52438】Re:Excelを開いた時に、フォルダ内に指定...
発言  Jaka  - 07/11/14(水) 14:20 -

引用なし
パスワード
   ブックの有無でよかったら、

ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=8618;id=excel
                           ↑
        この番号を下の記事番号に記入してもいけます。

【52461】Re:Excelを開いた時に、フォルダ内に指定...
質問  PONDOG  - 07/11/14(水) 23:45 -

引用なし
パスワード
   Jaka様 回答ありがとうございます!

教えていただきましたログからDir関数を使うことはわかったのですが、初心者のためどのように活用したらいいのかわからず悩んでいます。
 初心者なりに、なんとかしようと試行錯誤したのですが、「型が一致しません」とエラーが出てしまいます。大変申し訳ございませんが、もう少し詳しく教えてください(>_<)

【52463】Re:Excelを開いた時に、フォルダ内に指定...
回答  りん E-MAIL  - 07/11/15(木) 7:06 -

引用なし
パスワード
   PONDOG さん、おはようございます。

>教えていただきましたログからDir関数を使うことはわかったのですが、初心者のためどのように活用したらいいのかわからず悩んでいます。
> 初心者なりに、なんとかしようと試行錯誤したのですが、「型が一致しません」とエラーが出てしまいます。大変申し訳ございませんが、もう少し詳しく教えてください(>_<)

Dir関数のヘルプより
『Dir 関数は、引数 pathname と一致する最初のファイル名を返します。一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。』
ということなので、たとえばこんな分岐。

  Pathname = ThisWorkbook.Path 'フォルダを取得
  If Right(Pathname, 1) <> "\" Then Pathname = Pathname & "\" 'ルートフォルダ以外
  Pathname = Pathname & "データ.xls" 'データのファイル名
  'ここで分岐
  If Dir(Pathname) <> "" Then
    Workbooks.Open (Pathname)
    '   開いた時の処理が他にあれば
    '   ここに追加する   
  Else
    'ファイルがない場合はメッセージを表示する場合
    MsgBox Pathname, vbInformation, "ファイルなし"
  End If

こんな感じです。

【52466】ありがとうございます☆すみませんがもう...
質問  PONDOG  - 07/11/15(木) 9:42 -

引用なし
パスワード
   りんさんありがとうございます☆教えてくださった通りに入力したらできました☆

"データ"というBookの"一覧表"というSheetの内容を、ユーザーフォームのリストとして表示させるようにしてあったのですが、"データ"のBookを開かなかった場合、ユーザーフォームを開こうと思うと、当然のことながらエラーが出てしまいます。
ブックが開いているかを確認するには、For Each を使えばいいことは調べられたので、下記のように、もとから作ってある文章に【追加】と書いてあるところを書き足しました。しかし、ユーザーフォームを実行しようと思うと”オブジェクトは、このプロパティまたはメソッドをサポートしていません”と言われてしまいました。3つ目の追加の「If データ.name = データ Then」の後がWithになっているからおかしいのか、修正ができません(>_<)教えてください!

Dim LastLow7 As Long
  Dim r As Integer
  Dim s As Integer
  データ = "データ.xls"           '【追加】
 
    For Each データ In Workbooks     '【追加】
      If データ.Name = データ Then   '【追加】
        With ListBox1
          .ColumnCount = 2
          .ColumnWidths = "200;500"
        End With
  
        With Workbooks("データ.xls").Worksheets("一覧表")
          LastLow7 = .Range("A3").CurrentRegion.Rows.Count
            For r = 0 To LastLow7 - 1
              ListBox1.AddItem r
            For s = 0 To 1
              ListBox1.List(r, s) = .Cells(r + 3, s + 1)
              Next
            Next
        End With
      End If               '【追加】
    Next                  '【追加】
      ListBox1.Text = ""         '【追加】

【52480】Re:ありがとうございます☆すみませんが...
発言  Jaka  - 07/11/15(木) 14:16 -

引用なし
パスワード
   >Dim LastLow7 As Long
>  Dim r As Integer
>  Dim s As Integer
>  データ = "データ.xls"           '【追加】
   ↑
  ここで「データ.xls」と言う文字が入ります。
 
          ↓なぜに? 間違ってます。
>    For Each データ In Workbooks     '【追加】

        このところで違和感は感じないですか?
         ↓       ↓ 
>      If データ.Name = データ Then   '【追加】
>        With ListBox1
>          .ColumnCount = 2
>          .ColumnWidths = "200;500"
>        End With


コード自体がハチャメチャなので1部分だけの例。

Dim Wb As Workbook
Dim Flg As Boolean

Flg = False
For Each Wb In Workbooks
  If Wb.Name = データ Then
    Flg = True 'ここでフラグを立てて
    Exit For
  End If
Next

'フラグの状態でブックの有無判別
If Flg = True Then
  MsgBox "ここでブックがあった時の処理"
End If

【52569】Re:ありがとうございます☆すみませんが...
お礼  PONDOG  - 07/11/20(火) 10:28 -

引用なし
パスワード
   ▼Jaka さん

なんとか試行錯誤の上できました☆助言いただきありがとうございました☆

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