ここから本文です

回答受付中の質問

知恵コレに追加する

Excelのユーザーフォームを使って入力したい(再)

zest_defさん

Excelのユーザーフォームを使って入力したい(再)

先日知恵袋内で質問させていただいたのですが…
1回目:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1323563483
2回目:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1123688521

以前までの質問の内容は…
【1回目】
『生産指示書を作成するにあたり、Sheet1に入力された情報で製造部門1の製品ならSheet2に、製造部門2の製品ならSheet3にコピーしたい』

【2回目】
1:『フォーム内テキストボックスに必要事項を入力し【入力】ボタンを押すとSheet1に出力、フォーム内テキストボックスがクリアされ、次に【入力】ボタンを押すと直近に出力された下の行に出力される』
2:『【クリア】ボタンを押すとフォーム内テキストボックスがクリアされる』
3:『【振り分け実行】ボタンを押すと、http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1323563483で教えていただいたマクロを実行する』
4:『【終了】ボタンを押すとユーザーフォームを隠す』
(※参考画像1、2)

2回目の質問の上記4点を実行したいと考えています。1回目、2回目の質問共に親切に回答していただいて自分なりに修正させていただいたのですが、現在作成中のファイルも見て修正点やアドバイスなどがあれば教えていただきたいと思っています。

わかりにくい説明で申し訳ございませんが、ご回答いただければと思います。よろしくお願いいたします。

【参考画像1】http://www.dotup.org/uploda/www.dotup.org0615.jpg.html
【参考画像2】http://www.dotup.org/uploda/www.dotup.org0616.jpg.html
【現在のファイル状況(zipファイル)】http://www.dotup.org/uploda/www.dotup.org1871.xls.html

  • アバター

違反報告

この質問に回答する

回答

2件中12件)
並べ替え:回答日時の
新しい順
古い順

 

yasukiyonetさん

<質問者さんへ補足>~お待ちにならないで~
私の完成品を待ち状態で、補足や再質問をしづらいとのことでしたら、
その気遣いは必要ないです。時間がもったいないです。
他の回答者さんと話進めて結構ですので、よろしくお願いいたします。
一応念のため。

[VBA]~回答じゃありません~
ファイルを確認することが出来
"なんとなく"全容がわかりました。

それと同時に以下のフォームその他のアイデアがうかびました。
「課題として面白いかも」そう思ったので
"もしかしたら"、取り組むかもしれません

判断は質問者さんに委ねますが
質問をこのまま開けていただくと、
完成ファイルを"ひょっとしたら"返すかも
しれません。

・・・1週間(約7~8時間)でできるかな。微妙です。

投稿画像

  • アバター
  • 違反報告
  • 編集日時:2009/3/2 21:13:09
  • 回答日時:2009/3/2 17:48:28

danemono_99さん

途中から失礼します。
今までの経緯を読まして頂きました。私なりに感じた点や、処理内容についてお話しさせて頂きます。
■全体の処理の流れの整理
1.製造指示用のデータはUserFormにて入力する。このUserFormは最小/最大化及び閉じるボタン付きとする。
入力項目はテキストボックスで4つ(製品名、出荷先、数量、備考に該当させる)とする
2.UserForm1のテキストボックスに必用事項入力・・・・・その際の「製造1」と「製造2」の区分けは製品名の頭に”1-”と”2-”を付けることとする。
3.データ入力後、「入力」ボタンクリックで以下のシートにそれぞれ転記し、そのあとテキストボックスをクリアする。
・Sheet「マスター」・・・・・・・・・入力された全てのデータを累積保管する。(最下行に追加していく)
・Sheet「第1製造」・・・・・・・・製品名が”1-”で始まる製品のデータを累積保管する。(同 上
・Sheet「第2製造」・・・・・・・・製品名が”2-”で始まる製品のデータを累積保管する。(同 上
*質問では・常にSheet「第1製造」、「第2製造」をクリアし、全データを再度フィルーにて振り分けを行うようですが、どうせなら常に1件毎に追加処理をかけた方が処理が速いのでは(全データ件数が増えた場合)と思い↑の構想にしました。
ですのでコマンドボタンは「入力」ボタンのみで後は削除。そのボタンのイベントもいらない。
↓をUserForm1のモジュールにコピペ。

Option Explicit
Dim lngRow As Long
Dim i As Integer
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim lngRow1 As Long, lngRow2 As Long
Dim r As Integer
'''入力
Private Sub CommandButton1_Click()''入力ボタンクリック

Call fInput ''マスターへの転記を実行
Call Furiwake''それぞれへ転記実行(新規部分です。)
Call fOutput ''クリア処理実行

End Sub


Private Sub fInput() ''マスターシートへの転記
Dim Ws As Worksheet
Set Ws = Sheets("マスター")
With Ws
lngRow = .Range("A" & Rows.Count).End(xlUp).Row + 1 ''最下行取得
For i = 1 To 4
.Cells(lngRow, i) = CStr(Me.Controls("TextBox" & i).Value)
Next
End With
End Sub

'''
Private Sub fOutput() ''クリア処理
For i = 1 To 4
Me.Controls("TextBox" & i).Value = ""
Next
End Sub

Private Sub Furiwake() ''製造毎振り分け

Set Ws1 = Sheets("第1製造"): Set Ws2 = Sheets("2製造")

lngRow1 = Ws1.Range("A" & Rows.Count).End(xlUp).Row + 1 ''第1製造最下行取
lngRow2 = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1 ''第2製造最下行取


For r = 1 To 4

Select Case Mid(Me.TextBox1.Value, 1, 1)''商品名の頭1文字で条件分岐
Case "1"
Ws1.Cells(lngRow1, r).Value = CStr(Me.Controls("TextBox" & r).Value)
Case "2"
Ws2.Cells(lngRow2, r).Value = CStr(Me.Controls("TextBox" & r).Value)
End Select
Next r

Set Ws1 = Nothing
Set Ws2 = Nothing

End Sub

■最小/最大化ボタンの件(参考サイト:http://www.serpress.co.jp/excel/vba047.html
1.以下のコードを「標準モジュール」にコピペ。
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" _
(ByVal hWnd As Long) As Long

Public Const GWL_STYLE = (-16) 'ウィンドウスタイルを取得
Public Const WS_THICKFRAME = &H40000 'ウィンドウのサイズ変更
Public Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
Public Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン

2.以下を「ThisWorkbook」-「Open」イベントにコピペ(今あるUserFoem1.Showは削除)
'***** ボタンを表示する処理 *****
Dim fRet As Long
Dim hWnd As Long
Dim fStyle As Long

UserForm1.Show vbModeless 'ユーザーフォームを表示する

hWnd = FindWindow("ThunderDFrame", "UserForm1") 'ユーザーフォームのハンドルを取得する
fStyle = GetWindowLong(hWnd, GWL_STYLE) 'ウィンドウに関する情報を取得する
fStyle = (fStyle Or WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX) 'Min,Maxメニューボタンを付加する
fRet = SetWindowLong(hWnd, GWL_STYLE, fStyle) 'ユーザーフォームに追加したボタンを設定する
fRet = DrawMenuBar(hWnd) 'ユーザーフォームのメニューバー外枠を再描画する

  • アバター

この質問に回答する

話題のキーワード

[カテゴリ:Office系(Word、Excel)]