
追い詰められているマクロ初心者です。
ネットで相談させていただき、下記マクロを完成する事が出来たのですが、
一部修正がうまくいかない為投稿させていただきました。
マクロ内容:エクセルファイルを指定し、選択したシートを現在のブックにコピーする
その際、不要な名前管理を削除してからコピー
修正したい箇所:指定したブックからコピーした際、シート参照の数式が入っていると外部参照になってしまう。
やってみた事:①(i)の前にarrayを入れる 外部参照のまま
②(i)を削除してみた 外部参照にならなくたったが際限なくシートをコピーし続けた
Sub 名前管理削除()
Dim myPath As String
Dim wb_A As Workbook
Dim i As Integer
'
myPath = Application.GetOpenFilename(("Excelファイル,*.xls*,CSVファイル,*.csv"), , "ブックを選択して下さい。")
If myPath = "False" Then Exit Sub
Set wb_A = Workbooks.Open(myPath)
Dim name As Object
For Each name In Names
If name.Visible = False Then
name.Visible = True
End If
Next
On Error Resume Next ' エラーを無視。(削除件数にカウントしてしまいます)
For Each nm In ActiveWorkbook.Names
If InStr(nm.Value, "#REF") > 0 Or _
InStr(nm.Value, "\") > 0 Then
nm.Delete
i = i + 1
Else
End If
Next nm
' 終了の表示
MsgBox "不要な名前定義を削除しました。" & vbCr & _
"削除定義件数=" & i & "件", vbInformation, cnsTitle
For i = 1 To wb_A.Sheets.Count
wb_A.Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next
wb_A.Close False
End Sub
不勉強で申し訳ございませんが、何卒よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>やってみた事:①(i)の前にarrayを入れる
とありますが、「wb_A.Sheets(array(i))」と記述したのなら、参照が設定されてしまいます。
参照設定させないためには、全シートを一括でコピーさせる必要があり、そのためにarray()を使用します。
最後のForループで、いきなりコピーせず、1つずつシート名を取得します。
(配列に格納すると良いと思います)
その後に、array()の中に、取得した全てのシート名を列記すれば大丈夫です。
お忙しいところ本当にありがとうございました。ご回答いただきましたサンプルをもとに、じっくり修正してみたいと思います。本当にありがとうございました!
No.1
- 回答日時:
少し直してみましたが、マクロでは除去できないものがあります。
以前、それ専用のマクロを作ったことがありますが、基本的には、無理だったような気がします。
それで、エラーを出したら、エラーを出した数を数えるようにしました。 変数 j, k
具体的には、IFERROR という関数を使った名前定義は、セルの中に潜り込んで取れなくなったのだったという記憶があります。
不要な名前定義の削除について、このサンプルをとおして検討し直してみてください。
'//
Sub 名前管理削除r()
Dim myPath As String
Dim wb_A As Workbook
' Dim i As Integer
'
myPath = Application.GetOpenFilename(("Excelファイル,*.xls?,CSVファイル,*.csv"), , "ブックを選択して下さい。")
If myPath = "False" Then Exit Sub
Set wb_A = Workbooks.Open(myPath)
'------------------------
Dim n As Name
Dim nn As String
Dim j As Long, k As Long
Dim r As Range, b As Range
Const cnsTitle = "名前削除"
For Each n In wb_A.Names
n.Visible = True
nn = Mid(n.RefersToLocal, 2)
If IsError(Evaluate(n.Value)) Then
On Error Resume Next
n.Delete
If Err() <> 0 Then
k = k + 1
Else
j = j + 1
End If
On Error GoTo 0
Else
Set r = Range(nn)
If IsError(r) Then
n.Delete
j = j + 1
ElseIf InStr(nn, "\") > 0 Then
n.Delete
j = j + 1
End If
End If
Next
If j > 0 Or k > 0 Then
MsgBox "不要な名前定義を削除しました。" & vbCr & _
"削除定義件数=" & j & "件" & vbCrLf & _
"削除失敗件数 =" & k & "件", vbInformation, cnsTitle
End If
If j > 0 Or k > 0 Then
MsgBox "名前削除に失敗しましたので、中止します。", vbCritical
Exit Sub
End If
'----------------------------
For i = 1 To wb_A.Sheets.Count
wb_A.Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next
wb_A.Close False
End Sub
お忙しいところご丁寧にありがとうございました。ご回答いただきましたサンプルを元にじっくりと検討したいと思います。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IE7をIE6にしたいのです。
-
削除できないファイルがあるん...
-
マクロで特定の文字が含まれる...
-
購入時からあるPCのアプリの削...
-
PHPエラー Warning: mysql_
-
GyaO視聴できず。やれることは...
-
デバッカエラーが出るのでデジ...
-
もはや打つ手が…。
-
DLLの削除方法
-
過去に作ったホームページの削...
-
OS上で異常な音がして、動作が...
-
サーバー証明書をインストール...
-
動きが遅いのですが。
-
買ったばかりのパソコンにケチ...
-
Win98でIE5.5
-
画面が頻繁に真っ暗になります(汗
-
Wordで作成した文章は自分以外...
-
ドリームウィーバーcs5での外...
-
セキュリティの強いOS
-
Googleツールバーのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
購入時からあるPCのアプリの削...
-
マカフィー金庫 非表示または削...
-
他ブックからのシートコピーの...
-
TIFファイルを削除しようとすると
-
削除できないファイルがあるん...
-
ノートン体験版のアンインスト...
-
ローカルディスク(B)? のアイ...
-
プリンタードライバーがアンイ...
-
YouTube等の動画のサムネイルの...
-
Win7からWin10に変えて...
-
ファイルの消し方
-
Outlook2003のエラー。。。
-
ダウンロードに失敗したファイ...
-
ネットワークコンポーネントの削除
-
マカフィーの完全削除を求む!
-
your file hostが見れない
-
yahooのパーソナル天気の・・・
-
コントロールパネル内の残痕を...
-
メイリオ フォント削除方法い...
-
Windows10 スタートメニューに...
おすすめ情報