- 締切済み
Excelでtaglib-sharp+VBA
Webから見様見真似で、.flacファイルからタグ情報を取得するPowerShellのプログラムを作って動作確認が取れたのですが、本当はExcelで管理したいのでVBAに作り換えたいのですが真似で作ったPowerShellを読み取ることは困難でVBAへの移行に戸惑っています。特にVBAでも.DLLの活用は経験がありません。 このPowerShellのプログラムをVBAに変換もしくはtaglib-sharpの呼出などのヒントをくださる方はいないでしょうか?どうかよろしくお願い致します。 Remove-Variable -Name TagLibFilePath -Force -ea silentlycontinue Set-Variable -Name TagLibFilePath -Value "C:\Program Files (x86)\taglib-sharp\taglib-sharp.dll" -Option ReadOnly -Scope "Global" # ------------------------------------------------------------------ # 音楽ファイル(flac)よりタグ情報を取得する # 関数名:Get-MusicTagData # 引数 :MusicFolderPath フォルダパス # 戻り値:タグ情報 # ------------------------------------------------------------------ Get-MusicTagData "C:\Users\kazu\Music\Media Go\" function Get-MusicTagData([String]$MusicFolderPath){ # ライブラリ読み込み $TagLib = [System.Reflection.Assembly]::LoadFile($TagLibFilePath) $result = @() # フォルダ配下のflacを取得 Get-ChildItem $MusicFolderPath -Recurse -Include *.flac | ForEach-Object { $audiofile = [TagLib.File]::Create($_.fullname) # タグ情報をセット $value = New-Object PSCustomObject -Property @{ #ファイル名 FILENAME = $_.name #アルバム Album = $audiofile.Tag.Album #アルバムアーティスト AlbumArtists = $audiofile.Tag.AlbumArtists #年 Year = $audiofile.Tag.Year #タイトル Title = $audiofile.Tag.Title #アーティスト Artists = $audiofile.Tag.Artists #作曲者 Composers = $audiofile.Tag.Composers #ジャンル Genres = $audiofile.Tag.Genres #トラック番号 Track = [String]$audiofile.Tag.Track + "/" + [String]$audiofile.Tag.TrackCount #ディスク番号 Disc = [String]$audiofile.Tag.Disc + "/" + [String]$audiofile.Tag.DiscCount #コメント Comment = $audiofile.Tag.Comment } $result += $value } return $result }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- masnoske
- ベストアンサー率35% (67/190)
そのPowerShellのコードをExcelから起動したらいいのでは? ネット検索すれば、すぐに見つかります。
補足
回答ありがとうございます。 1600万曲を超えるFLACファイルを維持管理するために作ったPowerShellプログラムですが、ロジックに問題があり時々エラーが出るのです。そのため完全自動化出来ずにエラー部分の確認を手作業でしなければならないのです。将来のことも考えて維持・保守も行えてこの問題も解決できるVBAで作り直したいのです。今は直接PowerShellで実行しています。知りたいことはVBAとtaglib-sharp.dllとのやり取りの方法です。特に下記の一文が分かりません。 $TagLib = [System.Reflection.Assembly]::LoadFile($TagLibFilePath)