ここから本文です

エクセルのマクロについて質問です。 実行するとエラーは出ずにエクセルが強制終...

euo********さん

2019/7/1414:55:12

エクセルのマクロについて質問です。
実行するとエラーは出ずにエクセルが強制終了してしまうことが度々発生します。原因がわからないためコードを貼ります。よろしくお願いします。

Sub マクロ登録()
Dim a1,tbook1 As

String
Dim wb As Workbook
Dim stopM As Boolean

a1=ActiveSheet.Name
tbook=ActiveWorkbook.Name
Set wb=Workbooks(
Call シート移動(stopM)
~~~~~~~~~~~~~~~~~~~~~
Sub シート移動(ByRef f As Boolean)
Dim Myname,a,tbook,abook As String
Dim wb1,wb2 As Workbook
Dim ws,w As Worksheet
Dim flag As Boolean

a=ActiveSheet.Name
tbook=ActiveWorkbook.Name
Set wb1=Workbooks(tbook)
Set ws=Worksheets(a)
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect=True
.InitialFileName=“¥¥〇〇○“
If .Show=-1 Then
.Execute
Else
f=True
Exit Sub
End If
End With

abook=ActiveWorkbook.Name
Set wb2=Workbooks(abook)
wb1.Activate
ws.Copy After:=wb2.Sheets(1)★デバッグすると毎回ここで終了する

ここまででどこかおかしなところはありますでしょうか?
よろしくお願いします。
全文必要であれば再度投稿いたします。

閲覧数:
215
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/7/1415:55:53

>ここまででどこかおかしなところはありますでしょうか?
コードを実行できないので、何ともいいようがないです。
さらに見せられたコードが、コンパイルが通りそうにもないところがあるのでは、判断付きませんね。
1文字でも違えば動かないのがプログラムの特性ですから。。。

あと、コードが冗長な部分があります。そこの変更案を提示しておきます。
いくつかの変数が不要になるはず。

1)
a=ActiveSheet.Name
tbook=ActiveWorkbook.Name
Set wb1=Workbooks(tbook)
Set ws=Worksheets(a)



Set wb1 = ActiveWorkbook
Set ws = ActiveSheet


2)
abook=ActiveWorkbook.Name
Set wb2=Workbooks(abook)
wb1.Activate
ws.Copy After:=wb2.Sheets(1)



Set wb2 = ActiveWorkbook
ws.Copy After:=wb2.Sheets(1)

  • tra********さん

    2019/7/1415:56:31

    あなたが書いたコード

    Dim wb1,wb2 As Workbook

    はあなたの思いと違う結果を生んでます。
    「As」は直前の変数だけに効果を発揮します。
    ので、↑のコードは

    Dim wb1 As Variant, wb2 As Workbook

    と書いたことになります。

    初心者の間違えやすい所です。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

mmi********さん

2019/7/1809:19:36

何故処理コードの途中に
Sub シート移動(ByRef f As Boolean)
を書くのでしょう。これはエラーです。

貴方のコードだと複数のブックのどちらを処理するのか紛らわしい感じです。

やりたい事の説明文がないので想像ですが、
Sub シート移動(ByRef f As Boolean)
は書かずに下記のコードでやりたい事は出来ませんか。

>.AllowMultiSelect=True
何故複数のファイルを選択するのかわかりませんでした。

シートのコピーでExcelが落ちるならメモリ不足も考えられます。

Sub マクロ登録()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws As Worksheet
Dim fname As Variant
Dim Myname As String
Set wb1 = ThisWorkbook
Set ws = ActiveSheet
fname = Application.GetOpenFilename("XLSXファイル(*.xlsx),*.xlsx", MultiSelect:=False)
If VarType(fname) = vbBoolean Then Exit Sub
Set wb2 = Workbooks.Open(fname)
ws.Copy After:=wb2.Sheets(1)
Myname = InputBox("シート名入力")
ActiveSheet.Name = Myname
wb2.Close SaveChanges:=True
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる