VBA:如何从特定的列和单元格开始“清空”?

时间:2018-06-24 04:56:42

标签: excel excel-vba vba

基本上,我正在制作一个用户窗体,希望数据从单元格B4开始在B列中的下一个空行中开始。

这是我从网上找到的一个用户表单模板获得的代码:

Private Sub OKButton_Click()

Dim emptyRow As Long

'Make Sheet1 active
Sheet1.Activate

'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 2

'Transfer information
Cells(emptyRow, 1).Value = NameTextBox.Value
Cells(emptyRow, 2).Value = PositionTextBox.Value
Cells(emptyRow, 3).Value = EmployeeIDTextBox.Value

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Private Sub OKButton_Click()


    ' Declare/Set variable for referencing workbook
    Dim wb As Workbook
    Set wb = ThisWorkbook

    ' Declare/Set variable for referencing worksheet
    Dim ws As Worksheet
    Set ws = wb.Worksheets("Sheet1")

    'Determine next empty Row
    Dim emptyRow As Long
    ' Code below works like this:
        ' ws = the worksheet
        ' .Range("b65536") is the last cell in column b
        ' .End(xlUp) means go up from cell b65536 until we hit a non-empty cell
        ' .Row is the row number of that non-empty cell
        ' + 1 to get to the empty row below
    emptyRow = ws.Range("b65536").End(xlUp).Row + 1

    ' Create/Set a variable for referencing the range we want to use
    ' The range will be set to start at column b of
    ' the empty row and go to column AF of the empty row
    Dim rng As Range
    Set rng = ws.Range("b" & emptyRow & ":AF" & emptyRow)


    'Transfer information
    ' If we didn't use "With rng", below, you'd have to write each of these lines like:
    ' rng.Cells(...
    ' Since the range is only 1 row, you can replace the .Cells(emptyrow, 1), etc.
    ' like you had and just do .Cells(1,1), etc.
    With rng
        .Cells(1, 1).Value = NameTextBox.Value
        .Cells(1, 2).Value = PositionTextBox.Value
        .Cells(1, 3).Value = EmployeeIDTextBox.Value
        .Cells(1, 4).Value = GenderComboBox.Value
        .Cells(1, 5).Value = NationalityTextBox.Value
        .Cells(1, 6).Value = DOBTextBox.Value
        .Cells(1, 7).Value = PassportTextBox.Value
        .Cells(1, 8).Value = PassportExpTextBox.Value
        .Cells(1, 9).Value = MedicalTextBox.Value
        .Cells(1, 10).Value = YFTextBox.Value
        .Cells(1, 11).Value = Lic1TextBox.Value
        .Cells(1, 12).Value = Lic1FlagTextBox.Value
        .Cells(1, 13).Value = Lic1ExpTextBox.Value
        .Cells(1, 14).Value = Lic2TextBox.Value
        .Cells(1, 15).Value = Lic2FlagTextBox.Value
        .Cells(1, 16).Value = Lic2ExpTextBox.Value
        .Cells(1, 17).Value = DPComboBox.Value
        .Cells(1, 18).Value = DPCertTextBox.Value
        .Cells(1, 19).Value = DPCertExpTextBox.Value
        .Cells(1, 20).Value = GMDSSTextBox.Value
        .Cells(1, 21).Value = GMDSSCertTextBox.Value
        .Cells(1, 22).Value = GMDSSExpTextBox.Value


        If RadarCheckBox.Value = True Then .Cells(1, 23).Value = "Yes"

        If ArpaCheckBox.Value = True Then .Cells(1, 24).Value = "Yes"

        If EcdisCheckBox.Value = True Then .Cells(1, 25).Value = "Yes"

        If BosietCheckBox.Value = True Then .Cells(1, 26).Value = "Yes"

        If HuetCheckBox.Value = True Then .Cells(1, 27).Value = "Yes"

        If HloCheckBox.Value = True Then .Cells(1, 28).Value = "Yes"

        If OrbCheckBox.Value = True Then .Cells(1, 29).Value = "Yes"

        If EACheckBox.Value = True Then .Cells(1, 30).Value = "Yes"

        If VsoOptionButton1.Value = True Then
            .Cells(1, 31).Value = "Yes"
        Else
            .Cells(1, 31).Value = "No"
        End If

    End With


End Sub