【问题标题】:VBA Skip Cells If They Have Data In Them And Go To Next Blank?如果单元格中有数据并转到下一个空白处,VBA 会跳过单元格吗?
【发布时间】:2014-11-06 23:32:51
【问题描述】:

请原谅我,如果我太菜鸟而无法使用它,甚至没有任何意义。我正在为自己和我的一个朋友制作一个数据库。 (这将是两个根本没有合并的不同数据库。)我不是从头开始的,所以这可能是我的问题之一。我正在使用我的工作时间表(别担心,它只是一份副本)来“学习/测试”我想用 VBA 做什么。基本上我想要做的是获取单元格“A3:D3”和“E2”的信息(值?)并将这些值放入相应的列中。但我不希望它在下一个单元格内过度编码。这就是我在第 10 行和第 11 行输入的原因。它仍然不喜欢它。

另外,我想知道我是否可以在这方面获得帮助......以及这些信息是否可能是日期敏感的?即您输入今天的工作时间并记得您忘记记录昨天的工作时间,因此您在“DateToday”或 A3 框中输入日期,并将信息记录在专门针对该日期的一行中,或者您跳过两天的工作并且你把日期和VBA跳过两行?

这是两个不同的请求吗?有可能吗?任何帮助深表感谢!!提前谢谢!

    Private Sub CommandButton1_Click()
Dim DateToday As Date, TimeIn As Integer, LunchLength As Integer, TimeOut As Integer, HoursToday As Integer
    Worksheets("sheet1").Select
    DateToday = Range("A3")
    TimeIn = Range("B3")
    LunchLength = Range("C3")
    TimeOut = Range("D3")
    HoursToday = Range("E2")
    Worksheets("sheet1").Range("A141").Select
    If Worksheets("sheet1").Range("A141").Offset(1, 0) <> "" Then
    Worksheets("sheet1").Range("A141").End(x1Down).Select
    End If
    ActiveCell.Value = TimeIn
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = LunchLength
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = TimeOut
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = HoursToday
    Worksheets("sheet1").Range("B2:D2").ClearContents
    ThisWorkbook.Save
    Worksheets("sheet1").Range("B2").Select


End Sub

最后一部分“Worksheets("sheet1").Range("B2").Select”更适合我的第二个项目,但也适合这个。第二个项目将与这个非常相似,除了我和我的朋友将输入零件编号、定义、零件条件和其他内容。再次感谢任何帮助!

【问题讨论】:

    标签: vba excel stock


    【解决方案1】:

    未经测试:

    Private Sub CommandButton1_Click()
    Dim DateToday As Date, TimeIn As Integer, LunchLength As Integer
    Dim TimeOut As Integer, HoursToday As Integer, sht as WorkSheet
    
        Set sht = ThisWorkbook.Worksheets("sheet1")
    
        DateToday = sht.Range("A3")
        TimeIn = sht.Range("B3")
        LunchLength = sht.Range("C3")
        TimeOut = sht.Range("D3")
        HoursToday = sht.Range("E2")
    
        With sht.Cells(Rows.Count,1).End(xlUp).Offset(1,0).EntireRow
            .Cells(1).Value = TimeIn
            .Cells(2).Value = LunchLength
            .Cells(3).Value = TimeOut
            .Cells(4).Value = HoursToday
        End With
    
        sht.Range("B2:D2").ClearContents
        ThisWorkbook.Save
        sht.Range("B2").Select
    End Sub
    

    注意:通常在 VBA 中工作时有no need to Select anything

    【讨论】:

    • 感谢最后一点建议...虽然代码似乎不起作用..它工作了大约一半,它清除了单元格,但是当它输入信息时它只显示一个单元格“LunchLength”单元格,但它没有给出我输入的实际时间,并且它旁边的其他单元格中有信息,不是正确的信息,而是信息。此外,它旁边的单元格实际上不会显示它包含的信息,除非您单击它并在编辑栏中查看单元格中实际上没有信息。
    • ..知道 VB 从中获取信息的单元格是其中包含公式的单元格可能会有所帮助。该公式是一个 =if 公式,它基本上查看其上方的单元格(因此 B3 查看 B2 等),如果我输入 1 或 1hr 等,则 B3 会采用该公式并查看另一组单元格以进行翻译这需要 1 小时或 2 小时并将其转换为 1:00 或 2:00 ......所以我非常希望 VB 对 B3 中的信息进行“图片”,并将其放入值为“”的下一个单元格中”。 VB可以做到这一点吗?
    • 尝试使用Debug.Print TimeIn, LunchLength, TimeOut, HoursToday,看看你在“即时”窗格中得到了什么。如果没有该文件,我很难提出任何其他建议。
    • 我会把那段代码放在哪里?在 .cell(1) 等之后带有值条?
    • 就在 With sht.Cells... 之前 - 输出将在 VB 编辑器的“立即”窗格中。我刚刚测试了代码,它似乎对我来说很好。
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2022-01-26
    • 2015-11-25
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多