2017-10-18 16 views
-1

私はUDFを利用するExcel 2016でユーザーフォームを作成しました。私はExcelシートを開くことなくUserFormを実行させ、他のExcelブックを開いて同時にツールがアクティブであることを可能にしたいと思っています。ExcelベースのVBAユーザーフォームを独自の方法で作成するにはどうすればいいですか?

Private Sub MyForm_Initialize() 
    Application.Visible = False 
    UserForm1.Activate 
End Sub 

しかし、これは、ユーザーフォームを閉じた後、バックグラウンドでExcelが開いたまま、他のすべてのアクティブなExcelシートが隠されていると簡単に操作することはできません。私が見つけたいくつかのソリューションは、以下を使用すると言います。

VBA.netを使用せずにユーザーフォームを基本的にスタンドアロンアプリケーションとして動作させる方法はありますか?

+2

私はスタンドアロンの質問として書き直してから自分の質問に答えを投稿することをおすすめします([はい、これは許可されています](https://stackoverflow.com/help/self-answer)。 )) –

+1

[so]はQ&Aで、なんらかのディスカッションフォーラムではありません。質問フィールドは質問をホストし、回答フィールドは回答を保持し、タイトルには '[SOLVED]'や '[SOLUTION]'や他の厄介なタグはありません。投稿を編集してQ&Aのように見えるようにしてください。それが立てば、あなたが何を求めているかは完全には不明です。 –

+0

他のワークブックで定義済みの機能を実行するために、非表示のワークブックのuserformをコントロールウィンドウとして使用していますか?良いアイデア。 –

答えて

-1

これはコードであなたのWorkbook_Openですが

Private Sub WorkBook_Open() 

    If Workbooks.Count = 1 Then Application.Visible = False 

    Workbooks("MyBook.xlsm").Windows(1).Visible = False 

    UserForm1.Show vbModeless 

End Sub 
0

を再配置コードは、いくつかの異なる場所で、「はThisWorkbook」オブジェクトおよび「ユーザーフォーム」のコードになります。

"ThisWorkbook"には、UserFormが唯一のExcelのもの(ブック)であるかどうかを判断するコードが含まれています。Excelのアプリケーションを非表示にし、ブック自体を非表示にします。他のワークブックが開いている場合は、そのワークブックは単に非表示になります。私は両方のケースでアプリケーションとブックを隠すように設定して、UserFormがUserFormに関連付けられているブックをプルアップせずに実行した後で新しいExcelインスタンスを開くことができるようにしました。このためのコードは、(「はThisWorkbook」オブジェクトになる)以下である:

Private Sub WorkBook_Open() 
    Dim wb As Workbook 
    Set wb = Workbooks("MyBook.xlsm") 
    If Workbooks.Count > 1 Then 

     wb.Windows(1).Visible = False 
    Else 
     wb.Windows(1).Visible = False 
     Application.Visible = False 
    End If 
    UserForm1.Show vbModeless 
    'Put defaults and populations here 
End Sub 

ユーザーフォームがアクティブである間のExcelを使用するためUserForm1.Show vbModelessが許します。 このセクションでノートのカップル:

  • 「UserForm1では、」私のユーザーフォームの名前は、あなたの名前に変更され、私は ワークブックの名前に引用符の内側に変更Set wb = Workbooks("")
  • あなたは開口部の他のアクションを必要としない場合は、他のワークブックが

開けないでユーザーフォームは、

  • IfElse声明をなくすことができ、Ifに移動させ、コードの次のセクションはUserForm Codeに入ります。 Excelブックを表示するように設定されたボタンがあります。ボタンを表示したくない場合は、クリックした地域を持つことができます。 Excelシートを有効にするには、アプリケーションをアクティブ化する必要があります。アクティブなもの(UserForm)をアンロード(非アクティブ化)します。ユーザーは、スプレッドシートへのアクセスを必要としない場合は、コードのこのビットは必要ありません。

    Private Sub See_Excel_Click() 
    
        Dim wb As Workbook 
        Set wb = Workbooks("MyBook.xlsm") 
        wb.Windows(1).Visible = True 
        Application.Visible = True 
        wb.Sheets("Sheet1").Activate 
    
        Unload Me 
    
    End Sub 
    

    ユーザーフォーム内でユーザーフォームを閉じたときに何が起こるかを処理する方法があるはず、Excelアプリケーションとして、およびブックは、バックグラウンドで隠されたままになります。私はワークブックとアプリケーションを閉じるアクションを持っています。あなたがCancel = Trueを設定した場合、赤色のxボタンはユーザーフォームを閉じることはありません。私が使用するコードは、次のとおりです。

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    
        If CloseMode = 0 Then 
         Cancel = False 
         Dim wb As Workbook 
         Set wb = Workbooks("MyBook.xlsm") 
         wb.Windows(1).Visible = True 
         Application.Visible = True 
         ThisWorkbook.Saved = True 
         ThisWorkbook.Activate 
    
        If Workbooks.Count > 1 Then 
          ActiveWorkbook.Close 
         Else 
          Application.Quit 
        End If 
    
        End If 
    
    End Sub 
    

    これは、ユーザーフォームの中に入るコードです。そして、VBAでUserFormを持つために必要なコードは、ExcelがUserFormと同時に正常に動作するようにしながら、独自のアプリケーションとして動作します。

    は何が起こるかを要約する:ワークブックブックを立ち上げている
    1. が隠されている、および他のブックが開いていない場合はExcelアプリケーションが非表示になります。
    2. スプレッドシートが活性化されると、ユーザーフォームがExcelが同時に
    3. 使用することを可能にするために開始され、再びユーザーフォームが閉じているときに有効に再とアプリケーションと非隠すワークシート
    4. であるExcelワークブックが閉じられ、他のワークブックがない場合は、Excelアプリケーションが閉じられます。
    5. デフォルトを設定するか、コンボボックスを移入すると、それらを「WorkBook」オブジェクトコードに入れます。
  • 0

    問題がすべてのブックを開いている場合は、それらをすべて閉じるための手順を追加できます。

    Sub Close_xls() 
    Dim objXl as Object 
    On error Go To GenerateXlErr 
    Set objXl = GetObject(, "Excel.Application") 
    If not (ObjXl is Nothing) Then 
        ObjXl.Application.DisplayAlerts = False 
        ObjXl.Workbooks.Close 
        ObjXl.Quit 
        set ObjXl = Nothing 
    End If 
    Exit Sub 
    GenerateXLErr: 
    If Err.number = 432 or err.number = 429 THen 
        Resume Next 
    End If 
    End Sub 
    
    関連する問題