- ベストアンサー
画像データの処理に関するソフトの探し方
- プログラムに詳しくない人でも使える、画像データの処理が可能なソフトを探しています。
- データベースフォルダAに保存されている画像のファイル名を、指定した数字をキーにしてデータベースフォルダBに変更したいです。
- データベースBに保存されるファイル名は、(1から連番)-(検索されたファイルの数字)-(そのファイルの検索された回数).jpgとなります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
環境が書いてなかったから、VB6だと思ってました... アクセスだったのですね(^^;) アクセスだと・・・ ファイルリストボックスはありません。 フォーカスを持っているコントロールを使用不可にできません。 恐らくそれがエラーの原因になってると思います。 ですので、for アクセス バージョンです。 '処理内容としては '1.キーを元に"*-00001-*.jpg"というようなパターンを作成 '2.getFiles関数により同パターンのファイル数を取得 '3.新たな名前の作成をしてコピー ' ' '必要なオブジェクト/コントロール 'フォーム1 '│ '├コマンドボタン1 [Command1] '│ '└コマンドボタン2 [Command2] Option Compare Database Option Explicit Private Const RENAME_KEY_FILE As String = "c:\TEST.txt" Private Const RENAME_KRY_CUT As String = "," Private Const DIR_DB_A As String = "C:\A\" Private Const DIR_DB_B As String = "C:\B\" Private lngCntKey As Long 'キーの数 Private valKwyAry As Variant 'キーを配列で記憶 'キーファイルを読み取る Private Sub Command1_Click() Dim lngFile As Long Dim lngFileSize As Long Dim strWork As String '--- キーファイルから、文字列の取得 --- lngFileSize = FileLen(RENAME_KEY_FILE) strWork = String(lngFileSize, vbNullChar) lngFile = FreeFile Open RENAME_KEY_FILE For Binary As #lngFile 'バッファ取得 Get #lngFile, , strWork Close #lngFile '---- 取得した文字列の分解 --- On Error Resume Next lngCntKey = 0 Erase valKwyAry valKwyAry = Split(strWork, RENAME_KRY_CUT) 'サンプルではカンマ区切り lngCntKey = UBound(valKwyAry) + 1 'キーの数を得る On Error GoTo 0 'キーが存在したらリネーム処理ボタン使用可能 If (lngCntKey > 0) Then Me.Command2.Enabled = True Me.Command2.SetFocus Me.Command1.Enabled = False MsgBox "キー情報を取得しました" Else MsgBox "キー情報を取得できませんでした" End If End Sub Private Sub Command2_Click() Dim i As Long Dim strFileName As String Dim strNewFileName As String Dim strPattern As String Dim lngCntMain As Long Dim lngCntSub As Long Dim lngFileCnt As Long With Me 'メインカウンタの初期化 lngCntMain = 0 For i = 0 To lngCntKey - 1 'ファイル名を作成 strFileName = DIR_DB_A & valKwyAry(i) & ".jpg" 'ファイルの有無を調べる If Dir(strFileName) <> "" Then '--- 存在したら --- 'メインカウンタを1増やす lngCntMain = lngCntMain + 1 '新たなファイル名の途中部分をパターンを作成 strPattern = "*-" & Format(valKwyAry(i), "00000") & "-*.jpg" '作成したパターンのファイルが、コピー先に何個あるかを得る lngFileCnt = getFiles(DIR_DB_B, strPattern) 'サブカウンタをセット(同じパターンのファイル数+1) lngCntSub = lngFileCnt + 1 'コピー先名を定義 strNewFileName = DIR_DB_B & _ lngCntMain & "-" & _ Format(valKwyAry(i), "00000") & "-" & _ Format(lngCntSub, "000") & ".jpg" 'コピー Call FileCopy(strFileName, strNewFileName) End If Next i End With MsgBox "変更終了しました" End Sub Private Sub Form_Load() With Me .Command1.Caption = "ファイル取得" .Command2.Caption = "コピー実行" .Command2.Enabled = False End With End Sub '【機 能】 :フォルダ内に存在するファイルの数を取得する '【返り値】 :フォルダに含むファイルの数 '''パラメータ1(inPath) :ファイルパス '''パラメータ2(inFileFilter) :ファイルのフィルタ Private Function getFiles(inPath As String, inFileFilter As String) As Long Dim strFileName As String '最初ののJEPGファイルを見つける strFileName = Dir(inPath & inFileFilter) '取得できなくなるまで繰り返す Do While strFileName <> "" '拡張子を持っているようなフォルダ名をはじく処理 If (GetAttr(inPath & strFileName) And vbDirectory) <> vbDirectory Then getFiles = getFiles + 1 End If '次のファイルを取得する strFileName = Dir Loop End Function
その他の回答 (2)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
すいません訂正です Option Explicit ↑これ二つ存在してます。一つでいいです。 Private lngCntKey As Long 'キーを配列で記憶 Private valKwyAry As Variant 'キーの数 コメントが反対です Private lngCntKey As Long 'キーの数 Private valKwyAry As Variant 'キーを配列で記憶 が正しいです。 あとロード時のコマンドボタン2のキャプションがリネームになってますが、機能はリネームではありません。コピーです。 過去のファイルから引っぱってきて作成したサンプルなので、修正し忘れてました。。。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
サンプルです。 処理内容としては 1.キーを元に"*-00001-*.jpg"というようなパターンを作成 2.ファイルリすとボックスにパターンをセット 3.ファイルのカウントをファイルリストボックスから読み取る 4.新たな名前の作成をしてコピー 必要なオブジェクト/コントロール フォーム1[Form1] │ ├コマンドボタン1[Command1] │ ├コマンドボタン2[Command2] │ └ファイルリストボックス[File1] あとサンプルでは Private Const RENAME_KEY_FILE As String = "c:\TEST.txt" Private Const RENAME_KRY_CUT As String = "," として、キーをファイルから読み取ってます。 カンマ区切りのキーが入ったテキストファイルが必要です。 元のJPGフォルダ[DIR_DB_A] 出力先のJPGフォルダ[DIR_DB_A] で宣言してあるので、任意に変更してください。 Option Explicit Option Explicit Option Compare Text 'ここに記されているプログラムは、文字列の比較を大文字小文字の区別をしない事を宣言 Private Const RENAME_KEY_FILE As String = "c:\TEST.txt" Private Const RENAME_KRY_CUT As String = "," Private Const DIR_DB_A As String = "C:\A\" Private Const DIR_DB_B As String = "C:\B\" Private lngCntKey As Long 'キーを配列で記憶 Private valKwyAry As Variant 'キーの数 'キーファイルを読み取る Private Sub Command1_Click() Dim fileBuf() As Byte Dim lngFile As Long Dim lngFileSize As Long Dim strWork As String '--- キーファイルから、文字列の取得 --- lngFileSize = FileLen(RENAME_KEY_FILE) ReDim fileBuf(lngFileSize - 1) As Byte lngFile = FreeFile Open RENAME_KEY_FILE For Binary As #lngFile 'バッファ取得 Get #lngFile, , fileBuf Close #lngFile strWork = StrConv(fileBuf, vbUnicode) '---- 取得した文字列の分解 --- On Error Resume Next lngCntKey = 0 Erase valKwyAry valKwyAry = Split(strWork, RENAME_KRY_CUT) 'サンプルではカンマ区切り lngCntKey = UBound(valKwyAry) + 1 'キーの数を得る On Error GoTo 0 'キーが存在したらリネーム処理ボタン使用可能 If (lngCntKey > 0) Then Me.Command1.Enabled = False Me.Command2.Enabled = True MsgBox "キー情報を取得しました" Else MsgBox "キー情報を取得できませんでした" End If End Sub Private Sub Command2_Click() Dim i As Long Dim strFileName As String Dim strNewFileName As String Dim strPattern As String Dim lngCntMain As Long Dim lngCntSub As Long With Me lngCntMain = 0 'ファイルリすとボックスのパスを設定 .File1.Path = DIR_DB_B For i = 0 To lngCntKey - 1 'ファイル名を作成 strFileName = DIR_DB_A & valKwyAry(i) & ".jpg" 'ファイルの有無を調べる If Dir(strFileName) <> "" Then '--- 存在したら --- 'リネームのカウンタを1増やす lngCntMain = lngCntMain + 1 '新たなファイル名の途中部分を定義 strPattern = "*-" & Format(valKwyAry(i), "00000") & "-*.jpg" .File1.Pattern = strPattern .File1.Refresh 'サブカウンタをセット lngCntSub = .File1.ListCount + 1 '新たな名前を定義 strNewFileName = DIR_DB_B & _ lngCntMain & "-" & _ Format(valKwyAry(i), "00000") & "-" & _ Format(lngCntSub, "000") & ".jpg" 'コピー FileCopy strFileName, strNewFileName End If Next i End With MsgBox "変更終了しました" End Sub Private Sub Form_Load() With Me .Command1.Caption = "ファイル取得" .Command2.Caption = "リネーム実行" .Command2.Enabled = False .File1.Visible = False End With End Sub
補足
お礼が遅くなりました、すみません。実はこのプログラムいただいてから アクセスの基礎から勉強していたもので・・。で、ソフトの概要はそこそこつかめたのですが、この命令文を何処に貼り付ければよいのかわからなくて・・。 新規フォームを作成し、コマンド1ボタンとコマンド2ボタンとリストボックスを作成、コマンド1ボタンの「クリック時」のイベントプロージャに貼り付けてみたのですが、うまくいかなくて・・。リストボックスは見えなくなってしまうし、エラーで File1.Path = DIR_DB_B の行にエラーがあるらしくそれを飛ばすと今度は Me.Command1.Enabled = False の所でもコントロールがなんたらとエラーが出てしまい、アクセスVBAの本を片手に途方に暮れています。もう少し具体的に教えていただけるとうれしいのですが・・・。
お礼
またまた返事が遅れてしまいました。 ようやく、プログラム自体稼動するようになりました。 本当にありがとうございました。