進撃の俺!! どうもoReです。
今回は、ファイルのインポートとエクスポートを使っていきます。
モジュールの解放
モジュールの解放は、作成したユーザーフォームや、
標準モジュール等を削除したい時に使用します。
・削除したいモジュールを選択→右クリ→○○の解放をクリック
そうすると、『削除する前に○○をエクスポートしますか?』
とメッセージが出てくるので『いいえ』を押せば完全に削除できます。
『はい』を押せば選択したモジュールを削除してエクスポートできます。
エクスポート
・Export エクスポォアトゥ
Exportは、『輸出』という意味みたいです。
まあ、外部へ出力(保存)ってことです。
では、エクスポートしてみましょう。
エクスポートする前に、Module1のオブジェクト名をComboに変更します。
・Comboモジュールを選択→ファイルのエクスポートをクリック
そうしたら、デスクトップにエクスポート(保存)します。
ファイル名を『Combo』から、『コンボボックス登録削除』へ変更して保存をします。
※ファイル名は変えなくてもOK
デスクトップ上に『コンボボックス登録削除.bas』というファイルが
エクスポートされてますか?
エクスポートされていたら、Comboモジュールを解放しましょう。
※先ほど、エクスポートしたので『いいえ』を押します。
Comboモジュールを解放できましたか?
インポート
・Import インポォアトゥ
Importは、『輸入』という意味みたいです。
まあ、外部から入力(読み込み)ってことです。
それでは、先ほどエクスポートしたComboモジュールをインポートしましょう。
・ファイルのインポート
・コンボボックス登録削除.basを選択→開く
ちゃんと、Comboモジュールをインポートできましたか?
どう?凄くない!?
例えば、新たに住所録を作るとしましょう。
住所録ブックにComboモジュールをインポートして、
ComboTSとComboSetプロシージャに引数を渡すだけで、
コンボボックスの登録削除ができますよね?
そう!!いろんなプロジェクトで使い回しできるんです!!
多分、プロのグラマーな方達はこういった、使い回せるモジュールを
たくさん作っているいると思われます。
プロジェクト作成依頼が来たら、そのプロジェクトで必要な
モジュールをインポートして、ちょいと手直し。
はいっ!!○○万円也!!的な…(笑)
いろんな意味で全米が泣くでしょ。これ…
でも、汎用性があるプログラムを作るのは大変なんですよね。
おっ!!これ何かで使えるかもと思ったらエクスポートして、
使える有能な子に育てていくと楽になると思います。
部品編集フォーム作成
Tourokuフォームをエクスポート・インポートして、
部品編集フォームを作成していきます。
フォームのエクスポート・インポート
Tourokuフォームをデスクトップ上にエクスポートしましょう。
エクスポートできたら、Tourokuフォームのオブジェクト名を
Hensyuuとでもしますか。
そうしたら、エクスポートしたTourokuをインポートします。
こうすることで、Tourokuフォームのコピーを作成できます。
フォームの手直し
では、Hensyuuフォームをちょいと手直し。
Captionは『登録削除』、BackColorはお好きにどうぞ
↓こんな感じ
次に、MainフォームにHensyuuフォームを表示させるコマンドボタンを挿入しましょう。
Captionは『部品編集』、BackColorはお好きにどうぞ。
プログラム手直し
【Mainフォームへ追加】
'Hensyuu表示
Private Sub CommandBotton4_Click()
Hensyuu.Show
End Sub
【Hensyuuフォームへ追加・手直し】
・Hensyuuフォームモジュールの一番上に追加
Dim Knskcell As Range 'Knskcellはモジュール変数だよ
モジュールの一番上で変数の宣言をすると、
モジュール内で共有できる変数(モジュール変数)となります。
↓こんな感じになるはず
・コマンドボタン1クリックへ追加
'キャンセル処理
Private Sub CommandButton1_Click()
TextBox1 = ""
ComboBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
Set Knskcell = Nothing 'Knskcellをリセットするよ
End Sub
・コマンドボタン2クリックを変更
'Hensyuu終了処理
Private Sub CommandButton2_Click()
Unload Hensyuu
End Sub
・コマンドボタン3クリックを変更・追加
'部品編集処理
Private Sub CommandButton3_Click()
Dim YN As VbMsgBoxResult
If TextBox1 = "" Then
MsgBox "バーコードを読み込んでください。"
ElseIf ComboBox1 = "" Then
省略
ElseIf TextBox4 = "" Then
MsgBox "在庫数を入力してください。"
ElseIf TextBox5 = "" Then
MsgBox "バーコードを入力してください。"
Else
YN = MsgBox("バーコード : " & TextBox5 & vbCrLf & _
省略
"この様に編集しますか?", vbYesNo + vbQuestion, "部品編集確認")
If YN = vbYes Then
With Knskcell
.Offset(0, 0) = TextBox5
.Offset(0, 1) = ComboBox1
.Offset(0, 2) = TextBox2
.Offset(0, 3) = TextBox3
.Offset(0, 4) = TextBox4 * 1
MsgBox "部品管理№ : " & .Offset(0, -1) & " を編集しました。"
End With
Call CommandButton1_Click
End If
End If
End Sub
・コマンドボタン4クリック作成
'部品登録削除処理
Private Sub CommandButton4_Click()
Dim YN As VbMsgBoxResult
Dim i As Long 'Knskcellの行番号格納用ね
If TextBox1 = "" Then
Exit Sub
ElseIf Knskcell Is Nothing Then
Exit Sub
Else
YN = MsgBox("バーコード : " & TextBox5 & vbCrLf & _
"メーカー : " & ComboBox1 & vbCrLf & _
"品名 : " & TextBox2 & vbCrLf & _
"型式 : " & TextBox3 & vbCrLf & _
"在庫数 : " & TextBox4 & vbCrLf & vbCrLf & _
"この部品の登録を削除しますか?", vbYesNo + vbQuestion, "部品登録削除確認")
If YN = vbYes Then
MsgBox "部品管理№ : " & Knskcell.Offset(0, -1) & " を削除しました。"
i = Knskcell.Row 'Knskcellの行番号を格納するよ
Rows(i).Delete 'Knskcellの行を削除するよ
Call CommandButton1_Click
End If
End If
End Sub
・テキストボックス1キーダウン作成
'バーコードデータ検索処理
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
If TextBox1 = "" Then
Exit Sub
Else
Set Knskcell = Columns("C").Find(what:=TextBox1, lookat:=xlWhole)
If Knskcell Is Nothing Then
MsgBox "部品が登録されていません。"
Call CommandButton1_Click
Else
TextBox5 = Knskcell.Offset(0, 0)
ComboBox1 = Knskcell.Offset(0, 1)
TextBox2 = Knskcell.Offset(0, 2)
TextBox3 = Knskcell.Offset(0, 3)
TextBox4 = Knskcell.Offset(0, 4)
End If
End If
End If
End Sub
動作確認してみてください。
ちゃんと、部品の編集と削除ができますか?
まとめ
次回 部品データの項目を増やしていくよ
コメント
初歩的な質問ですみません。
ここまで順調にできたのですが、
「部品編集」ボタンを押してもなにも反応が無いことと
ユーザーフォームの実行から編集してみると最後のY/N選択まではできますが、
Yesを選択すると実行時エラー91が表示されます。
デバックでかくにんしてもわかりません。
どこに原因があるのでしょうか。
すけ様
はじめまして。
コメントありがとうございます。
実際のコードを確認出来ないので、なんとも言えませんが…
下記 確認願います。
>「部品編集」ボタンを押してもなにも反応が無い
『Mainフォーム』に、
記述されていますか?
>Yesを選択すると実行時エラー91が表示されます
『Hensyuuフォーム』の一番上に、
記述されていますか?
問題なければ、実際のコードを確認しないとわかりません。
oRe殿
コーデと申します。度々で恐縮です。この回で「Comboモジュールをインポート」までできましたが、
その後の下記oRe殿の文章内容がよくわかりません。すみません。
Excel上で、開発タブの右上にある「インポート」をクリックして、デスクトップ上にある「コンボボックス登録作業bas.」を選択してインポートしようとすると、「次のファイルをインポート中にエラーが発生しました」とmessageが出ます。そこから詳細をクリックしますと下記下段の内容でした。
何かがおかしいですよね?? お分かりの範囲でご教示頂けますと助かります。宜しくお願い致します。
【どう?凄くない!?
例えば、新たに住所録を作るとしましょう。
住所録ブックにComboモジュールをインポートして、
ComboTSとComboSetプロシージャに引数を渡すだけで、
コンボボックスの登録削除ができますよね?】
【エラーコード:-1072896760
URL:
原因:テキストの内容に無効な文字が見つかりました。
行:3
列:2
ファイルオフセット:32 】
コーデ様
コメントありがとうございます。
>その後の下記oRe殿の文章内容がよくわかりません。
在庫管理ブックとは別に、顧客の住所を管理するブックを作成する際、
もう一度コンボボックスに登録削除するコードを書かなくても、
顧客の住所を管理するブックに、Comboモジュールをインポートすれば楽です。
すみません、うまく説明できません…
>開発タブの右上にある「インポート」をクリックして…
開発タブの右上にある「インポート」は違います。
↓こちらのインポートです。
oRe殿
コーデでございます。ご指示頂いた上記画像のインポートは分かりました。その後、何をインポートするかですが、デスクトップ上に残っている、「コンボボックス登録削除bas.」をインポートでいいんですよね??
そうしますと、COMBOモジュールがVBA画面左側に出現します。これでインポート完成で宜しいですか??
その後、エクセル画面で、どんな操作をしたら、コンボボックスが出てきますか??
因みに、インポートしたCOMBOモジュールのコードは下記になります。ご面倒お掛けして恐縮ですが、ヒントください!
宜しくお願い致します。
※ 最近、黒糖焼酎にはまっております!! 黒糖なのに、糖分・プリン体「0」ですって!!(笑)
コーデ様
コメントありがとうございます。
>COMBOモジュールがVBA画面左側に出現します。これでインポート完成で宜しいですか??
完成です。
>その後、エクセル画面で、どんな操作をしたら、コンボボックスが出てきますか??
新たに作成しなければ、フォームやコンボボックスは出てきません。
あくまでもCOMBOモジュールは、コンボボックスへの登録削除を行うプログラムです。
一度作ったプログラムを簡単に使い回せるという事です。
PS.黒糖焼酎探してみますw
oRe殿
コーデでございます。ご返信ありがとうございます。そうですよね、、、新たに作らなければ出て来ませんよね!
試したら、出てきました。ご面倒お掛け致しました。
あの、、、「入出庫履歴」まだ出て来ません、、、私の送信した上記「COMBOモジュール」のコードで、おかしな箇所、
ございますか?? ご確認頂けますと助かります、宜しくお願い致します。
PS.黒糖は、メジャーなところで「れんと」です。お勧めは、「里の曙」か「島のナポレオン」です。(笑)
oRe殿
コーデでございます。現在Ver.22まで完成でSTOPしておりますが、どうしても、メイン画面に、入出庫履歴が表示されないのが気になっております。一度、下記メールアドレスに御連絡賜りますと幸甚です。
宜しくお願い致します。
コーデ様
コメントありがとうございます。
コーデ様のExcelファイルを確認したところ、
↑上記の『Sheet2』は、 オブジェクト名でシートを指定しています。
オブジェクト名『Sheet1』のシート名は『Sheet2( 入出庫履歴)』となっています。
オブジェクト名『Sheet2』のシート名は『Sheet1( データベース)』となっています。
コーデ様は、オブジェクト名『Sheet2』を指定しており、 を指定しているという事になります。
『Sheet1(データベース)』
入出庫履歴を表示させるには、
【オブジェクト名でシートを指定する場合】
【シート名でシート指定する場合】
上記どちらでも、入出庫履歴を表示できると思います。
oRe 殿
おはようございます。コーデでと申します。
#22終了時点で、部品編集迄、NGアクション無しに完成しましたが、
部品編集ボタンをクリックしても、反応が無いのですが、どんな問題がございますか??
恐らくMainフォームのモジュールの、どこかに問題があるのかと、勝手に思っていますが、如何でしょう??
ご教示頂けますと幸甚です。宜しくお願い致します。
コーデ
コーデ様
コメントありがとうございます。
コーデ様のExcelファイルを確認したところ、
おっしゃるとおりMainフォームに問題があります。
コーデ様が作成されたHensyuu表示プロシージャを選択してみてください。
↓上の方にあるオブジェクト欄が『General』となっています。
これは、オブジェクト(CommandBotton4)が選択されていない状態で、
正常にビルド(作成)されていません。
↓正常にビルドされたものです。
【作成方法】
オブジェクト蘭の▼から、『CommandBotton4』を選択するか、
作成した『製品編集ボタン』をダブルクリックして作成してみてください。
Hensyuuフォームを表示できると思います。
oRe殿
コーデでございます。ご教示頂きありがとうございます。大変助かります。
私と同じような内容で、困っている方もいるかと思います。
(えっ! 基本的な事だからお前だけだ、、、と、、、そうかも知れません)
また、相談させて頂きます。先ずは御礼まで。。。
コーデ様
コメントありがとうございます。
お役に立てたようで幸いです。