在我打开的任何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,更详细一点。

希望有点帮助。