2015-08-17 85 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

相關問題