Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5734 / 13645 ツリー ←次へ | 前へ→

【49171】エクセル2000VBAで作ったプログラムが2003で動かない miyake 07/5/25(金) 21:49 質問[未読]
【49172】Re:エクセル2000VBAで作ったプログラム... かみちゃん 07/5/25(金) 23:19 発言[未読]
【49179】Re:エクセル2000VBAで作ったプログラム... miyake 07/5/26(土) 13:11 質問[未読]
【49180】Re:エクセル2000VBAで作ったプログラム... かみちゃん 07/5/26(土) 13:31 発言[未読]
【49181】Re:エクセル2000VBAで作ったプログラム... tora 07/5/26(土) 15:04 発言[未読]
【49189】Re:エクセル2000VBAで作ったプログラム... miyake 07/5/27(日) 1:29 お礼[未読]

【49171】エクセル2000VBAで作ったプログラム...
質問  miyake  - 07/5/25(金) 21:49 -

引用なし
パスワード
   いつもお世話になっております。
困ったことがありますので教えてください。
エクセル2000で簡単なシステムを作りました。
これには、複数の様々なシートがあり、シートにはそれぞれコマンドボタン、テキストボックス、ラベル、コンボボックスなどが付いています。
この複数のシートのうち、保存したいシート(アクティブシート)だけを保存できるようにしていて、シートの保存ボタンを押すと、そのシートだけがシステムの外に保存できるようにしました。
これをエクセル2003で動かすと、バージョンの違いによりプログラムがエラーになりうごきません。
シートのモジュールを削除するコードの部分が原因だと思います。
プログラムは下記のとおりです。
エクセル2003で対応できる方法があればご教示願います。

Sub アクティブシート保存()

Dim SheetName As String
Dim HozonSheetName As String
SheetName = ActiveSheet.Name
HozonSheetName = "コピー" & "_" & SheetName
'アクティブシートを新規ブックにコピー
ActiveSheet.Copy

'コピー先のシートのモジュールを削除
 Dim myVBComp
  For Each myVBComp In ActiveWorkbook.VBProject.VBComponents
   If myVBComp.Type = 100 Then
'Documentモジュール(ThisWorkbokやSheet)なら消去
    With myVBComp.CodeModule
      .DeleteLines 1, .CountOfLines
    End With
   Else
'Documentモジュール以外(標準モージュール、クラスモジュール、Formなど)なら削除
     Application.VBE.ActiveVBProject.VBComponents.Remove myVBComp
  End If
 Next myVBComp

'コピー先シートのコマンドボタン等のオブジェクトを削除
Dim objShape As Shape
'オブジェクトの名前の先頭3文字は、コマンドボタンがcmd、テキストボックスがtxt、ラベルがlbl、コンボボックスがcmbと付いている
For Each objShape In ActiveSheet.Shapes
  'コマンドボタンの場合
  If Left(objShape.Name, 3) = "cmd" Then
    objShape.Select
    Selection.Delete
  'テキストボックスの場合
  ElseIf Left(objShape.Name, 3) = "txt" Then
    objShape.Select
    Selection.Delete
  'ラベルの場合
  ElseIf Left(objShape.Name, 3) = "lbl" Then
    objShape.Select
    Selection.Delete
  'コンボボックスの場合
  ElseIf Left(objShape.Name, 3) = "cmb" Then
    objShape.Select
    Selection.Delete
  End If
Next objShape

'コピーしたシートを保存するかどうかの確認
Dim DlgAnswer As Boolean
DlgAnswer = Application.Dialogs(xlDialogSaveAs).Show(HozonSheetName)
If DlgAnswer = True Then
  ActiveWorkbook.Close
Else
  ActiveWorkbook.Saved = True
  ActiveWorkbook.Close
End If

End Sub

【49172】Re:エクセル2000VBAで作ったプログラ...
発言  かみちゃん  - 07/5/25(金) 23:19 -

引用なし
パスワード
   >これをエクセル2003で動かすと、バージョンの違いによりプログラムがエラーになりうごきません。

エラーが出るのであれば、エラーメッセージとエラーとなるコードを提示してください。

なお、Excel2003の「ツール」−「マクロ」−「セキュリティ」で
「信頼のおける発行元」タブを開き、「VisualBasicプロジェクトへのアクセスを
信頼する」にチェックは入っていますか?

>シートのモジュールを削除するコードの部分が原因だと思います。

そもそも、シートそのものをコピーするのではなく、シート全体をコピーすれば、
シートモジュールは、引き継がれませんので、ご確認されてはいかがでしょうか?

【49179】Re:エクセル2000VBAで作ったプログラ...
質問  miyake  - 07/5/26(土) 13:11 -

引用なし
パスワード
   ご教示、ありがとうございます。
「VisualBasicプロジェクトへのアクセスを信頼する」にチェックが入っているか否かについては、今手元にエクセル2003がないため、後ほど確認してみます。
シートをコピーより、シート全体のセルをコピーすればスムーズにいくことがわかりましたので、その方法で作り替えてみたいと思います。
ここで一つ教えてください。
セルのコピーだと、コピー元シートのページ設定が反映されないため、印刷プレビューでみると、元のもとのかなりずれてしまうのですが、ページ設定も反映させ印刷結果も同じにするにはどうしたらいいのでしょうか。

【49180】Re:エクセル2000VBAで作ったプログラ...
発言  かみちゃん  - 07/5/26(土) 13:31 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>セルのコピーだと、コピー元シートのページ設定が反映されないため、印刷プレ
>ビューでみると、元のもとのかなりずれてしまうのですが、ページ設定も反映さ
>せ印刷結果も同じにするにはどうしたらいいのでしょうか。

なるほど・・・
ページ設定をマクロで再設定するしかないのではないでしょうか?
でも、マクロでマクロを消すよりは、ずっと安全かと思います。

【49181】Re:エクセル2000VBAで作ったプログラ...
発言  tora  - 07/5/26(土) 15:04 -

引用なし
パスワード
   参考になるか分かりませんが・・・

私も2000→2003で障害が発生して解決したので報告しておきますね!
処理内容はAAAシートにあるデータをフィルターを行い、
BBBシートに貼り付けるという単純な処理でした。
2003で実行すると「Pasteメソッドが失敗しました」というエラーで
原因はコピー元の選択方法(Select)がまずい様で・・・
カラム選択の部分をレンジで選択するように変更した結果OKとなりました。

※他のマクロでも同じような事をやっているが問題ないのに、
このマクロではかならずエラーになる
※何か前後の処理が影響しているかも・・・

解決すると良いですね。がんばって下さいね!

以下ソースとなります
  'AAAシートをフィルターし、BBBシートに貼り付け
  Sheets("AAA").Select
  Range("A2").Select
  Selection.AutoFilter
  Selection.AutoFilter Field:=1, Criteria1:="1"
  
   ↓問題部分
  'Columns("A:H").Select
   ↑問題部分

   ↓変更部分
  Range("A2:H2").Select
  Range(Selection, Selection.End(xlDown)).Select
   ↑変更部分
  
  Selection.Copy
  ActiveWindow.ScrollWorkbookTabs Position:=xlLast
  Sheets("BBB").Select
  ActiveWindow.SmallScroll Down:=-3
  Range("A2").Select
  ActiveSheet.Paste
  Application.CutCopyMode = False

【49189】Re:エクセル2000VBAで作ったプログラ...
お礼  miyake  - 07/5/27(日) 1:29 -

引用なし
パスワード
   セルのコピーをした後にページ設定をする場合は、元のシートのページ設定をプロパティに代入することにより解決しました。
なお、シートコピーにおけるシートモジュールを消すコードのエラーについては、ツール−マクロ−セキュリティの「Visual Basic プロジェクトへのアクセスを信頼する」にチェックを入れることにより解決しました。
いろいろとご教示ありがとうございました。

5734 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free