戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
Excel2019ユーザーフォームを最前面に表示

    [191029] Excel2019ユーザーフォームを最前面に表示-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/27(03:02))
    □U R L/
      またお世話になります。
      
      ブック1を画面の左半分に、ブック2を画面の右半分においてモードレスでユーザーフォームを
      表示するととちらかのブックがアクティブになった時ユーザーフォームが隠れてしまいます。
      Excel2010の時は何も問題はありませんでしたが、Excel2019は思うように操ることが厳しいです。
      
      MDIがSDIになったのは分かりました。一応対策として作ってみたのですが、ユーザーフォームを
      立ち上げている時に、グーグルで何か調べ物をしようとした時、下記コードではそのままユーザー
      フォームが最前面に表示されグーグルが隠れて邪魔です。何か修正すべきとこはあるでしょうか?
      
      '''''''''フォームモジュール(モードレス表示でお願いします。)
      Private Sub UserForm_Activate()
          Call FormStyle("001", "テスト")
      End Sub
      
      ''''ユーザーフォームがたくさんありましたので、今回、使い回し目的のためフォームモジュールから標準モジュールに移動してみました。
      ''''Win32APIはあまり知りませんが見よう見まねで借りてきました。
      '####################################################################################
      '                    ユーザーフォームAPI用標準モジュール
      '####################################################################################
      Option Explicit
      Option Private Module
      '---------------------------------------------------------------------------------
      'フォームサイズの変更、最大化、最小化ボタン
      '---------------------------------------------------------------------------------
      Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
             (ByVal hwnd As Long, ByVal nIndex As Long) As Long
      Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
             (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
      Private Declare Function GetActiveWindow Lib "user32" () As Long
      Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
      Private Const gStyle = (-16)      'GWL_STYLE
      Private Const gCaption = &HC00000 'WS_CAPTION : フォームのタイトルバーを表示しない
      Private Const Frame = &H40000     'WS_THICKFRAME
      Private Const MaxBox = &H10000    'WS_MAXIMIZEBOX
      Private Const MinBox = &H20000    'WS_MINIMIZEBOX
      
      '---------------------------------------------------------------------------------
      'ユーザーフォームを最前面に表示する(Excel2019用〜Excel2010では問題なかった)
      '---------------------------------------------------------------------------------
      Private Declare Function GetForegroundWindow Lib "user32" () As Long
      Private Declare Function SetWindowPos Lib "user32" _
             (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
              ByVal x As Long, ByVal y As Long, _
              ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
      Private Const TOPMOST As Long = -1  'HWND_TOPMOST
      Private Const NOSIZE As Long = &H1& 'HWND_NOSIZE
      Private Const NOMOVE As Long = &H2& 'HWND_NOMOVE
      
      '---------------------------------------------------------------------------------
      'キャプション
      '---------------------------------------------------------------------------------
      Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" _
             (ByVal hwnd As Long, ByVal lpString As String) As Long
             
      '************************************************************************************
      ' UserForm_Activate の代用
      '************************************************************************************
      Public Sub FormStyle(job As String, Optional Cap As String = "")
          Dim Ret As Long
          Dim hwnd As Long
          Dim wStyle As Long
      
          hwnd = GetActiveWindow()
          wStyle = GetWindowLong(hwnd, gStyle) 'Wnd_STYLE
      
          Select Case UCase(job)
            Case "000": wStyle = wStyle And (Not gCaption)           'No Caption
            Case "001": wStyle = wStyle Or MinBox                    'Min
            Case "010": wStyle = wStyle Or MaxBox                    'Max
            Case "011": wStyle = wStyle Or MaxBox Or MinBox          'Min Max
            Case "101": wStyle = wStyle Or Frame Or MinBox           'Thic Min
            Case "110": wStyle = wStyle Or Frame Or MaxBox           'Thic Max
            Case "111": wStyle = wStyle Or Frame Or MaxBox Or MinBox 'Thic Max Min
          End Select
          
          Ret = SetWindowLong(hwnd, gStyle, wStyle)
          Ret = DrawMenuBar(hwnd)
          If Cap <> "" Then Call SetWindowText(hwnd, Cap) 'キャプション
          Call SetWindowPos(GetForegroundWindow, TOPMOST, 0, 0, 0, 0, NOMOVE Or NOSIZE) '最前面
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191031] Re[1]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ よろずや -(2019/12/27(09:02))
    □U R L/

      HWND_TOPMOST

      HWND_TOP
      に変えたらどうなりますか。




    [191033] Re[2]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ γ -(2019/12/27(10:44))
    □U R L/
      本題から逸れますが、
      以前のスレッドで、64bitのOfficeと伺いました(OSではなく)。
      API宣言はそれでいいのですか?
      ht  tps://hatena19.com/use-win-api-with-office-64bit-or-32bit-vba/
      は、その間の事情をとても分かり易く解説いただいている印象です。さすがです。
      
      
      




    [191053] Re[3]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/28(21:50))
    □U R L/
      よろずや様、γ様いつもお世話になっております。
      
      ○下記のように変更してみました。
      ''''Private Const TOPMOST As Long = -1  'HWND_TOPMOST
      Private Const WINTOP As Long = 0  'HWND_TOP
      
      Call SetWindowPos(GetForegroundWindow, WINTOP, 0, 0, 0, 0, NOMOVE Or NOSIZE) 
      
      SDIもどきに戻ってしまいます。つまり最初の説明の動作になってしまいます。
      2ブックを立ち上げているとユーザーフォームがどちらか一方のブックに隠れて
      しまいます。(やはり厳しいでしょうか?)
      
      ○再確認しました。Excel2019は32ビットでした。ご紹介先も確認しました。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191057] Re[4]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ よろずや -(2019/12/29(16:46))
    □U R L/
      SetWindowPosとは関係なく、こんな下策なことになりました。
      
      Option Explicit
      
      Private WithEvents App As Excel.Application
      
      Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
          If UserForm1.Visible Then
              Dim Left As Single, Top As Single
              Left = UserForm1.Left: Top = UserForm1.Top
              Unload UserForm1
              UserForm1.Show
              UserForm1.Left = Left: UserForm1.Top = Top
          End If
      End Sub
      
      Private Sub Workbook_Open()
          Set App = Excel.Application
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191058] Re[5]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/29(20:18))
    □U R L/
      記載するところはThisworkbook  モジュールですね。App_WindowActivate --->App_WorkbookActivate にしてみました。
      期待通りではありますが、、、。
      >Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
      Private Sub App_WorkbookActivate(ByVal Wb As Workbook)
      
      こういう考え方でできるのでしょうか?
      エクセルブックのどれかにフォーカスがあればパラメータはHWND_TOPMOST
      グーグルを立ち上げた時(エクセルブックからフォーカスが離れたとき)パラメータHWND_TOPMOSTを解除
      グーグルを立ち上げたまま、マウスでエクセルを叩いてブックをアクティブにしたらパラメータHWND_TOPMOSTをセット
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191059] Re[6]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ よろずや -(2019/12/30(09:20))
    □U R L/
      App_WorkbookActivate だと、「表示」「新しいウィンドウを開く」
      で開いたウィンドウに対しては反応しませんよ。
      
      SetWindowPos は不要です。


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191061] Re[7]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ hatena -(2019/12/30(14:56))
    □U R L/

      よろずやさんのコードはアプリケーションレベルのイベントハンドラを利用しています。下記を参考にしてください。

      Excel でアプリケーションレベルのイベントハンドラを作成する | Microsoft Docs
      h ttps://docs.microsoft.com/ja-jp/office/troubleshoot/excel/create-application-level-event-handler

      よろずやさんのコードでのアプリケーションレベルのイベントハンドラの利用法は私にも勉強になりました。




    [191062] Re[8]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2019/12/30(22:56))
    □U R L/
      >フォームモジュール(モードレス表示でお願いします。)
      >HWND_TOPMOSTをセット
      
      理解できません。
      タスクバーにフォームを追加し、フォームをクリック出来るようにすれば良いのでは。
      
      Private Declare Function WindowFromAccessibleObject Lib "oleacc.dll" (ByVal IAcessible As Object, ByRef Hwnd As Long) As Long
      Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, _
                                                          ByVal dwNewLong As Long) As Long
      Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
      
      Sub main()
          FormIconOpen UserForm1
          
      End Sub
      Sub FormIconOpen(form As Object)
          Dim Hwnd As Long, siz As Long
          form.Show 0
          WindowFromAccessibleObject form, Hwnd
          SetWindowLong Hwnd, -20&, GetWindowLong(Hwnd, -20&) Or &H40000
          siz = Application.WindowState
          Application.WindowState = xlMinimized
          Application.WindowState = siz
      End Sub
      
      excel2016(32),win10(32)


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191063] Re[9]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/31(02:50))
    □U R L/
      hatena様お世話になります。
      >アプリケーションレベルのイベントハンドラ
      ご紹介先を確認しました。Class1とかはとても苦手です。下記が Thisworkbookモジュールで実際に使っている部分です。
      今回は苦手なClass1とかまでの理解が必要でしょうか?
      
      '######################################################################################################
      '                               ThisWorkbook モジュール
      '######################################################################################################
      Option Explicit
      Private WithEvents xlApp As Excel.Application
      
      '■■■■■■■■■■■■■■■■■■( Workbook )■■■■■■■■■■■■■■■■■■
      '************************************************************************************
      ' Workbook_Open
      '************************************************************************************
      Public Sub Workbook_Open() '----- Public 指定
          Set xlApp = Excel.Application
          Call Pbar("Ini")'''''マウス右クリックメニュー追加
      End Sub
      
      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      ''''割愛
      End Sub
      
      Private Sub Workbook_AddinUninstall()
          Call Pbar("Del")''''マウス右クリックメニュー撤去
      End Sub
      
      '■■■■■■■■■■■■■■■■■■■( xlApp )■■■■■■■■■■■■■■■■■■■
      Private Sub xlApp_WorkbookOpen(ByVal wb As Workbook)
      End Sub
      
      Public Sub xlApp_WorkbookActivate(ByVal wb As Workbook)
      End Sub
      
      Private Sub xlApp_SheetActivate(ByVal Sh As Object)
      End Sub
      
      Private Sub xlApp_WorkbookBeforeClose(ByVal wb As Workbook, Cancel As Boolean)
      End Sub
      
      Private Sub xlApp_WindowDeactivate(ByVal wb As Workbook, ByVal Wn As Window)
      End Sub
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191064] Re[10]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/31(03:33))
    □U R L/
      kazuo様お世話になります。
      新規ブックにUserForm1を追加(モードレス)
      次に、標準モジュールに Private Declare Function WindowFromAccessibleObject 以下のコードをコピー
      最後に FormIconOpenを実行しました。(画面下のタスクバーにUserForm1と表示されるんですね。)
      やはりブックを2個表示している時はユーザーフォームが隠れてしまいます。
      あちらこちらのサイトを探しているのですが皆さん苦労されているようです。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191065] Re[11]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/31(04:32))
    □U R L/
      (a)のUnloadでは問題があります。計算結果をユーザーフォーム内部に持っている場合です。
      Hide でも無駄でした。
      
      Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
          If UserForm1.Visible Then
              Dim Left As Single, Top As Single
              Left = UserForm1.Left: Top = UserForm1.Top
              Unload UserForm1  '''''(a)
              UserForm1.Show
              UserForm1.Left = Left: UserForm1.Top = Top
          End If
      End Sub
      
      EXCEL VBAメモ - ユーザーフォームを常に最前面にする(Excel2016)
      h_ttps://hake.hatenablog.com/entry/20180318/p1
      2019/3/14追記
      現時点のWindows10環境のExcel (Excel for Office365 64bit)で確認したところ、
      下記で述べている問題は発生しませんでした。Excel側で改善されたようですね。
      ということらしいそうです。私の新品パソコンもなんとかして欲しいところです。
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191067] Re[12]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ よろずや -(2019/12/31(10:18))
    □U R L/

      >(a)のUnloadでは問題があります。計算結果をユーザーフォーム内部に持っている場合です。

      最初に「下策」と断ったのはこのことです。

      他に解決策が見つからなければ、Left と Top を引き継いだ様に、
      その他の計算結果も引継げばよろしいかと。




    [191068] Re[13]: Excel2019ユーザーフォームを最前面に表示-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ ファントム -(2019/12/31(16:31))
    □U R L/


      1.フォームを常に最前面に表示する例、、2.フォームの最前面指定を解除する例
      h_ttp://rucio.a.la9.jp/main/Samples/Sample063TopMost.htm


      マウス右クリックメニューの中に上記1と2を組み込ませて使用者側でユーザーフォームの
      状態を選択させようかと考えています。できるかどうかは分かりませんが。

      さらにWinAPIを勉強する動機付けができました。長くなりそうですので解決ではありませんが
      このスレを閉じます。皆様どうもありがとうございました。
      よいお年をお迎え下さい。




    [191405] Re[14]: Excel2019ユーザーフォームを最前面に表示-

    記事引用/メール受信=OFF■

    □投稿者/ kazuo -(2020/02/18(20:44))
    □U R L/
      備忘録として使わせていただきます。
      WindowResize or App_WindowResizeを記述すると、複数のBookがあるとき全てのウィンドウを最小化し、タスクバーで閉じると誤動作する。
      
      デバッグが完全ではないが、それなりに動作しているように見える。
      Bookモジュールに記載
      
      Rem ************** ユーザーフォームをActiveBookの前面に表示する *************************************
      '   本コードはBookモジュールのみで構築され、ユーザーフォームウィンドウのオーナーを変え、ActiveBookの前面に表示することのみ行っている
      '           ユーザーフォームのコードはオーナーが変わってしまうことや以下に考慮し、作成しなければならない
      '★1    注意)フォームには1つ以上のフォーカスが持てるコントロールがあること
      '       Bookが最小化されるとformも最小化され、form.Visibleはfalseになるので、
      '       以下の判定としているが、
      '           If UserForm1.ActiveControl Is Nothing Then  'formがロードされていなければ
      '       UserForm_Initialize, _QueryClose, _Terminateイベントが一度発生する
      '       formにフォーカスコントロールの配置が無い場合やHideする場合はフラグを追加し、管理する必要あり
      'Dim f1Show As Boolean   'formがShowされているかのフラグ例
      '           If f1Show Then                              'formが表示されていれば
      
      '★2    ttps://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowlonga
      '       HWNDPARENT オーナーウィンドウの付け替えは禁止されているがSetParentでは配置が変わり実現できない
      '       Windows10(32)まではサポートされていると思うが、将来のサポートは未定
      Rem **************************************************************************************************
      
      Private Declare Function WindowFromAccessibleObject Lib "oleacc.dll" (ByVal IAcessible As Object, ByRef hwnd As Long) As Long
      Private Declare Function SetWindowPos Lib "user32" _
             (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
              ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
      Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
              ByVal dwNewLong As Long) As Long
      Private Declare Function GetDesktopWindow Lib "user32" () As Long
      
      Private WithEvents App As Excel.Application
      Private Ahwnd As Long
      
      Private Sub Workbook_Open()
          Ahwnd = Application.hwnd    '自身のウィンドウハンドルを記憶
          整列
          ボタン作成
          Set App = Excel.Application
      End Sub
      
      
      'ActiveWindowが切り替わったら、formがロードされていて最小化されていないBookがあればformのオーナーをActiveWindowに付け替え前面に表示
      Private Sub App_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
          Dim hwnd As Long
          If UserForm1.ActiveControl Is Nothing Then Exit Sub '★1
          If WindowCheck Then
              WindowFromAccessibleObject UserForm1, hwnd
              SetWindowLong hwnd, -8&, Wn.hwnd                '★2
              SetWindowPos hwnd, 0&, 0&, 0&, 0&, 0&, 3&      'HWND_TOP,NOSIZE+NOMOVE
          End If
      End Sub
      
      '★3ウィンドウ最小化の状態では確実に閉じられないので、コメントを出す
      '別のExcelのウィンドウが閉じられたときロードされているformが閉じられないようにするためThisWorkbookに付け替える
      Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
          Dim hwnd As Long
          If Workbooks.Count = 1 Then Exit Sub
          If Wb.Windows(1).WindowState = xlMinimized Then         '★3
              MsgBox "タスクバーからは閉じないでください"
              Cancel = True
              Exit Sub
          End If
              
          If UserForm1.ActiveControl Is Nothing Then Exit Sub     '★1
          If Not Wb Is Me Then
              WindowFromAccessibleObject UserForm1, hwnd
              SetWindowLong hwnd, -8&, Ahwnd                      '★2
              Application.OnTime Now(), "'ThisWorkbook.formHide """ & hwnd & "'"  'Bookが閉じられてから表示/非表示
          End If
      End Sub
      
      'Bookが最小化された時最小化されていないBookがあれば、ロードされているformを表示し、無ければ非表示
      '★3このイベントを使用すると全てのBookが最小化された状態で別Bookを閉じると誤動作する
      Private Sub App_WindowResize(ByVal Wb As Workbook, ByVal Wn As Window)
          Dim hwnd As Long, uFlags As Long
          If Not WindowCheck Then Me.Activate       '★3
          If UserForm1.ActiveControl Is Nothing Then Exit Sub '★1
          WindowFromAccessibleObject UserForm1, hwnd
          uFlags = &H80&                              'SWP_HIDEWINDOW
          If WindowCheck Then uFlags = &H40&          'SWP_SHOWWINDOW
          SetWindowPos hwnd, 0&, 0&, 0&, 0&, 0&, 3& Or uFlags 'HWND_TOP,NOSIZE+NOMOVE+WINDOWon/off
      End Sub
      
      '   新しいウィンドウではBeforeCloseイベントが発生しないので、本イベントで管理
      '   自BookのオリジナルBookが閉じられる時のためAwndを再設定
      '   自Bookであれば一旦DESKTOPに、他BookであればAwndにオーナーを付け替えformが閉じるのを防止
      Private Sub App_WindowDeactivate(ByVal Wb As Workbook, ByVal Wn As Window)
          Dim hwnd As Long
          If Wb.Windows.Count = 1 Then Exit Sub
          If Wb Is Me Then
              If Wb.Windows(1) Is Wn Then
                  Ahwnd = Wb.Windows(2).hwnd
              Else
                  Ahwnd = Wb.Windows(1).hwnd
              End If
          End If
          If UserForm1.ActiveControl Is Nothing Then Exit Sub     '★1
          WindowFromAccessibleObject UserForm1, hwnd
          If Wb Is Me Then
              SetWindowLong hwnd, -8&, GetDesktopWindow           '★2
          Else
              SetWindowLong hwnd, -8&, Ahwnd                      '★2
          End If
          Application.OnTime Now(), "'ThisWorkbook.formHide """ & hwnd & "'"  'Bookが閉じられてから表示/非表示
      End Sub
      
      Rem **************** 全てのBookが最小化されていればformを非表示 ********************
      Private Sub formHide(hwnd As Long)
          If Not WindowCheck Then
              SetWindowPos hwnd, 0&, 0&, 0&, 0&, 0&, &H83&   'HWND_TOP,NOSIZE+NOMOVE+HIDEWINDOW
          End If
      End Sub
      
      Rem **************** Bookが全て最小化されているときはFalse,最小化されていないBookがあればTrue ****************
      Private Function WindowCheck() As Boolean
          Dim Wn As Window, Wb As Workbook
          For Each Wb In Workbooks
              For Each Wn In Wb.Windows
                  If Wn.WindowState <> xlMinimized Then Exit For
              Next
              If Not Wn Is Nothing Then
                  WindowCheck = True
                  Exit Function
              End If
          Next
      End Function
      
      Rem **************** 以下はテスト環境の作成 ****************
      
      'モードレスフォームを左上に表示
      Private Sub FormShow()
          UserForm1.StartUpPosition = 3
          UserForm1.Show 0
      End Sub
      
      '空Bookを起動し、整列
      Private Sub 整列()
          Workbooks.Add
          Me.Activate
          Windows.Arrange xlArrangeStyleTiled, False
          Me.Windows(1).Left = Me.Windows(1).Left + 10    'ActiveBookが分り易いよう重ねる
      End Sub
      
      'フォーム起動ボタンを作成
      Private Sub ボタン作成()
          Dim sp As Shape
          With Worksheets(1)
              .Activate
              On Error Resume Next
              Set sp = .Shapes("formshow")
              On Error GoTo 0
              If sp Is Nothing Then
                  With .Shapes.AddShape(msoShapeRoundedRectangle, 210, 170, 120, 40)
                      .Name = "formshow"
                      .TextFrame2.TextRange.Characters.Text = "UserForm1.shw 0"
                      .OnAction = "ThisWorkbook.FormShow"
                  End With
              End If
          End With
      End Sub
      
      'EXCEL2016


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G