1337243582 質問です

下記マクロを実行するとエラー400が表示されます
以前は出なかったのです他のPCでは出ません
原因と対処の仕方を教えてください
windows7でExcel 2010です

マクロは添付画像を参照願います

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/17 17:33:02
  • 終了:2012/05/17 19:32:34

ベストアンサー

id:taknt No.2

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/17 19:16:24

ポイント80pt
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。
p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Dim gg As Long
Application.DisplayAlerts = False

    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。

    With w.Sheets(1)
        .Range("A:B").Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
        
        If .Range("A2") = "" Then
            fa = 1
        Else
            fa = .Range("A1").End(xlDown).Row
        End If
        
        If .Range("B2") = "" Then
            fb = 1
        Else
            fb = .Range("B1").End(xlDown).Row + 1
        End If
            .Rows(fb & ":" & fa).Delete Shift:=xlUp
            .Columns("B:B").ClearContents

     End With
         
    w.Save
    w.Close
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub


元のプログラムから A列とB列のみソートさせるように変更してみました。

id:inosisi4141

ありがとうございます
上手くいきました
「A列とB列のみソートさせるように変更」で正解でした
早くこちらから条件を出せばよかったです
ありがとうございました

2012/05/17 19:31:46

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/17 18:19:36

ポイント20pt
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。
p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Dim gg As Long
Application.DisplayAlerts = False

    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。

    w.Sheets(1).Select
    
    With w.Sheets(1)
        .Cells.Select
        Selection.Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
        
        If .Range("A2") = "" Then
            fa = 1
        Else
            fa = .Range("A1").End(xlDown).Row
        End If
        
        If .Range("B2") = "" Then
            fb = 1
        Else
            fb = .Range("B1").End(xlDown).Row + 1
        End If
            .Rows(fb & ":" & fa).Delete Shift:=xlUp
            .Columns("B:B").ClearContents

     End With
         
    w.Save
    w.Close
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub


すみませんが原因は 不明です。
可能性がありそうなのは、セルをselectするときに このselectで エラーに
なってるのでは ないのかというところです。
なので、とりあえず シートを選択するようにしてみました。

こういうのは 少しずつ 修正して 確認してもらうしかないですね。

id:inosisi4141

ありがとうございます
実行してみますと

RangeクラスのSortメソッドが失敗しました

のメッセージがでてエラーになりました
よろしくおねがいします

2012/05/17 18:58:20
id:taknt No.2

きゃづみぃ回答回数13538ベストアンサー獲得回数11982012/05/17 19:16:24ここでベストアンサー

ポイント80pt
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。
p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk As Workbook
Dim gg As Long
Application.DisplayAlerts = False

    
f = Dir(p & "*." & s, vbNormal)

Do While f <> ""
    Set w = Workbooks.Open(Filename:=p & f, UpdateLinks:=False, ReadOnly:=False)
    '処理対象は 1番目のシートのみ。

    With w.Sheets(1)
        .Range("A:B").Sort Key1:=.Range("B1"), Order1:=xlDescending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
        
        If .Range("A2") = "" Then
            fa = 1
        Else
            fa = .Range("A1").End(xlDown).Row
        End If
        
        If .Range("B2") = "" Then
            fb = 1
        Else
            fb = .Range("B1").End(xlDown).Row + 1
        End If
            .Rows(fb & ":" & fa).Delete Shift:=xlUp
            .Columns("B:B").ClearContents

     End With
         
    w.Save
    w.Close
    f = Dir
Loop

Application.DisplayAlerts = True

End Sub


元のプログラムから A列とB列のみソートさせるように変更してみました。

id:inosisi4141

ありがとうございます
上手くいきました
「A列とB列のみソートさせるように変更」で正解でした
早くこちらから条件を出せばよかったです
ありがとうございました

2012/05/17 19:31:46
  • id:inosisi4141
    マクロ作業はB列にある数字の1以外のデータをA列データから削除するそしてB列の数字1を削除する作業です

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません