ExcelVB编程应用程序

ExcelVB编程应用程序

我想要创建一个应用程序来生成机器运行时日志的图表。我想要将多个单元格中的值(例如“B5”、“B6”、“E5”、“E6”、“J5”和“J6”)粘贴到不同工作表上的相应单元格中。

困难的部分是,我只希望在输入日期与第二张表上的列的日期标题匹配时传输数据。

我应该使用哪种命令来移动/复制数据,同时将其放置在正确的日期位置。最好有一个可点击的按钮。

目前,我已经在 YouTube 上找到了视频,因为我不是 VB 程序员,这是我在按钮中制作的

Private Sub CommandButton1_Click()
Dim FirstShiftStart As Integer, FirstShiftEnd As Integer, SecondShiftStart As Integer, SecondShiftEnd As Integer, Today As Date

Worksheets("App").Select
FirstShiftStart = Range("D5")
FirstShiftEnd = Range("G5")
SecondShiftStart = Range("D6")
SecondShiftEnd = Range("G6")
Worksheets("BACKEND").Select
If Worksheets("backend").Range("B3").Equals("Today") <> "" Then
    If Worksheets("BACKEND").Range("B4").Offset(1, 0) <> "" Then
    Worksheets("BACKEND").Range("B4").End(x1Right).Select
    End If
Else
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = FirstShiftStart
ActiveCell.Offset(2, 0).Select
ActiveCell.Value = SecondShiftStart
Worksheets("App").Select

End Sub

App 将是用户看到的工作表,其中 D5 D6 G5 和 G6(J5 和 J6)处有可填充的值,稍后可添加为字符串,以便在需要时传输评论。

答案1

您拥有的代码不会执行任何操作,而且很难看出您想要实现的目标,我在下面重写了一些工作代码并添加了一些注释。

Private Sub CommandButton1_Click()
Dim FirstShiftStart As Long, FirstShiftEnd As Long, SecondShiftStart As Long, SecondShiftEnd As Long

Dim ws1 As Worksheet: Set ws1 = Sheets("App") ' declares ws1 as sheet App
Dim ws2 As Worksheet: Set ws2 = Sheets("BACKEND") ' declares ws2 as sheet BACKEND

'Assigns the values from the ranges to the variables, NB they have to be round numbers as you have declared them Integers or Long (which wind up the same in VBA apparently)
FirstShiftStart = ws1.Range("D5")
FirstShiftEnd = ws1.Range("G5")
SecondShiftStart = ws1.Range("D6")
SecondShiftEnd = ws1.Range("G6")
Debug.Print SecondShiftStart

If ws2.Range("B3") = Date Then ' Date returns todays date in VBA, this tests if B3 = todays Date
    If ws2.Range("B4").Offset(1, 0) <> vbNullString Then ' Tests if BACKEND("B5") is empty (offsets 1 row down from b4)
    'what do you want to happen here?
    ws2.Range("B6") = SecondShiftStart ' Eg
    End If
End If
'the above nested if statement will copy the value from App("D6") to BACKGROUND("B6") if BACKGROUND("B3") = Todays date and if BACKGROUND("B4") is not  = ""
'you can achieve the same in one line using:

If ws2.Range("B3") = Date And ws2.Range("B4").Offset(1, 0) <> vbNullString Then ws2.Range("B7") = FirstShiftStart

End Sub

尽量避免选择和激活单元格等,这很慢而且没有必要。尝试根据您想要实现的目标调整上述代码,然后回发。

请注意 debug.print 行,如果您转到 VBA 窗口并从“视图”下拉列表中显示即时窗口,它应该会在那里打印出值。这是一个有用的调试工具(您可以通过使用 CTRL-F8 将光标放在 debug.print 行上来运行到该行下方的行,使用绿色运行按钮运行所有代码,或者将其链接到 commandbutton1。

在运行代码之前,还可以使用 Debug 下拉菜单中的 compileVBAproject,这样在运行代码之前,您就会发现您使用了“xlright”而不是“xltoright”,从而节省时间。您还应该使用页面顶部的 Option Explicit,这有助于确保您正确声明所有变量。

祝你好运。

相关内容