在我打开的任何CSV文件上运行宏,而不仅仅是我有文件名的文件

时间:2012-03-02 05:11:26

标签: excel vba

我设法使用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

2 个答案:

答案 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

你的第三个问题应该有自己的帖子,更详细一点。

希望有所帮助。