例子一个: 新建工程 添加 MDIForm1 放上Picture1 Option ExplicitPrivate 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_THICKFRAMEPrivate Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate 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 LongPrivate WithEvents mobjXL As Excel.Application Private mlngXLHwnd As Long Dim c As ObjectPrivate Sub MDIForm_Load() Dim lngStyle As Long
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
Set mobjXL = Nothing End SubPrivate 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 SubPrivate Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window) MoveWindow mlngXLHwnd, 0, _ (Picture1.Height / Screen.TwipsPerPixelY), _ (Me.ScaleWidth / Screen.TwipsPerPixelX), _ (Me.ScaleHeight / Screen.TwipsPerPixelY), 1 End Sub
谢谢,那DataGrid支持编辑单元格的内容吗?还是只能显示?
http://www.grid2000.com/cn/
新建工程 添加 MDIForm1 放上Picture1
Option ExplicitPrivate 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_THICKFRAMEPrivate Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate 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 LongPrivate WithEvents mobjXL As Excel.Application
Private mlngXLHwnd As Long
Dim c As ObjectPrivate Sub MDIForm_Load()
Dim lngStyle As Long
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, (Picture1.Height / Screen.TwipsPerPixelY), _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), 1
mobjXL.Workbooks.Add
End SubPrivate Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
For Each c In mobjXL.CommandBars '恢复
c.Enabled = True
Next
SetParent mlngXLHwnd, 0
DoEvents
mobjXL.DisplayAlerts = False
mobjXL.Quit
Set mobjXL = Nothing
End SubPrivate 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 SubPrivate Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
MoveWindow mlngXLHwnd, 0, _
(Picture1.Height / Screen.TwipsPerPixelY), _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), 1
End Sub
如果真要实现的话就用Cell控件吧,用Msflexgrid实现基本功能
倒不难,但EXECL的有些功能是很难写的,你细细去想想有的功能连思路都没有。