2013-12-17 47 views
0

我一直在爲某些報告功能開發工作簿。Excel:從CSV導入後的名稱表 - 運行時出現問題

我剛剛回到VB並有點生疏 - 在我面前也坐着一本1000多頁的書,並已遍佈這樣的網站。看起來我可以接近 - 但最終只有一點點關閉。

每週我都有新的數據進來,我將用它來更新一些數據透視表等等。我有5個領域的數據將被導入,目前有導入功能,但我遇到了兩個方面的問題:我似乎沒有創建一個剛剛導入的數據表&我沒有錯誤檢查。我需要表名,所以我可以在整個工作表中使用日期。

任何指導,將以下是巨大的:

  • 我怎麼能簡單地在A2明確了當前表,並導入新的數據不具有重命名錶和頭? (我的導入數據是以「First Name」而非First_Name的形式出現的,因此將其保存爲這種格式將會很不錯。

  • 如何在此上添加錯誤檢查以便說有人運行它並關閉窗口它不會清除工作,並啓動調試程序?

這裏是我的工作(我已經嘗試了很多事情,但回到這個)

Sub ImportMaster() 
' this is the master list of all NA accounts for ..... 
' NA_ACCOUNTS_LIST Worksheet 
Dim ws As Worksheet, strFile As String Set ws = ActiveWorkbook.Sheets("NA_Accounts_List") ws.UsedRange.Clear strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please selec text file...") With ws.QueryTables.Add(Connection:="TEXT;" & strFile, _ Destination:=ws.Range("A2")) 
     .Name = "ProgramData" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 2 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False End With ' ws.Name = "testing" 

    ' updates the date Range("C12").ClearContents Range("C12") = Format(Date, "mm-dd-yyyy") 


    ' This will focus this worksheet after upate Sheets("NA_Accounts_List").Visible = xlSheetVisible Sheets("NA_Accounts_List").Select 


    MsgBox "Imported data successfully!" 

end sub 

回答

0

讓我看看我的理解,是什麼你想要的是從當前表格中清除你正在工作的單元格A2並插入一個新的數據在同一個單元格?

+0

你知道 - 在我看過的所有帖子中,我忽略了我最基本的要求......對此抱歉。 – Nicon

+0

我有一張工作表,我使用原始數據。其CSV文件的導入數據和列寬始終保持不變(BK),但行數將會更改。根據CSV文件行,我需要將表格從「A2」開始導入到「BK2」,然後再導入。 因此,導入需要清除表A2中的數據,導入新數據並保持表格的格式相同。 希望有幫助 – Nicon

0

你有幸運,我想它應該解決。

 Microsoft.Office.Interop.Excel.Application ex = new Microsoft.Office.Interop.Excel.Application(); 
     ex.Visible = true; 
     Microsoft.Office.Interop.Excel.Workbook wk = ex.Workbooks.Add(Type.Missing); 
     Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wk.Worksheets[1]; // set the first worksheet 
     DataTable dtb = mysql.mysql_data_adapter(); // the data that are coming from mysql 
     DataRow row; 

     for (int i = 0; i < dtb.Columns.Count; i++) // add header 
     { 
      Microsoft.Office.Interop.Excel.Range rg = (ws.Cells[1, i + 1] as Microsoft.Office.Interop.Excel.Range); // excel start in 1 
      rg.Value2 = dtb.Columns[i].ColumnName.ToString(); 
     } 

     for (int i = 2; i < dtb.Rows.Count + 2; i++) // add data without change header, and this for run the row 
     { 
      row = dtb.Rows[i - 2]; // where to start at correct row, dont oforget, start in 2 because 1 are the header 
      for (int i2 = 1; i2 < dtb.Columns.Count + 1; i2++) // where run the collumns 
      { 
       try 
       { 
        Microsoft.Office.Interop.Excel.Range rg = (ws.Cells[i, i2] as Microsoft.Office.Interop.Excel.Range); 
        rg.Value2 = row[i2 - 1].ToString(); 
       } 
       catch 
       { 
       } 
      } 
     } 
+0

Dietrich, 這看起來是使用MySQL適配器...? ..我正在從本地機器上的CSV文件導入。 – Nicon

+0

沒有區別如何獲取數據,將CSV文件傳輸到數據表並使用'for'來運行行和列。 –

+0

我不是以下 - 從我爲子提供的代碼,我如何使用它? – Nicon