過去ログ

                                Page      71
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼テキストウィザートが出ないようにするには  haru 02/9/10(火) 13:09
   ┗Re:テキストウィザートが出ないようにするには  りん 02/9/10(火) 15:16
      ┣Re:テキストウィザートが出ないようにするには  haru 02/9/11(水) 10:15
      ┗ダイアログのファイル名に初期値を表示できたのですが  haru 02/9/12(木) 9:13
         ┗Re:ダイアログのファイル名に初期値を表示できたのですが  JuJu 02/9/12(木) 18:30
            ┗Re:ダイアログのファイル名に初期値を表示できたのですが  haru 02/9/13(金) 8:34

 ───────────────────────────────────────
 ■題名 : テキストウィザートが出ないようにするには
 ■名前 : haru
 ■日付 : 02/9/10(火) 13:09
 -------------------------------------------------------------------------
       a% = Application.Dialogs(xlDialogOpen).Show(arg1:=drv$ & "a*.txt")
    If a% = False Then
        End
    End If
    Workbooks.OpenText FileName:=ActiveWorkbook.Name, StartRow:=1, _
        DataType:=xlFixedWidth, FieldInfo:=Array( _
        Array(0, 1), _
        Array(80, 1))

 というマクロで、テキストウィザートが出ないようにするにはど
うすれば良いですか?
 1行目のxlDialogOpenは、a*.txtが使えて調子良いのですが。
 Workbooks.OpenTextで、改めてテキストウィザートと同じ様なこ
とをやりたいのですが、ファイル名が取り込めません。
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:テキストウィザートが出ないようにするには  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/9/10(火) 15:16  -------------------------------------------------------------------------
   haruさん、こんにちわ。

 ファイル名を取得するには通常GetOpenFilenameを使用しますが、A*.txtというフィルタ(ワイルドカード)が使えないので、APIを使います。

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Boolean
Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As Long
  nMaxCustrFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  Flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustrData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type
'↑WinAPI用の宣言
Sub Main()
  Dim A$, Fil1$  
  '実行部分
  A$ = "開くテキストファイル名" 'ウインドウのタイトル
  '
  'GetOpenFilenameのフィルタをこまかく指定できるようにしたもの
  Fil1$ = GetOpenBook(A$)
  If Fil1$ <> "" Then
     Workbooks.OpenText FileName:=Fil1$, StartRow:=1, _
        DataType:=xlFixedWidth, FieldInfo:=Array( _
        Array(0, 1), _
        Array(80, 1))
  End If
End Sub
'フィルタを変更
Function GetOpenBook(ByVal Til0 As String) As String
  Dim retc As Long
  Dim filn As OPENFILENAME
  Dim Tmpfile As String
  Dim TmpFileTitle As String
  Dim fileToOpen As String
  Dim STIME As Integer
  '
  Tmpfile = String(256 - LenB(StrConv(Fil0, vbFromUnicode)), 0)
  TmpFileTitle = String(256, 0)
  '
  With filn
   .lStructSize = Len(filn)
   .hwndOwner = hWndAccessApp
   .hInstance = 0
   'フィルタ
   .lpstrFilter = "A File(a*.Txt)" & Chr$(0) & "a*.Txt" & Chr$(0) & Chr$(0)
   .lpstrCustomFilter = 0
   .nMaxCustrFilter = 0
   .nFilterIndex = 0
   .lpstrFile = Tmpfile
   .nMaxFile = 256
   .lpstrFileTitle = TmpFileTitle
   .nMaxFileTitle = 511
   .lpstrInitialDir = CurDir
   .lpstrTitle = Til0
   .Flags = 0
   .nFileOffset = 0
   .nFileExtension = 0
   .lpstrDefExt = ""
   .lCustrData = 0
   .lpfnHook = 0
   .lpTemplateName = 0
  End With
  '
  retc = GetOpenFileName(filn)
  '関数戻り値
  Select Case retc
   Case 1:  GetOpenBook = Left(filn.lpstrFile, InStr(filn.lpstrFile, Chr(0)) - 1)
   Case Else: GetOpenBook = ""
  End Select
End Function

宣言部と関数部分は同じモジュールに書いてください。
 ───────────────────────────────────────  ■題名 : Re:テキストウィザートが出ないようにするには  ■名前 : haru  ■日付 : 02/9/11(水) 10:15  -------------------------------------------------------------------------
   ▼りん さん:
 こんにちわ。
 うまくいきました。ありがとうございます。
 タイトルとワイルドカードをfunctionに渡すようにしてみました。
 何となくできています。

 ところで、
>宣言部と関数部分は同じモジュールに書いてください。
 宣言部と関数部分は、使いたい各ブックにそれぞれ記述しないと
いけないと思うのですが、
 どのブックからも簡単に呼び出せるなサブルーチン?見たいなもの
には、できないでしょうか?
 ───────────────────────────────────────  ■題名 : ダイアログのファイル名に初期値を表示できたのですが  ■名前 : haru  ■日付 : 02/9/12(木) 9:13  -------------------------------------------------------------------------
   >  retc = GetOpenFileName(filn)
>  '関数戻り値
>  Select Case retc
>     Case 1:     GetOpenBook = Left(filn.lpstrFile, InStr(filn.lpstrFile, Chr(0)) - 1)
>     Case Else: GetOpenBook = ""

 ダイアログのファイル名に、初期値が表示できるようにして実行
しました。
 表示はするのですが、一覧からあるファイルを選択すると、異常
終了してしまいます。
 デバッガでfilnをワォッチすると、GetOpenFileName前(1行目)
では、初期値のファイル名が表示されていますが、
 4行目のfiln.lpstrFileでは、フォルダ名になっています。
 関数戻り値を正しく取得するにはどうすれば良いですか?
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:ダイアログのファイル名に初期値を表示できたのですが  ■名前 : JuJu <juju-bbs@su-u.com>  ■日付 : 02/9/12(木) 18:30  -------------------------------------------------------------------------
   haruさん、りんさん、こんにちはぁ

> ダイアログのファイル名に、初期値が表示できるようにして実行しました。

どこをどう変更して初期値が表示できるようにしたのですか?

おそらくは、
 .lpstrFile = Tmpfile
の部分だと思いますが、これを例えば
 .lpstrFile = "初期値.txt"
のように改造していませんか?
もしそうなら
 .lpstrFile = "初期値.txt" & vbNullChar & Tmpfile
のようにしてください。

ではではぁ
 ───────────────────────────────────────  ■題名 : Re:ダイアログのファイル名に初期値を表示できたのですが  ■名前 : haru  ■日付 : 02/9/13(金) 8:34  -------------------------------------------------------------------------
   ▼JuJu さん:
こんにちはぁ

> .lpstrFile = Tmpfile
>の部分だと思いますが、これを例えば
> .lpstrFile = "初期値.txt"
>のように改造していませんか?
 そうです。

>もしそうなら
> .lpstrFile = "初期値.txt" & vbNullChar & Tmpfile
>のようにしてください。
 ありがとうございます。うまくいきました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 71