2017-08-17 20 views
0

私は、ユーザーフォームを介して大量のデータを記録するために使用されるスプレッドシートを作成しました。このユーザーフォームでは、初期データは常にスプレッドシート内のマスターデータタブに移動します。しかし私の問題は、別の3つのワークシート、ws2、ws3、ws4があることです。userformを使用して異なるタブにデータを送信する方法は?

ユーザーフォーム内の4つのフィールドに基づいて、このデータがws2 & ws3、またはws3、ws2、ws2、ws4に含まれる必要があるかどうかを判断する16の異なる結果があります。次のようにWS 4など....

のルールは以下のとおりです。

enter image description here

は、誰かが私には必要なシートの間で、この情報を取得する方法を教えてくださいすることができます。以下はユーザーフォームのコードです

Dim iRow As Long 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim ws3 As Worksheet 
Dim ws4 As Worksheet 
Dim Nextnum As Long 
Dim Xnum As Long 

Set ws1 = Worksheets("MasterData") 
Set ws2 = Worksheets("X") 
Set ws3 = Worksheets("A") 
Set ws4 = Worksheets("C") 

Nextnum = Sheets("MasterData").Range("A2").End(xlDown).Value + 1 
Xnum = Sheets("X").Range("A2").End(xlDown).Value + 1 
ANum = Sheets("A").Range("A2").End(xlDown).Value + 1 
CNum = Sheets("C").Range("A2").End(xlDown).Value + 1 

'find first empty row in database 
mrow = ws1.Cells.Find(what:="*", SearchOrder:=xlRows, _ 
    SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 

'copy the data to the database 
    ws1.Cells(mrow, 1).Value = Nextnum 
    ws1.Cells(mrow, 2).Value = Format(Date, "DD/MM/YYYY") 
    ws1.Cells(mrow, 3).Value = Format(Time, "HH:MM:SS") 
    ws1.Cells(mrow, 4).Value = CInt(Format(Date, "WW")) 
    ws1.Cells(mrow, 5).Value = Format(Date, "MMM-YY") 
    ws1.Cells(mrow, 6).Value = CInt(Format(Date, "YYYY")) 
    ws1.Cells(mrow, 7).Value = 1 
    ws1.Cells(mrow, 8).Value = TxtWeight.Value * (1300/1000) 
    ws1.Cells(mrow, 9).Value = Application.WorksheetFunction.VLookup(ComboBrd.Value, Sheets("Lookup Vals").Range("G:H"), 2, False) 
    ws1.Cells(mrow, 10).Value = Application.UserName 
       If ComboBrd.Value = "Mn" Then ws1.Cells(mrow, 11).Value = Application.WorksheetFunction.VLookup(ComboCom.Value, Sheets("Lookup Vals").Range("L:N"), 2, False) Else 
       If ComboBrd.Value = "Pr" Then ws1.Cells(mrow, 11).Value = Application.WorksheetFunction.VLookup(ComboCom.Value, Sheets("Lookup Vals").Range("P:R"), 2, False) Else 
        If ComboBrd.Value = "Vot" Then ws1.Cells(mrow, 11).Value = Application.WorksheetFunction.VLookup(ComboCom.Value, Sheets("Lookup Vals").Range("P:R"), 2, False) 
    ws1.Cells(mrow, 12).Value = TxtRecDate.Value 
    ws1.Cells(mrow, 13).Value = ComboPD.Value 
    ws1.Cells(mrow, 14).Value = ComboNP.Value 
    ws1.Cells(mrow, 15).Value = ComboBrd.Value 
    ws1.Cells(mrow, 16).Value = ComboCom.Value 
    ws1.Cells(mrow, 17).Value = TxtAdditional.Value 
    ws1.Cells(mrow, 18).Value = TxtDOD.Value 
    ws1.Cells(mrow, 19).Value = TxtBn.Value 
    ws1.Cells(mrow, 20).Value = TxtFS.Value 
    ws1.Cells(mrow, 21).Value = ComboPrdG.Value 
    ws1.Cells(mrow, 22).Value = ComboIss.Value 
    ws1.Cells(mrow, 23).Value = TxtUni.Value 
    ws1.Cells(mrow, 24).Value = TxtWet.Value 
    ws1.Cells(mrow, 25).Value = TxtInc.Value 
    ws1.Cells(mrow, 26).Value = TxtDet.Value 
    ws1.Cells(mrow, 27).Value = TxtShr.Value 

誰でも助けていただければ幸いです。

おかげで、

+0

トライaddineすべてのユーザーフォームのオブジェクトの前に 'Me.'(このコードは、ユーザーフォームでの内側に位置している場合)。 'ws1.Cells(mrow、8).Value = Me.TxtWeight.Value *(1300/1000)'のように 'ws1.Cells(mrow、8).Value = TxtWeight.Value *(1300/1000) –

答えて

0

私は選択の場合は、記入しなければならないのワークシートの配列を作成する参考になると思います。ちょうどループの後を通って、データを追加します。

Dim targetWorksheets As Variant 

Select Case True 
Case c1 And c2 And c3 >= 50 And c4 <= 1: targetWorksheets = Array(ws1, ws2, ws3) 
Case c1 And c2 And c3 >= 50 And c4 > 1: targetWorksheets = Array(ws1, ws2, ws3) 
'etc .... 
Case Else: targetWorksheets = Array(ws1) 
End Select 

For Each ws In targetWorksheets 
    mrow = ws.Cells.Find(what:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 
    ws.Cells(mrow, 1).Value = Nextnum 
    ws.Cells(mrow, 2).Value = Format(Date, "DD/MM/YYYY") 
    ws.Cells(mrow, 3).Value = Format(Time, "HH:MM:SS") 
    ws.Cells(mrow, 4).Value = CInt(Format(Date, "WW")) 
    'etc 
Next ws 

Grの

関連する問題