「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:0
総数:3258
現在:5


マクロでのファイルオープン

ページOpenOffice.org FAQの登録ページ
投稿者naka
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-04-20 15:12:35 (水)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

ExcelVBAでは*指定によりワイルドカード指定方式でファイルオープンできますが OpenOffice表計算のマクロでは固定のファイル名しかOpenできないのでしょうか? ちなみに固定のファイル名でURL方式でOpenはできますが、このOpen時にファイル名の頭3文字は固定でその後に年月日の8桁がついて、日が変わればこの年月日の部分が変動します。1つのURL方式でOpenで記述できないのでしょうか? OpenするファイルはExcelファイルです。


無題

ike@九州 (2011-04-21 08:21:23 (木))

以下は今日の日付でのファイル名を表示します。応用できますか?

Msgbox "ABC" & Format(Now(),"YYYYMMDD") & ".xls"

複数ファイルをオープンする

M.Kamataki (2011-04-21 09:48:23 (木))

英語のフォーラムですが、以下のページでフォルダ以下のファイルのオープンについての話題があります。

[Solved] Opening several files at OOo startup
http://user.services.openoffice.org/en/forum/viewtopic.php?f=6&t=2921

probe1さんが以下のサンプルが紹介されています。

http://www.re-solutions.de/ooo/makros/global_startOOO.odt

これは特定のフォルダ以下のファイルをOpenOffice.orgでオープンするマクロが収録されています。xlsファイルだけを置いたフォルダでファイルオープンできることを確認しました。

このマクロの StarDesktop.LoadComponentFromURL でファイルを読み込む前にRight関数、Left関数と If文で目的のファイルを絞り込めばいけそうな気がします。ただ、以下の FolderPicker を使って、フォルダ名を取得する処理を加えると汎用的なファイルオープンのマクロになると思います。

http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2Ffolderpicker

また、ファイル名の取得は FilePicker も使えます。以下のページを参考に複数ファイル選択モードを使えばやはり汎用的なマクロになります。

http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2Ffiledialog

ワイルドカード指定に関してですが、英語のフォーラムで若干やりとりがあります。Linuxなどではコマンドラインでワイルドカード指定で複数ファイルのオープンが可能ですが、Windowsではだめなことなどがまとめられています。マクロからコマンドラインの話題になっているので、ワイルドカードを使ったファイルオープンは処理が難しいということかと思います。

同一フォルダーの目的ファイルを探す

mr_happy (2011-04-21 10:16:27 (木))

こんにちは。
次のマクロはマクロの書かれたファイルと同じフォルダーに
目的のファイルがあれば、そのオブジェクトoRCmpを得るマクロです。
oRCmpが得られれば、それをもとにファイルを開くこともできます。
参考までに。

Sub Main
   Dim oRCmp As Object
   
   If f_BookUM(oRCmp, "File名の一部") = FALSE Then Exit Sub
End Sub
'sssss開いているDoc中から目的のDocを取得する  sssssssssssss
Function f_BookUM(oRCmp, sRName) As Boolean
   Dim oComp As Object, oEnmr As Object
   
   f_BookUM = FALSE
   oComp = StarDesktop.getComponents
   oEnmr = oComp.CreateEnumeration() 
   While oEnmr.hasMoreElements()
       oRCmp = oEnmr.nextElement()
       If oRCmp.hasLocation Then
          If oRCmp.Title LIKE "*" & sRName & "*" Then
             ' ファイル名にsRdNamが含まれれば、目的のファイル取得    
             f_BookUM = TRUE                     
             Exit Function
           End If  
       End If
   Wend
   Msgbox("同じフォルダーに " & sRName & " はありませんでした。終了します。")
End Function

mr_happy
PS 失礼しました。 これは開いているファイルを探すものでした。

無題

tani (2011-04-21 17:20:18 (木))

単にDir関数でファイルを探してから、それを開く、というのを希望されてるのかな、と思いました。それなら*も使えますし。
(そもそもVBAでもそういう方法じゃないと*使えない気がします。)

作ってみました

mr_happy (2011-04-25 09:56:09 (月))

前回は早とちり。
今回のは、マクロのあるフォルダーと同一場所にあるファイル名を
目的ファイル名の一部を用いて読み込みと、そのオブジェクトを得るマクロです。
ファイル数を得ることが出来ればよいのですが、それは研究中!
分かる人がいましたらヘルプです。ここでは20コまで検索します。

Sub QQQ
   Dim oRCmp As Object
   
   If f_MyFileOpenAndGetCmp(oRCmp, "MyDtFileNameの一部", "abcd", TRUE) = FALSE Then Exit Sub
   ' oRCmp を使って作業
   oRCmp.Close(TRUE)                          ' 読込みファイルを閉じる
End Sub


Function f_MyFileOpenAndGetCmp(oRCmp, sRName, sPWord, bPwUM) As Boolean
   Dim sCnvURL As Variant, sCurURL As Variant, sFName As Variant
   Dim sBuf As Variant, i As Integer
   Dim oFileProp(1) As New com.sun.star.beans.PropertyValue
   
   f_MyFileOpenAndGetCmp = FALSE
   oFileProp(0).Name = "ReadOnly"
   oFileProp(0).Value = TRUE
   If bPwUM = TRUE Then
      oFileProp(1).Name = "Password"                                ' 読み取り専用で開く
      oFileProp(1).Value = sPWord
   End If
   sCnvURL = ConvertFromUrl(ThisComponent.URL)                      ' コンバート 
   sBuf = Split(sCnvURL, "\")                                       ' "\" で繋がった各文字列を取り出す                                        
   For i=0 To Ubound(sBuf)-1                                        ' 配列数-1
       sCurURL = sCurURL & sBuf(i) & "\"                            ' ファイル名以外を繋げる 
   Next
   If FileExists(sCurURL) then 
      sFName = Dir(sCurURL, 0)
      For i=1 To 20                                                 ' 最大20ファイル分検索
          If sFName = "" Then Exit Function 
          If sFName LIKE "*" & sRName & "*" Then
             sCurURL = sCurURL & sFName
             sCnvURL = ConvertToUrl(sCurURL)
             oRCmp = StarDesktop.loadComponentFromURL(sCnvURL, "_default", 0, oFileProp) ' ファイルを開きドギュメントを取得
             f_MyFileOpenAndGetCmp = TRUE
             Exit Function
          End If
          sFName = Dir()
      Next 
   End If
End Function

マクロ

naka (2011-04-26 10:33:33 (火))

回答が遅くなって申し訳ありません。
Openの前処理でファイルの置いてある場所のファイル名をすべて取得して
ファイル名の固定部分3桁を聞いて、見つかればそのファイル名を変数に
セットして、URL方式のOpen命令のファイル名の記述に変数をセットして
ワイルドカードのようなファイルOpenに成功しました。
追伸
一部ファイルの置き場所がCドライブの直下でないとだめでした、
ほんとうはネットワークドライブ上で実施したかった。

'Cドライブ内の勤務届yyyymmdd.xlsファイルの検索
 While NextFile  <> ""
 
   AllFiles = AllFiles & Chr(13) &  NextFile  'msgboxへ出力する用 
   NextFile = Dir
   work = left(NextFile,3)
   
   If work = "勤務届" then
    work2 =  NextFile
'      msgbox work2    '勤務届yyyymmddファイル名の取得
   Else
'       msgbox work
   End If
 
 Wend

Windows のみ確認

ike@九州 (2011-04-27 08:28:54 (水))

Windows ネットワークドライブでは問題ありませんでした。
より具体的な回答を期待したい場合には、より詳細な環境、内容を提示されるのが吉だと思います。 おほほほ

とりあえず完了にします

M.Kamataki (2011-04-28 10:16:40 (木))

何らかのサーバー環境でお仕事をされている場合は、共有フォルダへのアクセスに制限があったり、何らかの不具合でアクセスできなかったりしますねぇ。

なお、ネットワークドライブを「Z:」などのドライブレターに割り当てると上記のトラブルを防げるケースもあります。ご検討を。

お名前:
題名: