質問です

いくつかのマクロを連続で実行させたいのですが
どこかのマクロでデータを削除してしまいます
どのような記述のマクロがあればそのような現象になりますか

参考
「エラーがあればsheet1に表示する」のマクロがある場合があります

Sub マクロの実行()
Call Sheets("Sheet1").main1
Call Sheets("Sheet2").main2
Call Sheets("Sheet3").main3
Call Sheets("Sheet4").main4

End Sub

よろしくお願いします

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/02 18:10:36
  • 終了:2012/11/05 13:30:16
id:inosisi4141

ちなみに単独ではちゃんとマクロが実行されます

回答(2件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/11/02 21:17:49

ポイント50pt

1のマクロでCSVファイルを削除しているのではありませんか。

id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982012/11/04 21:09:17

ポイント50pt

ソースの中で
last = Cells(Rows.Count, keyCol).End(xlUp).Row
というのがありますが、これは きちんと取得できてるのでしょうか?

開いたCSVの内容によって 対象となる列以外にその行より 下の行のセルにデータが入ってるとか・・・。

また、一行とか二行しかない場合も正しく取得できないおそれがあります。

他1件のコメントを見る
id:inosisi4141

ちなみに
2のマクロは下記です

Sub main2()
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

2012/11/05 10:16:53
id:taknt

.Rows(fb & ":" & fa).Delete Shift:=xlUp
.Columns("B:B").ClearContents

この箇所は 消去しているところですよね。

2012/11/05 19:40:56
  • id:Silvanus
    質問文の意味が少し判りにくいのですが「データを削除してしまう」というのは
    「ワークシート上の特定のセルの内容を削除してしまう」ということですか?
    個々のマクロを単独で走らせたらそういうことは起きないけれども
    連続して走らせると「削除」が起こってしまうということでしょうか?
    最も単純に例としては、連続して走らせるマクロの何れかに
    セルの内容を編集(消去・即値や式の書込)するルーティンがあって
    そのルーティンを実行する前に、編集対象となるセルが存在する
    ワークシートへの切換(Sheets("xxx").Activate/Select等)が
    実行されていない可能性が考えられますね。
    解決方法としては、ブレークポイントを下記の4行の2~4行目に設定し
    Call Sheets("Sheet1").main1
    Call Sheets("Sheet2").main2
    Call Sheets("Sheet3").main3
    Call Sheets("Sheet4").main4
    何行目まで正常に実行されるかを確認します。
    そうすることで、どのマクロを呼び出した際に異常が発生しているのか特定できます。
    それが特定できたなら、今度はそのマクロ内の最初にブレークポイントを設定し
    そこでブレークしたら、あとはステップ実行して異常を引き起こしている原因を
    特定してやればOKです。
  • id:inosisi4141
    2、3、4、はうまくいきました
    原因は1にあると思います
    以下が1のマクロです

    Sub main3()
    Const path = "\test"
    Const grab = "*.csv"
    Const keyCol = 1 ' column A
    Const countCol = 2 ' column B
    Dim dict As Object
    Dim file As String
    Dim last As Long
    Dim i As Long
    Set dict = CreateObject("Scripting.Dictionary")

    file = Dir(path & "\" & grab, vbNormal)
    Do While file <> ""
    dict.RemoveAll
    With Workbooks.Open(path & "\" & file)
    last = Cells(Rows.Count, keyCol).End(xlUp).Row
    For i = 1 To last
    dict.Item(Cells(i, keyCol).Value) = dict.Item(Cells(i, keyCol).Value) + 1
    Next
    For i = 1 To last
    If dict.Item(Cells(i, keyCol).Value) = 1 Then
    Cells(i, countCol).Value = 1
    End If
    Next
    .Close SaveChanges:=True
    End With
    file = Dir
    Loop
    End Sub
  • id:ken3memo
    気になったので
    >原因は1にあると思います
    > 以下が1のマクロです
    >Sub main3()
    > Const path = "\test"

    んっ?
    > 以下が1のマクロです
    >Sub main3()
    ^^^^^^^^^^^^
    1のマクロ?で3を走らせている?
    あっ、逆か
    Sub マクロの実行()
    Call Sheets("Sheet1").main1

    Call Sheets("Sheet1").main1
    main1が走っている?
    .
    シートに書かれているマクロで
    main1,main2,main3....
    とコピーミスとか何かしていませんか?
    .
    名前を見直してみては?
  • id:ken3memo
    >ちなみに単独ではちゃんとマクロが実行されます
    失礼しました。
    単独では動いているのですね。
  • id:inosisi4141
    ありがとうございます

    Sub main3()
    は実際リンクしてつなぐ場合は
    Sub main1()
    にしています
  • id:Silvanus
    「1(上コメントのmain3)が問題」というのは間違いないですか?
    ちょこっと考えてみて、個々で実行すると問題無いマクロを
    連続して実行する時、一番最初のマクロで不具合が出るというのは
    考えにくい様な気がするのですが?
    連続実行の一番最初ということは、先行して実行されたマクロは無い、
    つまり先行するマクロの実行結果によって左右されるものが無いということですから、
    それならば単独実行の場合と結果が変わってくる、というのは変な気がいたします。
    再検証が必要ではないかと思うのですが、いかがでしょうか?
  • id:inosisi4141
    ありがとうございます
    2番目のマクロがデータを全部消している気がします
    原因はわかりませんが
    一応2番目のマクロをUPしておきましたが
  • id:inosisi4141
    一旦質問を終わらせていただきます
    別にアップいたしましたのでよろしくお願いします
    コメントの方は回答欄にコメントして頂ければポイントを差し上げます
  • id:inosisi4141
    質問を終了いたします
    コメント頂いた方はありがとうございました
    質問の仕方が悪くてすみませんでした

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

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

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

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