2017-07-03 12 views
0

私はこれらのExcelファイルを送信するExcelプロセッサのマクロと連携していないスプレッドシートを持っています。それを有効にする唯一の方法は、新しいスプレッドシートに値をコピーし、手動で日付形式を調整することです。これらの新しいスプレッドシートに入って初めて、問題のない優れたプロセッサーで送信することができます。「範囲クラスのソート方法が失敗しました」-error

Excelのファイルを送信しようとすると、「範囲クラスのソート方法が失敗しました」というメッセージが表示されます。私はVBに慣れていないので、誰かがベアボーンを見て、問題のある場所を教えてくれることを願っています。

スプレッドシートの最初のいくつかのエントリのスクリーンショットです。

enter image description here

更新:

'Sort the rows based on the data in column C 
Range("H1") = "Index" 
Columns("A:H").Sort key1:=Range("H2"), order1:=xlAscending, Header:=xlYes 
Application.ScreenUpdating = True 
'Add big formula 
Range("I2:I" & DataWBLRow) = BigConcat 
Range("J2:J" & DataWBLRow) = FormString3 

Columns("A:H").Sort key1:=Range("H2"), order1:=xlAscending, Header:=xlYes 

ここだけ、このセクションのための完全なコードがあります:エラーをデバッグする際に

、コンパイラは以下の行で停止します

+0

ハードVBAコードを見ずに教えてください。 – MacroMarc

+0

@MacroMarcとは何ですか? - どのように、なぜ失敗するのかを見るためにコードが必要です。あなたは日付形式について言及しています。ほとんどの場合、上のシートには実際の日付が格納されるのではなく、文字列などが使用されます。実際の日付ではなく、ソートの文字列をチェックします。 '.Sort'メソッドが実際の値で(表示されたテキストではなく)ソートされている限り、それ自体の日付フォーマットは重要ではありません。 –

+0

@RikSportel最新の投稿を確認してください –

答えて

3

この問題は、データをソートしようとしているシートがテーブルにある、いわゆるListObjectのために発生します。これはあなたのサンプル画像からも明らかです。

これは、値を別の通常のワークシートにコピーして貼り付けるときにコードが機能する理由です。

要点:VBAを変更するオプションがない場合は、テーブルの書式を削除してください。そうしないと、並べ替えの範囲はの一部であるかどうかをテストする必要がありますListObjectかもしそうなら、それはListObject.Range

例でソートを行うようにし、コードを変更:

Sub SortCols() 
Dim ws As Worksheet 
Dim lo As ListObject 

Set ws = Worksheets("Sheet1") 
Set lo = ws.ListObjects(1) 'My Table is range A1:H10 

lo.Range.Sort key1:=Range("H2") 'Works perfectly 
ws.Columns("A:H").Sort key1:=Range("H2"), order1:=xlAscending, Header:=xlYes 'Error as described in question. 

End Sub 
関連する問題