|
▼にしもり さん:こんにちは〜
まず、後半の質問から。
>保存の際ダイアログが現れるロジックになっておりますが、
> 自動でtest.csvという名でCドライブMy Documentに保存するにはどうしたらいいでしょうか。
これについては、My Documentsフォルダを取得する一般的なやりかたがあります。
下のコードの
'-----------------------------------------------------------------
'-----------------------------------------------------------------
のなかを参照してください。
Sub JoinCSV3()
Dim Files, outFilename As String
Dim myPath As String
Dim i As Long
Dim io As Integer, oo As Integer
Dim buf() As Byte
Dim ss As String
Files = Application.GetOpenFilename _
(FileFilter:="CSV, *.csv", MultiSelect:=True)
If IsArray(Files) Then
'-----------------------------------------------------------------
outFilename = CreateObject("WScript.Shell"). _
SpecialFolders("MyDocuments") & "\test.csv"
'-----------------------------------------------------------------
oo = FreeFile()
Open outFilename For Output As oo '初期化
Close oo
Open outFilename For Binary As oo
io = FreeFile()
For i = 1 To UBound(Files)
Open Files(i) For Binary As io
ReDim buf(1 To LOF(io))
Get io, , buf
Close io
If i = 1 Then 'そのままバイトデータをPut
Put oo, 1, buf
Else '1行目を削除してPut
ss = StrConv(buf, vbUnicode)
ss = Split(ss, vbCrLf, 2)(1)
Put oo, , ss
End If
Next
Close oo
End If
End Sub
----
さて、前半の
> 仰るとおりの問題が起きましたので、恐れ入りますが
> 下記を使わせていただいております。
の件ですが、その「問題」というのが
GetOpenFilename メソッドの(XL2002, 2003 での)不具合のことでしたら、
いかんせん、ぼくのサンプルコードでも何ら不具合は修正されてません。
1.csv, 2.csv, 3.csv, 4.csv というファイルがあって、
それを 1 〜 4 の順番で読み結合したいのなら、XL2002, 2003 では 今の
ままで うまくいきません。
また、こうすればよい、という簡単明快な方法も知らないです。
ずっとむかし、UserForm を利用してユーザーに順番を並び替えさせるプロ
シージャを作ったことはありますが... めんどくさいです。
同じようにめんどうですが、
たとえば、Excelが2002か2003だったら、
GetOpenFilenameで選択した複数CSVファイルを いちどワークシートに書き
出して、ユーザーに 並び替えさせて結合順を指定なおす → プログラムを
2つに分ける
ような方法も考えられます。
いずれにしても 「問題が起きました」とおっしゃるのは、そのファイル選択
順が反映されないということですか?
|
|