我设法使用Excel中的“记录宏”功能创建一个宏。
问题是我有多个CSV文件,并且录制的宏具有硬编码的ActiveSource。如何在没有对表格标题进行硬编码的情况下在任何CSV上运行宏?
此外,我不想使用固定列,如下例所示。我想根据列的标题选择列。例如,如果A1
中的列标题为volts
,那么我需要图表中的列A
。
Sub CreateThermalPlot()
'
' CreateThermalPlot Macro
' Create new thermal plot of .csv that contains Reported CPU temp, Diode Temp, and Td.
'
' Keyboard Shortcut: Ctrl+j
'
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=True, Other:=False, FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array _
(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), _
Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1)), _
TrailingMinusNumbers:=True
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
Range("A:A,T:T,U:U,W:W").Select
Range("W1").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source:=Range( _
"monitor_ENGtrevorSBTSITND_4910_!$A:$A,monitor_ENGtrevorSBTSITND_4910_!$T:$T,monitor_ENGtrevorSBTSITND_4910_!$U:$U,monitor_ENGtrevorSBTSITND_4910_!$W:$W" _
)
ActiveChart.Location Where:=xlLocationAsNewSheet
End Sub
答案 0 :(得分:1)
您也可以动态打开要使用的所有文件。在这里,无需在VBA或工作表中对任何内容进行硬编码,而且您可以拥有一个可以同时处理大量文件的主xlsm文件。
Function SelectFilesToWorkWith() As Collection
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim files As New Collection
With fd
.AllowMultiSelect = True
.Show
For Each file In .SelectedItems
files.Add (file)
Next file
End With
Set SelectFilesToWorkWith = files
End Function
Sub work()
Dim filesToWorkWith As New Collection
Set filesToWorkWith = SelectFilesToWorkWith
Dim CSVfile As String
For Each CSVfile In filesToWorkWith
Workbooks.Open (CSVfile)
'...do work with file
Next CSVfile
End Sub
答案 1 :(得分:0)
对于你的第一个问题,使用在运行时选择的文件路径/文件名,我将在工作簿的第一张表上有一个单元格,我粘贴了文件名和路径,可能是Sheet1单元格A1,然后我会使用< / p>
ActiveSheet.QueryTables.Add(Worksheets("Sheet1").range("A1").value,Destination:=Range("$A$1")).TextFileCommaDelimiter = True
您可能需要根据需要调整更多属性(如果您不确定您关心的属性或如何指定它们,请尝试录制使用数据→文本功能的宏。)
对于你的第二个问题,如果列的名称总是完全相同,拼写没有变化,并且它们总是在顶行,那么我倾向于使用For循环案例选择。这是我的一些代码:
'Loop through all the columns to find the ones we want to graph
For j = 2 To act_cols
Select Case ws.Cells(1, j).value
Case "FT410": ft410_col = j
Case "FT410FlowCheck": ft410check_col = j
Case "VSD410": vsd410_col = j
Case "Set Point": sp_col = j
Case "% Error (Avg)": error_avg_col = j
End Select
Next j
你的第三个问题应该有自己的帖子,更详细一点。
希望有所帮助。