2016-05-27 3 views
0

別のExcelファイルにあるワークシートを開かずに作業したいと思います。これを行うには、私はvba - 閉じたワークブックにあるワークシートで作業するときにエラーが発生する

私は、サブプログラムtrieTableau2Colonne(ByRef w As Worksheet, ByRef colonne1, ByRef colonne2)

で2列によって、そのワークシートをソートする必要があるworkbookオブジェクトではなくExcel.Applicationオブジェクトを使用して、私は内の任意のワークシート(ActiveWorkbook.Worksheets、またはワークシートを与えた場合ワークブック・オブジェクトで宣言されたオープン・ワークブック)、完全に動作しています。しかし、閉じたブックで作業するのにExcel.Applicationオブジェクトを使用すると、動作しません。

エラーはAddメソッドのSortFieldsオブジェクトについてです。 以下、私が書いたサブプロシージャ、メインプログラム、そしてエラーを示すスクリーンショットを見ることができます。

trieTableau2Colonneプロシージャ(w.Sort.SortFields.Add)の2行目でエラーが発生します。私はw変数にスパイを入れて、そこに何があるかを調べます。

2番目のスクリーンショットでは、私が使用する2つのワークシートの違いを確認できます。

  • ws_cible

    Dim ws_cible As Worksheet 
    
    Set ws_cible = ThisWorkbook.Worksheets("Liste Réclas") 
    

    workbookオブジェクトから取得したワークシートオブジェクトである - >我々は、その型がワークシート/ Feuil1

  • wはworksheetオブジェクトであることを読み取るが、から入手することができオブジェクトの代わりにExcel.Applicationオブジェクト

    - >私たちは、私は、問題はその違いから来ると確信していますが、私はプロパティまたは各オブジェクトのメソッドの違いを見ない

にそのタイプがワークシート/ワークシート

であることを読み取ることができます。このコードで

Sub trieTableau2Colonne(ByRef w As Worksheet, ByRef colonne1, ByRef colonne2) 

    w.Sort.SortFields.Clear 
    w.Sort.SortFields.Add Key:=Range((colonne1 & ":" & colonne1)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
    xlSortNormal 
    w.Sort.SortFields.Add Key:=Range(_ 
    (colonne2 & ":" & colonne2)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
    xlSortNormal 
    With w.Sort 
    .SetRange Range("A:AZ") 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
    End With 
End Sub 

' main program' 


    Dim ws_src As Worksheet 
    Dim wb_src As Excel.Application 
    Set wb_src = CreateObject("Excel.Application") 
    ChDir Workbooks(ActiveWorkbook.Name).Path 
    stfile = Application.GetOpenFilename 

    If stfile = False Then 
     Exit Sub 
    End If 
    With wb_src 
     .Workbooks.Open (stfile) 
     .Visible = False 
    End With 
    Set ws_src = wb_src.Worksheets("Sheet1") 
    'MsgBox (ws_src.Cells(1, 1).Value) 
    Call trieTableau2Colonne(ws_src, "E", "B") 

error occured and spy

spy

+0

あなたは 'Worksheet'を参照する前に' 'wb_src.Workbooks.Open()'や 'wb_src.Workbooks.Add()を呼び出す必要があります。 –

+0

あなたの質問を編集し、エラーメッセージを翻訳し、エラーのある行を表示することができます –

+0

すべての** Rangeオブジェクトを 'w'ブックで修飾する必要があります。 – Rory

答えて

0

ブックを開く前に、あなたは、ワークシートを参照します。 Excel.ApplicationからWorksheetを取得することはできません。 WorkbookオブジェクトからWorksheetを取得します。

Dim wb_src As Excel.Application 
Set wb_src = CreateObject("Excel.Application") 

Set ws_src = wb_src.Worksheets("Sheet1") 

ワークシートを参照する前に、wb_src.Workbooks.Open()またはwb_src.Workbooks.Add()を追加してみてください。

0

ありがとうございます。実際

、私はうまくワークブック

With wb_src 
    .Workbooks.Open (stfile) 
    .Visible = False 
End With 

を開いた私のメインプログラムの中で、私は、私は内部のセルの内容を確認するメッセージボックスを置くことによって、そのファイルに正しくアクセスして、それがうまく機能していることがわかります:

MsgBox (ws_src.Cells(1, 1).Value) 
+0

あなたの質問に対する答えではない回答を投稿するのではなく、更新されたコードで質問を修正する必要があります。あなたはエラーを翻訳し、それがエラーになっている行を表示できますか?私はあなたのコードに何が間違っているかを知ることができたら私の答えを更新します。 –

+0

エラーは、サブプロシージャtrieTableau2Colonneの2行目で発生します。 'w.Sort.SortFields.Add Key:= Range((colonne1& ":"&colonne1))、SortOn:= xlSortOnValues、Order:= xlAscending、DataOption: = _xlSortNormal 'です。メッセージのエラーは "Laméthode 'Add' de l'objet 'SortFileds'échoué" – kaleme

+0

私は2つのスクリーンショットを表示して、メッセージエラーとspysを使用している私の変数の内容を表示します – kaleme

関連する問題