ActiveXコントロールボタンからOutlookを立ち上げる方法 | |
---|---|
[195412] ActiveXコントロールボタンからOutlookを立ち上げる方法- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/11/28(01:07)) □U R L/ <やりたいこと> ・標準モジュールにプロシージャ(macro(1))を記述するWorkbook(1)に、Outlookを立ち上げるボタン(macro(2))を設置したWorksheet(1)を準備。 ・macro(1)を実行すると、macro(2)のボタン付きでWorksheet(1)をコピーし、別のWorkbook(2)を作成(Worksheet(1')にmacro(2')ボタン付き) ・Workbook(2)のmacro(2')ボタンを実行すると、Outlookが立ち上がるようにしたい。 <補足> ・macro(2)はWorksheet(1)のコピーWorksheet(1')でmacro(2')として機能するよう、ActiveXコントロールのコマンドボタン内に記述。 <問題点> ・Workbook(2)のmacro(2')ボタンを実行すると、「非表示モジュール内でコンパイルエラーが発生しました。」とのエラーが表示される。 ・なお、コピー元のWorkbook(1)のmacro(2)は正常に機能します。また、コピーするマクロをexcel上の操作のみに限定(macro(3))すれば、コピー先のWorkbook(2)のmacro(3')も正常に機能します。他アプリ(Outlook)に跨がる場合に影響があるのかと推察。 <Code> Private Sub CommandButton1_Click() CreateObject("Outlook.Application").CreateItem(olMailItem).Display End Sub <環境> Windows11 Office365 素人ゆえ、うまく説明ができず、申し訳ございません。 お助け頂けますと大変助かります。 何卒よろしくお願いいたします。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195417] Re[1]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ 記事 -(2022/11/30(00:32)) □U R L/ 質問の意味が解りませんが。 こんな風にすれば良いのでは? Private Sub CommandButton1_Click() マクロ1 end sub 標準モジュール sub マクロ1() 実行したいマクロ end sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195418] Re[2]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/11/30(10:01)) □U R L/ アドバイス有難うございます。 当方説明が分かり難くすみません。 Workbook(1).Worksheets(1)のCommandButtonを、 Worksheets(1)ごとコピー&切り離して新しいworkbookを作成 (Workbook(2).Worksheets(1’))しています。 Workbook(1)には標準モジュールにマクロは記載できますが、 それをWorkbook(2)にコピーする方法、 若しくは、Workbook(2j.Worksheets(1’)のCommandButtonから、 Workbook(1)の標準モジュールを参照させる方法がわからないのですが、 追加でアドバイス頂けないでしょうか。 宜しくお願い致します。 |
[195419] Re[3]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/11/30(11:45)) □U R L/ Workbook(1)をコピーしてWorkbook(2)とし、 そこから、Sheet1以外を削除したらどうですか? |
[195420] Re[4]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/11/30(13:16)) □U R L/ 半平太さま 有難うございます。なるほど、そういう手もありますね。試してみます。 ちなみに、Workbook(1)の標準モジュールには、コピー先では全く関係しないコードも 相応に記載しており、可能であればWorkbook(2)の標準モジュールはシンプルにしたい希望はあります。 Workbook(1)上のマクロで、特定のコードを、Workbook(2)の標準モジュールに直接書き込むことは 出来ないものでしょうか。 |
[195421] Re[5]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/11/30(13:27)) □U R L/ >Workbook(1)上のマクロで、特定のコードを、Workbook(2)の標準モジュールに直接書き込むことは >出来ないものでしょうか。 出来ないことはないです。・・が私は気が進みません。 ↓ 【VBAでVBEを操作する】 h ttp://officetanaka.net/excel/vba/vbe/ あと、必要なコードだけ、Sheet1に移してしまう、と言うのも選択肢になるのでは? |
[195422] Re[6]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/11/30(13:36)) □U R L/ 半平太さま 有難うございます。理解しました。(空気も読めました) Sheet1に必要なコードを移す方法で、今晩やってみようと思います。 結果は改めて共有させて頂きます。 まずは、一旦御礼まで。 |
[195423] Re[7]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/12/01(00:00)) □U R L/ 半平太さま やってみましたが、上手くいかないです。 理解したつもりでしたが、私が間違っているのだと思います。 試してみたのは、Workbook(1).Worksheet(1)のシートモジュールに、 最終的にやりたいマクロ(含むOutlook立ち上げ)を記載。 Workbook(1)の標準モジュールのマクロで、Worksheet(1)をコピーして Workbook(2).Worksheet(1')を作成。 Workbook(2).Worksheet(1')のマクロを走らせようとしましたが、 エラーになります。 抜粋ですが、codeは以下の通りです。 ■ Workbook(1) 標準モジュール Sub newWaitList(ByRef waitList As String, wbChild) wbChild.Worksheets("template").Copy With ActiveWorkbook Application.DisplayAlerts = False .SaveAs fileName:=waitList, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, _ AccessMode:=xlShared .ProtectSharing .ActiveSheet.Name = Format(Now, "yyyymmdd") .Close SaveChanges:=True Application.DisplayAlerts = True End With End Sub ■ Workbook(1)Worksheets(template) シートモジュール Private Sub CommandButton1_Click() Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row Dim iCounter As Long For iCounter = 2 To maxRow Range(Cells(iCounter, 2), Cells(iCounter, 10)).BorderAround If Range("J" & iCounter).Value = "確認済" Then If Range(Cells(iCounter, 2), Cells(iCounter, 10)).Interior.Color <> rgbGray Then Call mailer 'メール立ち上げ End If Range(Cells(iCounter, 2), Cells(iCounter, 10)).Interior.Color = rgbGray ElseIf iCounter Mod 2 = 0 Then Range(Cells(iCounter, 2), Cells(iCounter, 10)).Interior.Color = rgbLightSteelBlue Else Range(Cells(iCounter, 2), Cells(iCounter, 10)).Interior.Color = vbWhite End If Next iCounter ThisWorkbook.Save End Sub Sub mailer() CreateObject("Outlook.Application").CreateItem(olMailItem).Display End Sub ちなみに、コピーして作成したWorkbook(2)の標準モジュール、シートモジュールを 見ようとすると、「プロジェクトがロックされています。」と表示され、 見ることができません。 あと、シートモジュールのコードをSub mailer()のみ実行する分には機能します。 また、Private Sub CommandButton1_Click()をイベントプロシージャではなく、 シートモジュール上の通常のSubプロシージャにすると、 挙動が、Workbook(1)を参照しに行っているような気がします。 恐らく、基本的なところの理解が足りていないのだと思います。 改めまして、アドバイス頂けますと、大変助かります。 何度もすみません。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195424] Re[8]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■記事引用/メール受信=OFF■ □投稿者/ 半平太 -(2022/12/01(15:53)) □U R L/ >CreateObject("Outlook.Application").CreateItem(olMailItem).Display Workbook(2)の実行は、Outlookを参照設定しない状態下で行うので olMailItem → 0(定数) にしないと拙いのでは? CreateObject("Outlook.Application").CreateItem(0).Display |
[195430] Re[9]: ActiveXコントロールボタンからOutlookを立ち上げる方法- ■ / 記事引用/メール受信=OFF■ □投稿者/ FlyingPan -(2022/12/03(12:48)) □U R L/ 半平太さま アドバイス有難うございました。 ご指摘の通りで、無事解決しました。 大変助かりました。 まだまだ理解が足りていないことを実感。 ますます、勉強意欲が湧きました。 引き続き宜しくお願い致します。 |
このトピックに書きこむ |
---|