こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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
}

投稿日時 - 2020-01-23 15:46:45

QNo.9704796

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

そのPowerShellのコードをExcelから起動したらいいのでは?
ネット検索すれば、すぐに見つかります。

投稿日時 - 2020-02-07 14:40:10

補足

回答ありがとうございます。
1600万曲を超えるFLACファイルを維持管理するために作ったPowerShellプログラムですが、ロジックに問題があり時々エラーが出るのです。そのため完全自動化出来ずにエラー部分の確認を手作業でしなければならないのです。将来のことも考えて維持・保守も行えてこの問題も解決できるVBAで作り直したいのです。今は直接PowerShellで実行しています。知りたいことはVBAとtaglib-sharp.dllとのやり取りの方法です。特に下記の一文が分かりません。
$TagLib = [System.Reflection.Assembly]::LoadFile($TagLibFilePath)

投稿日時 - 2020-02-07 19:06:28

あなたにオススメの質問