別の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
オブジェクトから取得したワークシートオブジェクトである - >我々は、その型がワークシート/ Feuil1wは
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")
あなたは 'Worksheet'を参照する前に' 'wb_src.Workbooks.Open()'や 'wb_src.Workbooks.Add()を呼び出す必要があります。 –
あなたの質問を編集し、エラーメッセージを翻訳し、エラーのある行を表示することができます –
すべての** Rangeオブジェクトを 'w'ブックで修飾する必要があります。 – Rory