来自单元格+其他单元格数据VBA Excel的前三个值

时间:2015-08-17 09:48:07

标签: excel vba excel-vba if-statement trim

我有两个表,我需要使用VBA从一个表获取数据。我有一个代码来导入数据并将它们放在我需要的列范围内,但是我仍然坚持编写它们:

  1. 我需要检查日期列单元格是否为空以及是否为空,而不是从其他单元格中输入日期

    If IsEmpty(oldtable.Range("L3", "L10").Value) Then

    newtable.Range("J3", "J10").Value = newtable.Rang("E3", "E10").Value

    Else newtable.Range("J3", "J10").Value = oldtable.Rang("L3", "E10").Value

    End if

  2. 需要从相同范围内的单元格中的数字+值中获取前3个字符串

    newtable.Range("O3", "O10").Value = Mid(newtable.Range("M3", "10").Value,1,3)&newtable.Range("N3", "N10").Value

  3. 代码对我不起作用。 感谢您的支持!

    fullcode:

    Dim filter As String
    Dim caption As String
    Dim file As String
    Dim oldtable As Workbook
    Dim newtable As Workbook
    
    Range("A3:R10").Select
    Selection.ClearContents
    
    Set newtable = Application.ActiveWorkbook
    
    filter = "Text files (C:\Excel\file.xlsx),C:\Excel\file.xlsx"
    caption = "Please Select an input file "
    GREMPG1 = Application.GetOpenFilename(filter, , caption)
    
    oldtable = Application.Workbooks.Open(GREMPG1)
    
    Dim wsheet_new1 As Worksheet
    Set wsheet_new1 = newtable.Worksheets(1)
    Set wsheet_new2 = newtable.Worksheets(2)
    
    Dim wsheet_old As Worksheet
    Set wsheet_old = oldtable.Worksheets(1)
    
    'This is OK
    wsheet_new1.Range("C3", "C11").Value = wsheet_new1.Range("C2").Value 
    
    'This is OK
    wsheet_new1.Range("D3", "D11").Value = Application.WorksheetFunction.VLookup(wsheet_old.Range("E2", "E10"), wsheet_new2.Range("A1:B16").Value, 2, False)
    
    'Empty values stay empty
        If IsEmpty(wsheet_old.Range("L3", "L11").Value) Then
            wsheet_new1.Range("J3", "J11").Value = wsheet_new1.Range("E3", "E11").Value
        Else
            wsheet_new1.Range("J3", "J11").Value = wsheet_old.Range("L2", "L10").Value
        End If
    
    GREMPG1_wb.Close
    
    
    End Sub
    

1 个答案:

答案 0 :(得分:0)

IsEmpty功能的帮助说明:

  

如果变量未初始化,或者显式设置为Empty,则IsEmpty返回True;否则,它返回False。如果expression包含多个变量,则始终返回false。 IsEmpty仅返回变体的有意义信息。

因为您传递的是多个单元格("L3", "L11"),所以IsEmpty函数始终返回False。最简单的答案是编写一个函数,它接受Range并测试每个单元格并返回True / False。这是功能:

Private Function RangeIsEmpty(ByRef theRange As Range) As Boolean

Dim cell As Range
Dim result As Boolean

    result = True
    For Each cell In theRange.Cells
        If Not IsEmpty(cell) Then
            result = False
            Exit For
        End If
    Next cell

    RangeIsEmpty = result

End Function

将函数复制到与代码相同的模块中。然后改变这一行:

If IsEmpty(wsheet_old.Range("L3", "L11").Value) Then

要:

If RangeIsEmpty(wsheet_old.Range("L3", "L11").Value) Then