从所选单元格(或范围)中选择第一个空单元格,然后添加值(日期),然后添加偏移量和inputext

时间:2014-03-17 04:21:08

标签: excel vba date excel-vba

我一直在寻找好的例子,但找不到我需要的东西 以下是上下文:该代码适用于包含约50家供应商的销售跟踪工作表(每种供应商都可以增加价值,而且大部分供应商都不了解Excel)。

我想选择第一个空单元格(首先它们可以输入一个值是B5,而不是更高,因为表格的顶部包含一些指令)。实际上,从这个单元格(日期值在列B中,从第5行开始),第二个日期值在B6中

Add the Date (date or now) as activecell.value
Then 2 cells to the right activecell.offset(0,2)
And insert the value of the textbox (their ID).

现在,我可以添加日期和文本框ID 这就是我到目前为止所做的:

Sub CommandButton1_click()

Dim Input_ID As String, Date_in As String

Date_in = Format(Now, "DD-MMM")
ActiveCell.Value = Date_in
Input_ID = InputBox("SVP entré votre ID ", "Data Entry Form")
ActiveCell.Offset(0, 2) = Input_ID

End Sub

但是,是否可以使该命令/按钮仅用于“B”列?因为我不知道他们将日期和他们的ID添加到另一列 PS:我或多或少从VBA开始,我从各处学习,所以如果你能在你的代码中添加一些解释,我很感激。感谢

编辑1:发表评论

Sub Date_insert_click() 

Dim Input_ID As String, Date_in As String 
Dim ws As Worksheet 
Set ws = ActiveSheet 'change to your actual worksheet 
'Dim Date_in As Date 
Date_in = Format(Now, "DD-MMM")
With ws.Range("B" & ws.Rows.Count).End(xlUp) 
    If .Row >= 4 Then .Offset(1, 0).Value = Date_in Else Exit Sub 
    Input_ID = InputBox("SVP entré votre ID ", "Data Entry Form") 
    If Input_ID <> "" Then .Offset(1, 1).Value = Input_ID Else .Offset(1, 0).Value = ""
End With 

End Sub 

但我发现了一个弱点。如果我在K378之类的任何地方选择一个单元格, 我仍然可以添加值(date_In或输入框的值),但无法看到它,因为单元格未处于活动状态。

1 个答案:

答案 0 :(得分:0)

请注释:

Sub CommandButton1_click()

Dim Input_ID As String, Date_in As String
Dim ws As Worksheet

Set ws = Thisworkbook.Sheets("Sheet1") 'change to your actual worksheet
Date_in = Format(Now, "DD-MMM")

With ws.Range("B" & ws.Rows.Count).End(xlUp)
    If .Row >= 4 Then .Offset(1, 0).Value = Date_in Else Exit Sub
    Input_ID = InputBox("SVP entré votre ID ", "Data Entry Form")
    If Input_ID <> "" Then .Offset(1, 2).Value = Input_ID Else .Offset(1, 0).Value = ""
End With

End Sub

编辑1:按要求说明

问:为什么将Worksheet对象传递给变量?
答:HERE是对这个问题的一些解释。此外,它还使您的代码更易读,更容易调试。

解释代码:

'This line simply finds the last cell in Column B
With ws.Range("B" & ws.Rows.Count).End(xlUp)         
    'other code here
End With

为什么要使用With?我用过,因为所有的编码都集中在Column B上,其他数据输入也是对它的引用。
你也可以在我上面提供的链接中看到使用它的优点的解释。

With ws.Range("B" & ws.Rows.Count).End(xlUp)
    'Since we used With, you can directly access the Range properties
    'The following line uses the Row and Offset property
    'Row returns the row number of the range you're workning on
    'Offset literally offets the range you are currently working on
    If .Row >= 4 Then .Offset(1, 0).Value = Date_in Else Exit Sub
    'This next line is already known to you, no need to explain
    Input_ID = InputBox("SVP entré votre ID ", "Data Entry Form")
    'Next line checks if Input_ID is supplied
    'If yes, we use offset to get to the 2nd column from the current range
    'If no, we delete the Date_In value
    If Input_ID <> "" Then .Offset(1, 2).Value = Input_ID Else .Offset(1, 0).Value = ""
End With

我希望我解释得足够 但是,如果您还需要更多解释,请将其评论出来 如果你在某个地方遇到困难,就发布另一个问题。