正在寻找一种新方法来创建“办理登机手续”。和'退房''系统

时间:2015-03-17 11:03:47

标签: excel vba excel-vba

我目前正在为一个拥有大量硬盘驱动器的小型建筑物开发数据库,​​到目前为止,我所制造的系统与我的雇主所希望的完全相同。

我目前的问题是使用宏登录并注销每个硬盘驱动器的一些VBA编码,硬盘驱动器有一行,每行都有一个“签入”和“签出”按钮。目前,编码适用于这两个按钮,但我必须为每个按钮写出“签入”和“签出”的代码。

有没有办法将按钮的位置转换为字符串,然后将其自身添加到编码中,我可以放入某种类型的数组,为我自动定位每个按钮的输出?

The coding that handles the button's event.

宏是一个简单的.Show语句。 我的excel表如下图所示。大多数当前的单元都使用公式进行编程,因为这个系统需要对不太熟练的计算机用户进行相当自动化。

Excel visuals, explaining cell values.

修改 Before I used button to 'check-in' HDD.

点击按钮后,我的姓名缩写被添加到当前时间/日期的结尾。这需要在许多按钮上发生,所有结果都在不同的单元格中。

Output following button.

1 个答案:

答案 0 :(得分:1)

我的建议是避免使用按钮,而是覆盖工作表的SelectionChanged事件处理程序。将按钮更改为格式化单元格,单击该单元格将执行所需的操作。

首先,配置UserForm以返回值。一种方法是将以下代码放入UserForm的代码隐藏中:

Public Property Get Initials() As String
  Initials = txtInitials.Text
End Property

Public Property Let Initials(ByVal sInitials As String)
  txtInitials.Text = sInitials
End Property

Private Sub btnOk_Click()
  Me.Hide
End Sub

接下来,将以下代码添加到Sheet1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim sInitials As String
  Dim sDate As String
  Dim sTime As String
  Dim frmInitials As InitialsForm

  If Target.Column = 13 Then
    Set frmInitials = New InitialsForm
    frmInitials.Show

    sInitials = frmInitials.Initials

    Unload frmInitials

    sDate = Date
    sTime = Time
    Cells(Target.Row, 6).Value = sDate + " / " + sTime + " " + sInitials
  End If
End Sub

当用户点击第13列中的单元格(M - " Check Out")时,将显示一个用户表单,询问用户的姓名首字母。一旦他们输入并按下OK按钮,首字母将被添加到时间戳的末尾并插入到同一行的第6列(F)中。