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で、改めてテキストウィザートと同じ様なこ とをやりたいのですが、ファイル名が取り込めません。 よろしくお願いします。 |
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 宣言部と関数部分は同じモジュールに書いてください。 |
▼りん さん: こんにちわ。 うまくいきました。ありがとうございます。 タイトルとワイルドカードをfunctionに渡すようにしてみました。 何となくできています。 ところで、 >宣言部と関数部分は同じモジュールに書いてください。 宣言部と関数部分は、使いたい各ブックにそれぞれ記述しないと いけないと思うのですが、 どのブックからも簡単に呼び出せるなサブルーチン?見たいなもの には、できないでしょうか? |
> 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では、フォルダ名になっています。 関数戻り値を正しく取得するにはどうすれば良いですか? よろしくお願いします。 |
haruさん、りんさん、こんにちはぁ > ダイアログのファイル名に、初期値が表示できるようにして実行しました。 どこをどう変更して初期値が表示できるようにしたのですか? おそらくは、 .lpstrFile = Tmpfile の部分だと思いますが、これを例えば .lpstrFile = "初期値.txt" のように改造していませんか? もしそうなら .lpstrFile = "初期値.txt" & vbNullChar & Tmpfile のようにしてください。 ではではぁ |
▼JuJu さん: こんにちはぁ > .lpstrFile = Tmpfile >の部分だと思いますが、これを例えば > .lpstrFile = "初期値.txt" >のように改造していませんか? そうです。 >もしそうなら > .lpstrFile = "初期値.txt" & vbNullChar & Tmpfile >のようにしてください。 ありがとうございます。うまくいきました。 |