2012-03-02 34 views
2

我設法使用Excel中的「記錄宏」功能創建一個宏。我打開的任何CSV文件上運行宏,而不僅僅是我有文件名

問題是我有多個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 
+1

做得好,開始錄製宏。這也應該給你關鍵字來搜索和找到更多的難題,例如:http://stackoverflow.com/questions/9509091/reading-all-files-in-folder-and-showing-content-in-excel/9511052#9511052 – Fionnuala 2012-03-02 10:32:51

+1

VBA的幫助是你的朋友(F1)。例如,我猜測對ScrollColumn的調用並沒有對你有用,所以它們可以被刪除。同時擺脫所有的「選擇選擇」的冗長。因此,而不是'Columns(「A:A」)。選擇''Selection.TextToColumns'只需說'Columns(「A:A」)。TextToColumns'。什麼都是凌亂'陣列'業務?在'TextToColumns'幫助中查找它。也許你可以刪除一些'TextToColumns'參數。一旦你完成了所有這些,你的宏將變得對自己(和我們)更加清晰,從而增加你可以建立它的機會。 – 2012-03-02 11:07:32

+1

Remou的建議會帶您回答有關將7,000個文件讀入工作簿的問題,儘管我希望您的文檔數量較少。讓 - 弗朗索瓦建議你試着整理宏錄像機的輸出也很好。也許我對[如何在VBA代碼上搜索工作表?](http://stackoverflow.com/a/9465060/973283)的答案將有所幫助。 – 2012-03-02 11:20:26

回答

0

對於你的第一個問題,請使用在運行時選擇的文件路徑/文件名,我就到我粘貼的文件名和路徑,可能Sheet1中單元格A1的工作簿的第一頁上的單元格,然後我會用

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 

你的第三個問題,也許應該有自己的崗位多一點細節。

希望能有所幫助。

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 
相關問題