Vba 查找方法的问题
我有一个由unix程序导出的大型CSV文件,这与我在5月29日询问的文件不同。它包含多个垂直堆叠的大数据组,并由一行间距分隔,即A1:J4098 is传感器1、A4100:J8197 is传感器2等。。每组的第一行是传感器的名称。我正在尝试编写一个宏,它将在CSV中搜索特定的传感器名称,创建指向该组的命名范围,并对其进行自动筛选注意:传感器、参数和Parm在我们的办公室中是同义词 以下是我正在使用的代码:Vba 查找方法的问题,vba,excel,csv,Vba,Excel,Csv,我有一个由unix程序导出的大型CSV文件,这与我在5月29日询问的文件不同。它包含多个垂直堆叠的大数据组,并由一行间距分隔,即A1:J4098 is传感器1、A4100:J8197 is传感器2等。。每组的第一行是传感器的名称。我正在尝试编写一个宏,它将在CSV中搜索特定的传感器名称,创建指向该组的命名范围,并对其进行自动筛选注意:传感器、参数和Parm在我们的办公室中是同义词 以下是我正在使用的代码: Set sData = Activeworkbook.Sheets(1)
Set sData = Activeworkbook.Sheets(1)
Set Generator = ThisWorkbook
Set Dashboard = Generator.Sheets("Dashboard")
'Set range for .Find
Set rSensor = sData.Range("J1000000")
Set rSensor = Range("A18", rSensor.End(xlUp))
'Check if tab already exists and create it if not
For parm = 3 To 23
If IsEmpty(Dashboard.Cells(parm, 1)) Then Exit For
Sensor = Dashboard.Cells(parm, 1)
Exist = False
For Each ws In Generator.Worksheets
If Sensor = ws.Name Then
Exist = True
Set NewWS = Generator.Sheets(ws.Name)
Exit For
End If
Next ws
If Exist = False Then
Generator.Worksheets("Fband").Copy Before:=Generator.Sheets("Scaled Data")
Set NewWS = Generator.Worksheets("Fband (2)")
NewWS.Name = Sensor
End If
'Find sensor name in data; set range if found, msgbox if not
' ! Always goes to first sensor in raw data
With rSensor
Set c = .Find(Sensor, , xlValues)
If c Is Nothing Then
MsgBox ("Parameter Not Found:" & Sensor)
End
Else
Set rData = sData.Cells(c.Row + 1, 1)
Set rData = Range(rData, rData.End(xlDown))
Set rData = Range(rData, rData.End(xlToRight))
'Pull peak amplitude for each frequency band
For Band = 1 To 136
rData.AutoFilter Field:=1, Criteria1:=">" & NewWS.Range("A1").Offset(Band, 1), _
Criteria2:="<" & NewWS.Range("A1").Offset(Band, 3)
sData.AutoFilter.Sort.SortFields.Clear
sData.AutoFilter.Sort.SortFields.Add Key:=Range("B:B"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With sData.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Replace existing data if greater
Set rNew = sData.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 2)
If NewWS.Range("A1").Offset(Band, 4).value < rNew.value Then
rNew.Copy
NewWS.Range("A1").Offset(Band, 4).PasteSpecial xlPasteValues
End If
rData.AutoFilter Field:=1
Next Band
End If
End With
问题是宏返回的数据集与我列表中每个传感器的第一组数据集相同[在Dashboard.RangeA3:A23中找到]。我假设Find函数正在工作,因为我从未获得参数not found消息框,但它每次都将自动筛选放在同一组数据上,而不是传感器名称后面的一组数据。是否调试。打印rData.Address?我使用了Msgbox rData.Address,它显示范围随着每次迭代而移动。但无论出于何种原因,自动过滤器都将保持不变,而不是应用于新范围。也许如果我在循环结束时关闭AutoFilterMode…是的。成功了!