今度はファイル名を取得する必要が出てきたので
この前は業務フローをシートにというパターンでしたが
今回はファイル1個に業務を記載してくれているパターンなので
指定したフォルダからファイル名の一覧を抜き出す必要が出てきました。
とゆうかシートの業務一覧とかファイル名のとか統一しろよと思いつつも・・・・。
両方組合せとかその他イレギュラーパターンも多々あるしそれは今後の話ということで
ひとまずはマクロ組んでみました。
とりあえず40を超えてから3社転職してるんで、こういうのは蓄積しておかないと。
忘れるし。パッケージみたいになっているほうがありがたい。
フォーム側
-----------------------------------------
モジュール側
-----------------------------------------
今回はファイル1個に業務を記載してくれているパターンなので
指定したフォルダからファイル名の一覧を抜き出す必要が出てきました。
とゆうかシートの業務一覧とかファイル名のとか統一しろよと思いつつも・・・・。
両方組合せとかその他イレギュラーパターンも多々あるしそれは今後の話ということで
ひとまずはマクロ組んでみました。
とりあえず40を超えてから3社転職してるんで、こういうのは蓄積しておかないと。
忘れるし。パッケージみたいになっているほうがありがたい。
フォーム側
-----------------------------------------
Sub getFileName_Click()
'
' フォルダからファイル名を取得して一覧にして別のEXCELシートに保存する。
'
Dim dlg As Object
Dim dlgAns As Boolean
Dim getForder As Variant
Dim outSheet As Variant
Dim retVal As String
Dim startTime As Date '処理時間計測用
Dim endTime As Date '処理時間計測用
startTime = Now
'カレントディレクトリの指定
ChDir CurDir
'ファイル名取得対象フォルダの指定
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
dlgAns = dlg.Show
If dlgAns Then
getForder = dlg.SelectedItems(1)
Else
getForder = ""
End If
'保存対象ファイルの指定
outSheet = Application.GetOpenFilename("EXCELファイル(*.xlsx),*.xlsx , EXCELファイル(*.xls),*.xls")
If getForder <> "" And VarType(outSheet) <> vbBoolean Then
retVal = Module1.getFileName(getForder, outSheet)
Else
MsgBox ("取得するフォルダが選択されていないか、保存先が指定されていません。")
End If
endTime = Now
'Debug.Print DateDiff("s", startTime, endTime)
End Sub
モジュール側
-----------------------------------------
Option Explicit
'refer
' http://ameblo.jp/gidgeerock/entry-11584846307.html
' https://oshiete.goo.ne.jp/qa/1828986.html
' http://officetanaka.net/excel/vba/file/file07.htm
' http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
' http://officetanaka.net/excel/vba/tips/tips39.htm
' https://gist.github.com/gitspopovic/2963865
' http://vba-geek.jp/blog-entry-294.html
' http://vbaexcel.seesaa.net/article/148305417.html
' http://d.hatena.ne.jp/bhunji2000/20091030/1258133771
' http://www.239-programing.com/excel-vba/func/func072.html
'
' 対象のフォルダからファイル名一覧を取得してEXCELシートに保存する
'
Function getFileName(inFile As Variant, outFile As Variant)
Dim f As Object
Dim saveBook As Object
Dim saveSheet As Object
Dim sheetsName As String
Dim fullPath As String
Dim i As Long '行カウンター
Const FIRST = 1
Const ROWA = "A" 'A列
Const ROWB = "B" 'B列
'保存先指定
Set saveBook = Workbooks.Open(outFile)
Application.DisplayAlerts = False
Application.Visible = False
i = 1 '保存シート開始番号
With CreateObject("Scripting.FileSystemObject")
'シート名設定
sheetsName = .GetFolder(inFile).Name
saveBook.Worksheets(FIRST).Name = sheetsName
'ファイル名の取得
For Each f In .GetFolder(inFile).Files
fullPath = inFile & "\" & f.Name
saveBook.Worksheets(FIRST).Range(ROWA & i) = f.Name
saveBook.Worksheets(FIRST).Range(ROWB & i) = fullPath
saveBook.Worksheets(FIRST).Hyperlinks.Add Anchor:=Range(ROWB & i), Address:=fullPath
i = i + 1
Next f
End With
saveBook.Worksheets(FIRST).Range(ROWA & ":" & ROWB).Columns.AutoFit
'保存先EXCELを閉じる
saveBook.Close Savechanges:=True
Set saveBook = Nothing
ActiveWorkbook.Close False
Application.Visible = True
Application.DisplayAlerts = True
End Function
コメント
やはりファイル名だけという用途では使わないよな。にやり。