2015-08-17 87 views
0

我有两个表,我需要用VBA从一个到另一个获取数据。我有一个代码,导入数据,并把它们列范围我需要什么,但我被困在在格式化它们:来自单元格+其他单元格数据的前三个值VBA Excel

  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

代码不是为我工作。 感谢您的支持!

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 
+0

什么似乎是问题吗? – Bond

+0

该代码不适用于我。空单元保持空白,Mid函数不能以任何形式工作。 – elly

+0

您是否定义了旧表和新表? – DragonSamu

回答

0

的帮助为IsEmpty功能状态:如果变量未初始化或显式设置为空

的IsEmpty返回True;否则,它返回False。如果表达式包含多个变量,则总是返回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 
+0

谢谢!没有用你的方式,如果功能在我喜欢的方式更好一点点改变。感谢您的帮助。 – elly

相关问题