We need you!

We're working hard on the next version of Developer Fusion. Let us know what you think we should be up to!

Members

Technology Zones

Articles

Hosted By

MaximumASP

Info

Rated
Read 19,658 times

Related Categories

Excel inside MDI

nzjonboy

You will need to add a reference to Microsoft Excel.

Add an MDI window to your project and set it as the starting window. Then add this code and run it.

Option Explicit

Private Const GWL_STYLE = (-16)
Private Const WS_DLGFRAME = &H400000
Private Const WS_CHILD = &H40000000
Private Const WS_CHILDWINDOW = (WS_CHILD)
Private Const WS_VSCROLL = &H200000
Private Const WS_CAPTION = &HC00000
Private Const WS_BORDER = &H800000
Private Const WS_THICKFRAME = &H40000
Private Const WS_SIZEBOX = WS_THICKFRAME

Private Type RECT
       Left As Long
       Top As Long
       Right As Long
       Bottom As Long
End Type

Private Declare Function FindWindow Lib "user32" _
   Alias "FindWindowA" _
   (ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
   
Private Declare Function GetParent Lib "user32" _
   (ByVal hwnd As Long) As Long
   
Private Declare Function SetParent Lib "user32" _
   (ByVal hWndChild As Long, _
   ByVal hWndNewParent As Long) As Long
   
Private Declare Function SetForegroundWindow Lib "user32" _
   (ByVal hwnd As Long) As Long
   
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 MoveWindow Lib "user32" _
   (ByVal hwnd As Long, _
   ByVal x As Long, _
   ByVal y As Long, _
   ByVal nWidth As Long, _
   ByVal nHeight As Long, _
   ByVal bRepaint 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 FindWindowEx Lib "user32" _
   Alias "FindWindowExA" _
   (ByVal hWnd1 As Long, _
   ByVal hWnd2 As Long, _
   ByVal lpsz1 As String, _
   ByVal lpsz2 As String) As Long

Private WithEvents mobjXL As Excel.Application
Private mlngXLHwnd As Long

Private Sub MDIForm_Load()
   Dim lngStyle As Long
   Dim c As Object
   Dim lngStatusBar As Long

   Set mobjXL = New Excel.Application
   
   mobjXL.Caption = "10001"
   
   mobjXL.Visible = True

   For Each c In mobjXL.CommandBars
       c.Enabled = False
   Next

   mlngXLHwnd = FindWindow("XLMAIN", "10001")
   SetParent mlngXLHwnd, Me.hwnd
   
   lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
   
   lngStyle = lngStyle Xor WS_CAPTION
   lngStyle = lngStyle Xor WS_SIZEBOX
   
   SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle
           
   MoveWindow mlngXLHwnd, 0, 0, _
       (Me.ScaleWidth / Screen.TwipsPerPixelX), _
       (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
   
   mobjXL.Workbooks.Add
   
End Sub

Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
       
   SetParent mlngXLHwnd, 0
   DoEvents
   
   mobjXL.Quit
   
   Set mobjXL = Nothing
End Sub

Private Sub MDIForm_Resize()
   If Not Me.WindowState = vbMinimized Then
       MoveWindow mlngXLHwnd, 0, _
           (Picture1.Height / Screen.TwipsPerPixelY), _
           (Me.ScaleWidth / Screen.TwipsPerPixelX), _
           (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
   End If
End Sub

Private Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
   MoveWindow mlngXLHwnd, 0, 0, _
       (Me.ScaleWidth / Screen.TwipsPerPixelX), _
       (Me.ScaleHeight / Screen.TwipsPerPixelY), 1
End Sub

Comments

  • Warning

    Posted by making on 07 Aug 2002

    Brilliant example that this is, be warned!

    With Excel 2000 under Windows 98 (I havent tested it with any other OS combos but I would have thought it was the same) this sample turns the toolbars an...