2016-06-16 11 views
-1

作業ログのコードを書きたいと思っています。日付、会社、注文した商品の3つの列があります。列内の次の空白セルを見つけてそれに書き込む

各列に入力ボックスを含むフォームを作成して、対応する情報を入力したいとします。次の空のセルを見つけて、入力ボックスを使用してその値を設定することができません。写真のように見えるでしょう。

Public Function startRow() As Integer 
    startRow = 2 
End Function 

startRow属性があり、私はヘッダを無視するすべてのデータテーブルに持っている機能、時にはUI要素と空のシートで作業する:

Example of what i want to achieve

+2

新しいSOのメンバーとして、私はこのセクションを通してください[MCVE] – swiftBoy

答えて

1

あなたは基本的にこのような何かをしたいです。

Private Function LastRow() As Integer 
    Dim rangeObj As Range 
    Set rangeObj = Tabelle3.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
If rangeObj Is Nothing Then 
    LastRow = startRow 
ElseIf rangeObj.Row < startRow Then 
    LastRow = startRow 
Else 
    LastRow = rangeObj.Row 
End If 
End Function 

この関数この行を知った後で最後に使用された行の番号を返します。その行の下にデータを挿入できます。 If-Elseif-Elseは空のシートとシートのためのもので、コラム区切りを含むものです

0

コードは機能しますが、コードを再実行するたびに前回の値を上書きします。次の行にドロップダウンしてそこに書き込むのではなく、毎回2行目の値が必要です。

+2

あなたは自分の答えではなく、あなたが参照している答えにコメントを追加する必要があります。回答を追加すると、その回答のポスターにあなたの質問が通知されません – RGA

0

これを試してみてください:

Enum columnNumbers 
    colDate = 1 
    colCompany 
    colProduct 
End Enum 

Private Sub CommandButton1_Click() 
    Dim nextRow As Integer 
    Dim ws As Worksheet 

    Set ws = ActiveSheet 
    nextRow = ws.Cells(ws.Rows.Count, colDate).End(xlUp).Row + 1 

    ws.Cells(nextRow, colDate) = InputBox("Enter date value", "Date", Date) 
    ws.Cells(nextRow, colCompany) = InputBox("Enter company name", "Company") 
    ws.Cells(nextRow, colProduct) = InputBox("Enter product details", "Product") 
End Sub 

をあなたの3つの列が連続していると仮定すると、最初の列挙値に列番号を割り当てる(例えば、日付列はE、設定colDate = 5の場合)と列挙、その後変数は自動的に1つインクリメントされます(colCompany = colDate + 1など)。

次に入力ボックスを使用して値をキャプチャします。

関連する問題