2016-12-03 12 views
0

dirに常駐するHundreds xlsxファイルはMSAccess 2010データベース にインポートされますが、通常どおりユーザーは扱いにくい(爆弾が必要です...)ので、インポートする前にワークシートをクリーニングしてください。質問は:列Aのデータを持たないすべての行と、OからXFDまでのすべての列を削除する方法は? 以下のコードは動作しますが、1つのファイルにつき1回限りです。事前に感謝の意を表します。 enter image description here すべての赤を削除する必要があります。ワークシートの行と列を削除するMSAccess VBA

Private Sub Comand_Click() 
    Dim FullPath As String 
    Dim oXL As Object, oWb As Object, oWs As Object 
    FullPath = "D:\Access\_Test_XlsImport\FileName.xlsx" 
    Set oXL = CreateObject("Excel.Application") 
    Set oWb = oXL.Workbooks.Open(FullPath) 
    Set oWs = oWb.Sheets("Worksheet_name") 
    oXL.Visible = True 

    With oWs 
     .Columns("O:XFD").Delete 
     .Rows("xx:xx").Delete ' <---problem to identify the starting point to delete below.. 
    End With 
    oWb.Save 

CleanUp: 
    oWb.Close False 
    oXL.Quit 
    Set oWb = Nothing 
    Set oXL = Nothing 
    Set oWs = Nothing 
End Sub 
+0

あなたはループの書き方を求めていますか?または最初の空でない行を特定する方法は?あなたはどのように "空"を定義しますか?列全体が空でなければならないか、列内の特定のセルが必要ですか? – dbmitch

+0

Mr. dbmitch dirに常駐するすべての常駐ファイルに対して機能するループ A1からN1までの各単一ファイルに対して列ヘッダーが移動する I列の最初のセルに格納されている文字列の最初の3文字で行を検証するA – PhobiaBlu

答えて

0

私はoXL変数を取り出してモジュールにグローバルにして、一度だけ開くようにします。

は、このような

何かが動作するはずのワークシートをきれいにサブルーチンに他のExcelオブジェクトを置く - 定数 のためにあなたのフォルダに置き換えDIRコマンドはちょうどのxlsxファイルの仕様に一致するすべてのファイルと一致し、それぞれを処理しますそれらのループ

単なる警告で - A列にデータを持っているファイル用のチェックはありません - それが起こる場合は、プログラムが使い尽くされてい すべての行まで続きます。

EDIT - 最後の非空のセルまでのすべての空行を削除する修正は

Option Compare Database 
Option Explicit 


' Use these as global 
Private oXL As Object 

Private Sub Comand_Click() 

    Const SEARCH_FOLDER  As String = "C:\Databases\" 
    Const EXCEL_FILES  As String = "*.xlsx" 

    Dim FullPath As String 

    Dim strExcelFolder As String 
    Dim strFilename  As String 

    ' Open Excel 
    Set oXL = CreateObject("Excel.Application") 
    oXL.Visible = True 

    strFilename = Dir(SEARCH_FOLDER & EXCEL_FILES) 
    While strFilename <> "" 
     ProcessExcelFile SEARCH_FOLDER, strFilename 
     strFilename = Dir() 
    Wend 

CleanUp: 
    oXL.Quit 
    Set oXL = Nothing 
End Sub 

Private Sub ProcessExcelFile(strExcelFolder As String, strExcelFile As String) 

    Dim oWb As Object, oWs As Object 
    Dim strFullPath As String 

    Dim LastRow As Long 

    strFullPath = strExcelFolder & strExcelFile 
    Set oWb = oXL.Workbooks.Open(strFullPath) 
    Set oWs = oWb.Sheets(1) 

    With oWs 
     LastRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row 

     .Columns("O:XFD").Delete 

     ' Select All rows in Column A up to last filled row 
     .Range(“A1:A" & LastRow).Select 

     ' Delete all rows with empty cell in A - up to last filled row 
     oXL.Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

     .Save 
     .Close False 
    End With 

    Set oWb = Nothing 
    Set oWs = Nothing 

End Sub 
+0

こんにちはミスターdbミッチ私はあなたが非常に解決するに近いと思う。この行のエラーランタイム438 oWb = oXL.Workbooks.Open(strFullPath)を設定します。 Microsoft AccessとOffice 14.0のオブジェクトライブラリは両方とも参照で設定されています – PhobiaBlu

+0

strFullPath = strExcelFolder&strExcelFolder&strExcelFile'から "&" \ "を削除 - – dbmitch

+0

dbmitchファイルに変更はありません。 あなたが書いたすべてのコードが「クリックする」というイベントの下にあることを明確にしたいと思います。 現時点では、ディレクトリにある1つのファイルだけでテストしています – PhobiaBlu

関連する問題