2016-10-03 3 views
0

유효한지 여부를 확인하는 추가 코드를 구현하려고합니다. 그렇지 않으면 데이터가 현재 통합 문서로 복사되지 않습니다.VBA를 개선하여 열의 데이터를 확인하십시오.

유효하지 않은 데이터는 당신이 세포를 많이 가지고 범위를 선택하는 경우,이 범위의 값이 값과 같다, 이런 식으로 데이터를 복사 할 수 없습니다 어디서나

Sub TransferTRA015() 

Dim strPath2 As String 
Dim strPath3 As String 
Dim strPath4 As String 
Dim wbkWorkbook1 As Workbook 
Dim wbkWorkbook2 As Workbook 
Dim wbkWorkbook3 As Workbook 
Dim wbkWorkbook4 As Workbook 

strPath2 = "C:\Users\transducer1.CCS\Desktop\LabVIEW Data\TRA015\TRA015_TEST_Room.xlsx" 
strPath3 = "C:\Users\transducer1.CCS\Desktop\LabVIEW Data\TRA015\TRA015_TEST_Cold.xlsx" 
strPath4 = "C:\Users\transducer1.CCS\Desktop\LabVIEW Data\TRA015\TRA015_TEST_Hot.xlsx" 


Set wbkWorkbook1 = ThisWorkbook '### changed this 
Set wbkWorkbook2 = Workbooks.Open(strPath2) 
Set wbkWorkbook3 = Workbooks.Open(strPath3) 
Set wbkWorkbook4 = Workbooks.Open(strPath4) 

'copy the values across 
'### change the sheet and range to what you need 
wbkWorkbook1.Worksheets("RAW DATA").Range("A13:Y36").Value = _ 
    wbkWorkbook2.Worksheets("sheet1").Range("A2:Y25").Value 

wbkWorkbook1.Worksheets("RAW DATA").Range("A5:Y8").Value = _ 
    wbkWorkbook4.Worksheets("sheet1").Range("A2:Y5").Value 

wbkWorkbook1.Worksheets("RAW DATA").Range("A40:Y43").Value = _ 
    wbkWorkbook3.Worksheets("sheet1").Range("A2:Y5").Value 

wbkWorkbook2.Close (True) 
wbkWorkbook3.Close (True) 
wbkWorkbook4.Close (True) 
End Sub 
+0

잘못된 데이터? 개별 세포에서? 현재 전체 범위를 복사하고 있습니다. – Comintern

+1

LabVIEW는 여러 가지 방법으로 불량 데이터를 거부합니다. 왜 사후 처리 과정에서 처리하지 않습니까? – ijustlovemath

+0

나는 거기에서 그것을 할 수 있었다. 그러나 vba가 직장에서 유용 해지기 시작하면서 나는 내가 따라갈 때 그 과정을 배우고있다. – tylerj

답변

1

0.01 -0.01 사이 왼쪽 위 모서리에있는 셀의

코드에 다음을 추가하여 VBA에서 제공하는 가장 빠른 방법으로 wbkWorkbook2.Worksheets ("sheet1")에서 wbkWorkbook1.Worksheets ("RAW DATA")로 지정된 범위의 값만 복사하십시오.

Dim vSource as Variant 
Dim LastRow as long, arrayRow as long, arrayCol as long 

With wbkWorkbook2.Worksheets("sheet1") 
    'find last row with data in the sheet 
    LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    vSource = .Range("a2:y" & LastRow) 'or .Range("A2:Y25") if for example 
             'you only need this specified part of data 

    For arrayRow = Lbound(vSource) to Ubound(vSource) 
     For arrayCol = Lbound(vSource,2) to Ubound(vSource,2) 
      If vSource(arrayRow,arrayCol)<0.01 and vSource(arrayRow,arrayCol)>-0.01 then 
       vSource(arrayRow,arrayCol)=vbNullString 
      End if 
     Next arrayCol 
    Next arrayRow   

End With 

wbkWorkbook1.Worksheets("RAW DATA").Range("A13:Y36") = vSource 
+0

이전에 사용한 버전은 범위의 첫 번째 열에있는 값만 처리 했으므로 이제는 전체 범위에서 올바르게 작동합니다. –

+0

정말 환상적입니다. – tylerj

관련 문제