アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのツールバーにボタンを2つ作って他のブック1,2のマクロをそれぞれ割り当てました。
エクセルの表を開いておいてツールバーから
マクロ1(編集・出力)を呼び出すとブック1がアクティブになってしまい真っ白のシートが見えてしまいます。
もう一方のブック2のマクロ2はフォームを表示するマクロですがそちらはバックに隠れています。
以前同様にシート上のCH(13)を消すマクロを使っていた時もバックに隠れていました。
Application.ScreenUpdating = Falseを入れましたが一瞬ですがやはりアクティブになります。
見た目も悪いので表示したくないし、ブック1と2で動作が違う理由がわかりません、

マクロ1はこれです。
ブック1のcreateというマクロを使うのが目的です。
Sub Output()
Application.ScreenUpdating = False
Call create
MsgBox "完了しました。"
ThisWorkbook.Close
End Sub

マクロ2
Sub Form_Open()
Frm_Form1.Show vbModeless
End Sub

つまらない質問ですが気になるのでよろしくお願いします。

A 回答 (2件)

こんばんは。



Macro1 は、このようにすれば、何も表示せずに出来ます。
このマクロは、途中で中止しないようにしてください。Excelが残ってしまいます。もし、残ってしまったら、タスクマネージャを立ち上げて、プロセスで、削除してください。

>以前同様にシート上のCH(13)
もしかしたら、Chr(10) のことではないでしょうか?


Sub Test1()
Dim bkName As String
Dim xlApp As Object
Dim wb As Workbook
Dim sh As Worksheet

 'ブックの名前を入れます。
 bkName = ThisWorkbook.Path & "\TEST1.XLS"
 If Dir(bkName) = "" Then
  MsgBox "該当するブックがありません。", 48
  Exit Sub
 End If
 On Error GoTo ErrHandler
 Set xlApp = CreateObject("Excel.Application")
 
 With xlApp
  Set wb = .Workbooks.Open(bkName)
  Set sh = wb.Worksheets("Sheet1")
    .DisplayAlerts = False
   sh.Cells.Replace What:=Chr(10), Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False
    .DisplayAlerts = True
  Set sh = Nothing
  wb.Close True
  Set wb = Nothing
  xlApp.Quit
 End With
ErrHandler:
 Set xlApp = Nothing
End Sub


マクロ2のほうは、

たとえば、通常は、こんな風でよいはずですが、ちょっとはっきりしたことが言えません。
Me とは、UserForm のことです。

Private Sub UserForm_Activate()
 AppActivate Me.Caption
End Sub

この回答への補足

Wendy02様
回答ありがとうございます。
>もしかしたら、Chr(10) のことではないでしょうか?
すいません、目茶区茶いい加減な記憶で書いてしまったようです。

コードを記述して頂いたのに
理解力が無くて申し訳ありませんが教えて頂いたコードは
Test1というマクロが記述してあるブックが主となりTEST1というブックを開いて処理をする形式でしょうか。
私の希望はエクセルの表(ブックは何十とあります)を処理する際にツールバーのボタンを押せば
ブック1のマクロ1が仕事をしてくれるという形式ですがどう組み込めばよろしいのでしょう。

ツールバーのボタンを押すとブック1のシートが画面に表示されます。
処理が終わるとクローズさせているので元の表に表示が戻ります。
同様に作った前回及びブック2は表示されなかったのに何故ブック1が表示されてしまったのかその理由がわかりません。

シートが表示されないようにするのは普通にマクロを作るのでは無く
xlAppというオブジェクトの形で呼び出すように作らなくてはいけないのでしょうか。

補足日時:2007/12/08 22:17
    • good
    • 0

こんばんは。



>Test1というマクロが記述してあるブックが主となりTEST1というブックを開いて処理をする形式でしょうか。

それは、関係ないです。すみません。名称は何でもよいのですが、私は、以下の二点を
避けたかったからです。

>Sub Output()

ひとつは、2バイト文字であること。Excel VBEditor のバグか分かりませんが、私のVBEditor(Off 2003-すべて共通)だけかもしれませんが、2バイト文字の検索に不具合があります。もうひとつは、基本形の名前だからです。(これは、私の単なるスタイルなのですが、
読みにくかったりするからです)

>シートが表示されないようにするのは普通にマクロを作るのでは無く
>xlAppというオブジェクトの形で呼び出すように作らなくてはいけないのでしょうか。

別に、何々しなければならないというわけではなくて、ひとつのこだわりの中では、そうしたほうがよいということだけです。実際に、私自身が、オートメーション・オブジエクト(xlApp) を作って処理するということはありません。それ自体が、チラチラ表に出てこようが、あまり気にしたことがありません。すべて、裏方でしようとしたら、そうなるということです。あまり多くはありませんが、こういうやり方を好む人もいるようです。

>私の希望はエクセルの表(ブックは何十とあります)を処理する際にツールバーのボタンを押せばブック1のマクロ1が仕事をしてくれるという形式ですがどう組み込めばよろしいのでしょう。

私は、あまり固定ファイルに対して、ツールバーのボタンに組み込むということはしないのですが、マクロは、「個人用マクロブック(Personal.xls)」の標準モジュールに置きます。

表示-ツールバー-コマンド-
「分類」の中から、マクロを選択
ユーザー設定で、ニコちゃんマークで、空いているツールバーに貼り付けて
そのまま、ボタン(CommandButton)を右クリック
-マクロの登録
-ボタンイメージの変更(アレンジする場合)

などとしてください。

ファイルの選択の場合、固定式の場合は、ループを使わないといけないと思います。
たとえば、
 MyBooks = Array("Test1.xls","Test2.xls","Test2.xls","Test2.xls")
 として、
 
 For Each fn in MyBooks
 
  fn '<- ファイル名(ただし、パスがありませんから、元に書き込むか、別に置いてください
 
 Next fn
    • good
    • 0
この回答へのお礼

Wendy02様
懇切丁寧な回答ありがとうございます。

>すべて、裏方でしようとしたら、そうなるということです.
>あまり多くはありませんが、こういうやり方を好む人もいるようです。

私はチラッとでも画面に出したく無い性格ですの少数派でしょうか。
お教えいただいたxlAppでPersonal.xlsで行いたいと思います。

また何かありましたらよろしくお願いします。

お礼日時:2007/12/11 20:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!