LoadPicture関数で部品の画像を表示させる 【VBA在庫管理#35】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

『でっきるかな?でっきるかな?はてはてフフ~♪』どうもoReです。

今回は、バーコードと部品画像を連動して表示させていきます。

LoadPicture関数

・Load ロォゥドゥ ・Picture ピィクチャ

Loadは、『読み込み』という意味みたいです。

構文

LoadPicture([FileName])

 

LoadPictureの引数に画像のファイル名を渡すと、
その画像を読み込んでくれるようです。

さっそく使ってみましょう。

※前回設定した、Pictureの所は消しておきましょう。

Pictureを消す

 

画像の読み込み

バーコードをピッと読み込んだら、画像を表示させるので

↓Mainフォームの、この辺に追記ですかね

'バーコード入力
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Dim Knskcell As Range

  If KeyCode = 13 Then
    Label16 = ""
    Label17 = ""
    Label18 = ""
    Label19 = ""
    Label20 = ""
    Label21 = ""

    Set Knskcell = Columns(3).Find(what:=TextBox2, lookat:=xlWhole)

    If Knskcell Is Nothing Then
      MsgBox "部品が登録されていません。"
      TextBox2 = ""
    Else
      Label16 = Knskcell.Offset(0, -1)
      Label17 = Knskcell.Offset(0, 0)
      Label18 = Knskcell.Offset(0, 1)
      Label19 = Knskcell.Offset(0, 2)
      Label20 = Knskcell.Offset(0, 3)
      Label21 = Knskcell.Offset(0, 4)
      Image1.Picture = LoadPicture("test.jpg")
    End If
  End If
End Sub

 

でっきるかな? 動作確認してみましょう♪

実行時エラー ファイルが見つかりません

oRe落ち込み

 

(# ゚Д゚)『できるかな?じゃねー!!やるんだよっ!!』byのっぽさん

 

full path フルパス

・full フゥル ・path パァス

fullは、『いっぱい』とか、『満杯』という意味みたいです。

pathは、『小道』という意味みたいです。

フルパスは、そのファイル名までの道筋を全部書いたものって感じで、
LoadPictureの引数には、フルパスを渡さないとダメ見たいです。

だったら、LoadPicture([FullPath])って書いてほしいよね。

 

パスの確認

ファイルを選択右クリックプロパティ

パスの確認

 

C:\Users\oRe\Desktop』これがパスです。(フォルダパスともいうみたい)

まあ、わかるとは思いますが一応

test.jpgがある場所は、
CドライブUsersoRe(ユーザー名)デスクトップ

このパスにファイル名を付けたものがフルパスとなります。

C:\Users\oRe\Desktop\test.jpg』←フルパスだお!!

※\で階層を区切るみたいね

 

フルパスへ変更

Image1.Picture = LoadPicture("C:\Users\oRe\Desktop\test.jpg")

※スマホ等で見ると、『\』が『\』と表示されます。

※ご自身のフルパスに変更してくださいね(笑)

 

これで、動作確認すると

フルパス動作確認

 

ちゃんと、画像が読み込まれてますか?

oReのぞき見

画像の削除

この状態で入出庫した場合、画像がImageに残ってしまいます。

入出庫時画像が残る

 

読み込んだ画像を消すには、

Image1.Picture = LoadPicture()

もしくは、

Image1.Picture = Nothing

で消せるので、UserForm_Initializeに追記しますか。

'Main初期化
Private Sub UserForm_Initialize()
  Dim LastRow As Long

  LastRow = Sheet2.Cells(Rows.Count, 9).End(xlUp).Row

  If LastRow > 2 Then
    ListBox1.ColumnCount = 8
    ListBox1.ColumnWidths = "110;50;40;110;110;120;30;30"
    ListBox1.List = Sheet2.Range("B3:I" & LastRow).Value
  End If
  Call ComboSet(ComboBox1, Sheet3, 2)

  ComboBox1 = ""
  TextBox2 = ""
  TextBox3 = ""
  Label16 = ""
  Label17 = ""
  Label18 = ""
  Label19 = ""
  Label20 = ""
  Label21 = ""
  Image1.Picture = LoadPicture()
End Sub

 

入出庫した後、ちゃんと画像が消えてますか?

oReのぞき見

バーコードと画像の連動

・画像を複数準備してください。

・デスクトップに画像を置くと、デスクトップが画像だらけになってしまうので、
 適当なところに画像用のフォルダーを作成しましょう。

画像のファイル名をバーコードにすると、長くなってしまうので、
 部品管理№にしましょうか。

私の場合は、ドキュメントに部品画像フォルダーを作り、画像を2枚用意しました。

↓こんな感じ

部品画像フォルダ作成

※最近、いいちこ飲んでないから写真がとれませんでした。

赤霧おいしいよね(*´ω`)

 

・画像のパスは、

C:\Users\oRe\Documents\部品画像

 

・ファイル名は、

部品管理№2いいちこ赤霧→『2.jpg

部品管理№3マルボロ→『3.jpg

 

バーコードをピッとすると、Label16に部品管理№が入りますよね?

なので、Label16をフルパスにぶっ込みますか。

↓こんな感じ

'バーコード入力
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    省略

    Else
      Label16 = Knskcell.Offset(0, -1)
      Label17 = Knskcell.Offset(0, 0)
      Label18 = Knskcell.Offset(0, 1)
      Label19 = Knskcell.Offset(0, 2)
      Label20 = Knskcell.Offset(0, 3)
      Label21 = Knskcell.Offset(0, 4)
      Image1.Picture = LoadPicture("C:\Users\oRe\Documents\部品画像\" & Label16 & ".jpg")
    End If
  End If
End Sub

 

動作確認すると、

部品管理№2画像表示

部品管理№3画像表示

oReステキ

 

でも、画像がない場合エラー吐きますけどね!!

ファイルが見つかりません。

(゚∀゚)『アハハハハ』

 

まとめ

LoadPicture([FileName]) 画像読み込み つーか([FullPath])ね
フルパスは、そのファイル名までの道筋を全部書いたもの
LoadPicture()もしくは、Nothingで画像を消す
画像のファイル名は、部品管理№と同じにすると楽

できるかな?

次回 画像がない場合どがんかするばい

ExcelVBA部品在庫管理【目次】へ戻る

コメント

  1. ヤマザキ より:

    お世話になります。
    画像がない場合エラーになる対策はどのようなプログラムでしょうか?

    • oReoRe より:

      ヤマザキ様
      はじめまして。
      コメントありがとうございます。

       

      >画像がない場合エラーになる対策は…

       

      Dir関数を使ったものになります。

      Dir関数で検索すれば、詳しく説明されたサイトが
      たくさんありますので、そちらの方を参考にしてみてください。

  2. BOBO より:

    お世話になっております。

    こちらのサイトのおかげでド初心者の自分でもなんとか形になってきました。

    ひとつ質問させて頂きたいのですが、データベース等のシートに
    数値が入力されている部分を手入力ができないようにするにはどうしたら良いでしょうか?

    シートの保護等ではマクロも拒否されてしまうので、ググった方法で試してみたもののうまくいきません。

    申し訳ありませんが、ご教授頂けますでしょうか?
    宜しくお願い致します。

    • oReoRe より:

      BOBO様
      はじめまして。
      コメントありがとうございます。

      >手入力ができないようにする…

      >シートの保護等ではマクロも拒否されてしまうので…

      やった事ないので、私もググってみました(笑)

      例)Sheet1(データベース)

      
      Sheet1.Protect userinterfaceonly:=True
      

      ↑これを、Workbook_Open()プロシージャの一番上に書くと
      データベースシートを保護し、マクロは拒否されなくなりました。

      >数値が入力されている部分を…

      部分的に保護するには、Lockedプロパティと言うものがあるようです。

      VBA Lockedでググると出てくると思います。

      うまくいかなかった場合は、またコメントください。

タイトルとURLをコピーしました