在我打开的任何CSV文件上运行macros,而不仅仅是我的文件名
我设法使用Excel中的“loggingmacros”function创build一个macros。
问题是我有多个CSV文件,录制的macros有硬编码的ActiveSource。我怎样才能运行任何CSV的macros没有硬编码表的标题?
另外我不想使用如下例所示的固定列。 我想根据列的标题select列。 因此,例如,如果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
你也可以dynamic地打开你想要的所有文件。 在这里,不需要在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
对于你的第一个问题,使用在运行时select的文件path/文件名,我会在工作簿的第一张工作簿中粘贴文件名和path,大概Sheet1单元格A1单元格,然后我会使用
ActiveSheet.QueryTables.Add(Worksheets("Sheet1").range("A1").value,Destination:=Range("$A$1")).TextFileCommaDelimiter = True
您可能需要根据自己的需要调整更多属性(如果您不确定要关注哪些属性或如何指定它们,请尝试录制使用“数据→来自文本”function的macros)。
对于你的第二个问题,如果列的名称总是完全一样,没有改变拼写,他们将永远在最上面一行,那么我倾向于使用For循环与案例select。 这是我的一些代码:
'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
你的第三个问题可能应该有自己的post,更详细一点。
希望有点帮助。