2014-11-07 59 views
0

对于我的问题不明确的本质,事先道歉。我绝对是一个VBA业余爱好者在Excel范围中使用变量

我有一个相当长的宏,基本上打开一个csv,重新格式化一些行并保存为csv。

宏查找一个列标题是这样的:

ValArray(1) = .Match("CH4", RawWs.Range("a1:iv1"), 0) 

现在我公司的工作人员正在删除领先行,这样的报头字段是第1行相反,我想找到哪里标题开始。头总是在列A字“ID”开始

所以我测试此代码,找到行,所述头开始:

Sub findRowOne() 
Dim SearchRange As Range 
Dim FindRow As Range 
Set SearchRange = Range("A1", Range("A65536").End(xlUp)) 
Set FindRow = SearchRange.Find("ID", LookIn:=xlValues, lookat:=xlWhole) 
MsgBox FindRow.Row 
End Sub 

我试图采取这样产生的数代码并将其添加到代码像这样的第一行:

ValArray(1) = .Match("CH4", RawWs.Range("a" & FindRow.Row & ":" & "iv" & FindRow.Row), 0) 

这似乎并不在我的大码范围内的工作:

Sub gasExtraction() 

Dim RawWbName As String 
Dim RawWb As Workbook 
Dim RawWs As Worksheet 
Dim NewWb As Workbook 
Dim NewWs As Worksheet 
Dim ValArray(1 To 14) As Long 
Dim Cel As Range 
Dim r As Range 
Dim DateTime As Date 
Dim SearchRange As Range 
Dim FindRow As Range 
Dim firstRow As String 




RawWbName = Application.GetOpenFilename("CSV Files (*.csv), *.csv") 

Workbooks.Open RawWbName, local:=True 
Set RawWb = ActiveWorkbook 
Set RawWs = ActiveSheet 
Set NewWb = Workbooks.Add 
Set NewWs = ActiveSheet 
Set SearchRange = Range("A1", Range("A65536").End(xlUp)) 
Set FindRow = SearchRange.Find("ID", LookIn:=xlValues, lookat:=xlWhole) 

NewWs.Cells(1, 1) = RawWs.Cells(1, 1) 


With Application.WorksheetFunction 
    ValArray(1) = .Match("CH4", RawWs.Range("a" & FindRow.Row & ":" & "iv" & FindRow.Row), 0) 'change label 
    ValArray(2) = .Match("CO2", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(3) = .Match("O2", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(4) = .Match("BALANCE", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(5) = .Match("CO", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(6) = .Match("INI-SP", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(7) = .Match("INI-DP", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(8) = .Match("INI-FLOW", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(9) = .Match("INI-POWER", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(10) = .Match("BARO", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(11) = .Match("ANSWER 1", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(12) = .Match("ANSWER 2", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(13) = .Match("INI-TEMP", RawWs.Range("a1:iv1"), 0) 'change label 
    ValArray(14) = .Match("CHOSEN 1", RawWs.Range("a1:iv1"), 0) 'change label 

End With 

'do ID 
RawWs.Range("a2:a65536").Copy 
NewWs.Range("a2").Select 
NewWs.Paste 
Range("a1").Select 
ActiveCell.FormulaR1C1 = "01 Asset ID" 

'do DateTime 
RawWs.Range("b2:b65536").Copy 
NewWs.Range("b2").Select 
NewWs.Paste 
Columns("B:B").Select 
Selection.NumberFormat = "dd-mm-yyyy h:mm" 
Range("b1").Select 
ActiveCell.FormulaR1C1 = "02 Date/Time" 

'do Value1 
RawWb.Activate 
Range(RawWs.Cells(2, ValArray(1)), RawWs.Cells(65536, ValArray(1))).Select 
Selection.Copy 
NewWb.Activate 
NewWs.Range("c2").Select 
NewWs.Paste 
Columns("C:C").Select 
Selection.NumberFormat = "0.0" 
Range("c1").Select 
ActiveCell.FormulaR1C1 = "03 Methane" 

'do Value2 
Range(RawWs.Cells(2, ValArray(2)), RawWs.Cells(65536, ValArray(2))).Copy 
NewWs.Range("d2").Select 
NewWs.Paste 
Columns("d:d").Select 
Selection.NumberFormat = "0.0" 
Range("d1").Select 
ActiveCell.FormulaR1C1 = "04 Carbon Dioxide" 

'do Value3 
Range(RawWs.Cells(2, ValArray(3)), RawWs.Cells(65536, ValArray(3))).Copy 
NewWs.Range("e2").Select 
NewWs.Paste 
Columns("e:e").Select 
Selection.NumberFormat = "0.0" 
Range("e1").Select 
ActiveCell.FormulaR1C1 = "05 Oxygen" 

'do Value4 
Range(RawWs.Cells(2, ValArray(4)), RawWs.Cells(65536, ValArray(4))).Copy 
NewWs.Range("f2").Select 
NewWs.Paste 
Set r = Intersect(NewWs.Range("f3:f65536"), NewWs.UsedRange) 
If Not r Is Nothing Then 
    For Each Cel In r.Cells 
     If Cel < 0 Then 
      Cel.Value = 0 
     End If 
    Next Cel 
    End If 
Columns("f:f").Select 
Selection.NumberFormat = "0.0" 
Range("f1").Select 
ActiveCell.FormulaR1C1 = "06 Balance Gas" 

'do Value5 
Range(RawWs.Cells(2, ValArray(5)), RawWs.Cells(65536, ValArray(5))).Copy 
NewWs.Range("g2").Select 
NewWs.Paste 
Range("g1").Select 
ActiveCell.FormulaR1C1 = "07 Carbon Monoxide" 

'do Value6 
Range(RawWs.Cells(2, ValArray(6)), RawWs.Cells(65536, ValArray(6))).Copy 
NewWs.Range("h2").Select 
NewWs.Paste 
Range("h1").Select 
ActiveCell.FormulaR1C1 = "08 Pressure" 

'do Value7 
Range(RawWs.Cells(2, ValArray(7)), RawWs.Cells(65536, ValArray(7))).Copy 
NewWs.Range("i2").Select 
NewWs.Paste 
Columns("i:i").Select 
Selection.NumberFormat = "0.00" 
Range("i1").Select 
ActiveCell.FormulaR1C1 = "09 Diff Pressure" 

'do Value8 
Range(RawWs.Cells(2, ValArray(8)), RawWs.Cells(65536, ValArray(8))).Copy 
NewWs.Range("j2").Select 
NewWs.Paste 
Columns("j:j").Select 
Selection.NumberFormat = "0.0" 
Range("j1").Select 
ActiveCell.FormulaR1C1 = "10 Flow" 

'do Value9 
Range(RawWs.Cells(2, ValArray(9)), RawWs.Cells(65536, ValArray(9))).Copy 
NewWs.Range("k2").Select 
NewWs.Paste 
Columns("k:k").Select 
Selection.NumberFormat = "0.0" 
Range("k1").Select 
ActiveCell.FormulaR1C1 = "11 Energy" 

'do Value10 
Range(RawWs.Cells(2, ValArray(10)), RawWs.Cells(65536, ValArray(10))).Copy 
NewWs.Range("l2").Select 
NewWs.Paste 
Range("l1").Select 
ActiveCell.FormulaR1C1 = "12 Atmospheric Pressure" 

'do Value11 
Range(RawWs.Cells(2, ValArray(11)), RawWs.Cells(65536, ValArray(11))).Copy 
NewWs.Range("m2").Select 
NewWs.Paste 
Range("m1").Select 
ActiveCell.FormulaR1C1 = "13 Valve Arrive" 

'do Value11 
Range(RawWs.Cells(2, ValArray(12)), RawWs.Cells(65536, ValArray(12))).Copy 
NewWs.Range("n2").Select 
NewWs.Paste 
Range("n1").Select 
ActiveCell.FormulaR1C1 = "14 Valve Depart" 

'do Value12 
Range(RawWs.Cells(2, ValArray(13)), RawWs.Cells(65536, ValArray(13))).Copy 
NewWs.Range("o2").Select 
NewWs.Paste 
Range("o1").Select 
ActiveCell.FormulaR1C1 = "15 Temp" 

'do Value13 
Range(RawWs.Cells(2, ValArray(14)), RawWs.Cells(65536, ValArray(14))).Copy 
NewWs.Range("p2").Select 
NewWs.Paste 
Range("p1").Select 
ActiveCell.FormulaR1C1 = "16 Comment" 

Rows("2:2").Select 
Selection.Delete Shift:=xlUp 

NewWb.SaveAs Filename:=RawWb.Path & "\Land_Gas Extraction " & RawWb.Name, FileFormat:=xlCSV 
' NewWb.Close 


RawWb.Close 

End Sub

对不起,我觉得这个解释有点分散。

回答

0

它不工作的原因是FindRowNothing

当行

Set FindRow = SearchRange.Find("ID", LookIn:=xlValues, lookat:=xlWhole) 

运行,NewWb仍处于活动状态,因此返回Nothing

如果您对下列它应该工作更换你的代码的第一行:

RawWbName = Application.GetOpenFilename("CSV Files (*.csv), *.csv") 

Workbooks.Open RawWbName, local:=True 
Set RawWb = ActiveWorkbook 
Set RawWs = ActiveSheet 
Set NewWb = Workbooks.Add 
Set NewWs = ActiveSheet 
RawWb.Activate 
With RawWb.Sheets(RawWs.Name) 
    Set SearchRange = .Range("A1", Range("A65536").End(xlUp)) 
    Set FindRow = SearchRange.Find("ID", LookIn:=xlValues, lookat:=xlWhole) 
End With 
NewWb.Sheets(NewWs.Name).Cells(1, 1) = RawWs.Cells(1, 1) 
+0

应该是'.Range(“A1”,.Range(“A65536”)。End(xlUp))'注意'.' '.Range( “A65536”)' – 2014-11-07 06:53:36