这是我的代码,请大家帮我看一下,怎么样才能在VB窗体里编辑Excel(就象在Excel环境下编辑Excel文档一样)
说明:1、在运行代码之前先在VB窗体里加一个Picture控件 并将Align属性设成1-Align Top
2、加入如下代码后, 按F5运行
在窗体里加如下代码:
Dim mobjxl As Excel.Application
Dim mobjxlBook As Excel.Workbook
Dim mobjxlSheet As Excel.Worksheet
Dim mobjxlQuery As Excel.QueryTablePrivate mlngXLHwnd As Long
Dim blnShow As Boolean
Dim lngStyle As LongPrivate Sub Form_Load()
Dim lngStyle As Long
Dim c As Object
Dim lngStatusBar As Long Set mobjxl = New Excel.Application
mobjxl.Caption = "我的Excel" For Each c In mobjxl.CommandBars
c.Enabled = True
Next mlngXLHwnd = FindWindow("XLMAIN", vbNullString)
SetParent mlngXLHwnd, Me.hWnd lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle If Not Me.WindowState = vbMinimized Then
MoveWindow mlngXLHwnd, (Picture1.Width / Screen.TwipsPerPixelX + 4), _
0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), -1
End If
MoveWindow mlngXLHwnd, 0, 0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), 1
Set mobjxlBook = mobjxl.Workbooks().Add
Set mobjxlSheet = mobjxlBook.Worksheets("sheet1")
mobjxl.Application.Visible = True
End SubPrivate Sub form_QueryUnload(Cancel As Integer, UnloadMode As Integer) On Error Resume Next
Dim c As Object
mobjxl.Visible = False
mobjxl.DisplayAlerts = False '不显示是否保存对话框
For Each c In mobjxl.CommandBars
c.Enabled = True
Next
' 隐藏行号和列号
mobjxl.ActiveWindow.DisplayHeadings = True
' 隐藏表单标签
mobjxl.ActiveWindow.DisplayWorkbookTabs = False
' 显示状态栏
mobjxl.Application.DisplayStatusBar = True
' 要将Excel设置成最大化
mobjxl.WindowState = xlMaximized
mobjxl.Quit Set mobjxlQuery = Nothing
Set mobjxlSheet = Nothing
Set mobjxlBook = Nothing
Set mobjxl = Nothing
DoEvents
'取消Excel作为当前窗体的子窗体
SetParent mlngXLHwnd, 0
End SubPrivate Sub form_Resize()
If Not Me.WindowState = vbMinimized Then
MoveWindow mlngXLHwnd, 0, _
(Picture1.Height / Screen.TwipsPerPixelY), _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY - 15), -1
End IfEnd SubPrivate Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
MoveWindow mlngXLHwnd, (Picture1.Width / Screen.TwipsPerPixelX), 0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY - 1000), 1End Sub在模块里加如下代码:
Option ExplicitPublic Const GWL_STYLE = (-16)
Public Const WS_DLGFRAME = &H400000
Public Const WS_CHILD = &H40000000
Public Const WS_CHILDWINDOW = (WS_CHILD)
Public Const WS_VSCROLL = &H200000
Public Const WS_CAPTION = &HC00000
Public Const WS_BORDER = &H800000
Public Const WS_THICKFRAME = &H40000
Public Const WS_SIZEBOX = WS_THICKFRAME
Public Const msoGradientHorizontal = 1Public Const chrWidth = 340
Public Const chrHeight = 270Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePublic Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function GetParent Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public 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
Public 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
Public 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
说明:1、在运行代码之前先在VB窗体里加一个Picture控件 并将Align属性设成1-Align Top
2、加入如下代码后, 按F5运行
在窗体里加如下代码:
Dim mobjxl As Excel.Application
Dim mobjxlBook As Excel.Workbook
Dim mobjxlSheet As Excel.Worksheet
Dim mobjxlQuery As Excel.QueryTablePrivate mlngXLHwnd As Long
Dim blnShow As Boolean
Dim lngStyle As LongPrivate Sub Form_Load()
Dim lngStyle As Long
Dim c As Object
Dim lngStatusBar As Long Set mobjxl = New Excel.Application
mobjxl.Caption = "我的Excel" For Each c In mobjxl.CommandBars
c.Enabled = True
Next mlngXLHwnd = FindWindow("XLMAIN", vbNullString)
SetParent mlngXLHwnd, Me.hWnd lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle If Not Me.WindowState = vbMinimized Then
MoveWindow mlngXLHwnd, (Picture1.Width / Screen.TwipsPerPixelX + 4), _
0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), -1
End If
MoveWindow mlngXLHwnd, 0, 0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), 1
Set mobjxlBook = mobjxl.Workbooks().Add
Set mobjxlSheet = mobjxlBook.Worksheets("sheet1")
mobjxl.Application.Visible = True
End SubPrivate Sub form_QueryUnload(Cancel As Integer, UnloadMode As Integer) On Error Resume Next
Dim c As Object
mobjxl.Visible = False
mobjxl.DisplayAlerts = False '不显示是否保存对话框
For Each c In mobjxl.CommandBars
c.Enabled = True
Next
' 隐藏行号和列号
mobjxl.ActiveWindow.DisplayHeadings = True
' 隐藏表单标签
mobjxl.ActiveWindow.DisplayWorkbookTabs = False
' 显示状态栏
mobjxl.Application.DisplayStatusBar = True
' 要将Excel设置成最大化
mobjxl.WindowState = xlMaximized
mobjxl.Quit Set mobjxlQuery = Nothing
Set mobjxlSheet = Nothing
Set mobjxlBook = Nothing
Set mobjxl = Nothing
DoEvents
'取消Excel作为当前窗体的子窗体
SetParent mlngXLHwnd, 0
End SubPrivate Sub form_Resize()
If Not Me.WindowState = vbMinimized Then
MoveWindow mlngXLHwnd, 0, _
(Picture1.Height / Screen.TwipsPerPixelY), _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY - 15), -1
End IfEnd SubPrivate Sub mobjXL_WindowResize(ByVal Wb As Excel.Workbook, ByVal Wn As Excel.Window)
MoveWindow mlngXLHwnd, (Picture1.Width / Screen.TwipsPerPixelX), 0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY - 1000), 1End Sub在模块里加如下代码:
Option ExplicitPublic Const GWL_STYLE = (-16)
Public Const WS_DLGFRAME = &H400000
Public Const WS_CHILD = &H40000000
Public Const WS_CHILDWINDOW = (WS_CHILD)
Public Const WS_VSCROLL = &H200000
Public Const WS_CAPTION = &HC00000
Public Const WS_BORDER = &H800000
Public Const WS_THICKFRAME = &H40000
Public Const WS_SIZEBOX = WS_THICKFRAME
Public Const msoGradientHorizontal = 1Public Const chrWidth = 340
Public Const chrHeight = 270Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePublic Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function GetParent Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public 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
Public 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
Public 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
解决方案 »
- 求高人指点 基址为.exe+偏移量的内存数据如何读取?
- 如保使用vb代码 建立SQL解发器 最好有完整实例(for insert)
- 用VB做了个插件,可出现“Activex部件不能创建对象”的错误提示,求助
- 求助:如果在表格上实现划线功能?
- 如何将两个DBF文件合并为一个?
- 给大家汇报一下减肥成果,顺便说一下经验,非广告
- 保存出错, 怎么改?高手看看啊
- 给一个网址,怎么读它的源代码
- 1.程序打包后怎样使应用程序的图标变成我想要的图标?2。怎样做卸载程序??3.为什么有的人可以放200分,我只能放100?
- 大家帮忙看看这几个控件用什么做的 谢谢
- 有关日期计算以及空操作的问题!!!
- 怎么样可以得到Treeview的滚动事件?急!!
但是不知道是不是能够满足你的要求
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOXxor在这里起什么作用?
Dim lngStyle As Long
Dim c As Object
Dim lngStatusBar As Long Set mobjXL = New Excel.Application
mobjXL.Caption = "我的Excel" If Not Me.WindowState = vbMinimized Then
MoveWindow mlngXLHwnd, (Picture1.Width / Screen.TwipsPerPixelX + 4), _
0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), -1
End If
MoveWindow mlngXLHwnd, 0, 0, _
(Me.ScaleWidth / Screen.TwipsPerPixelX), _
(Me.ScaleHeight / Screen.TwipsPerPixelY), 1
Set mobjxlBook = mobjXL.Workbooks().Add
Set mobjxlSheet = mobjxlBook.Worksheets("sheet1")
mobjXL.Application.Visible = True
mlngXLHwnd = FindWindow("XLMAIN", vbNullString)
SetParent mlngXLHwnd, Me.hWnd
lngStyle = GetWindowLong(mlngXLHwnd, GWL_STYLE)
lngStyle = lngStyle Xor WS_CAPTION
lngStyle = lngStyle Xor WS_SIZEBOX SetWindowLong mlngXLHwnd, GWL_STYLE, lngStyle
For Each c In mobjXL.CommandBars
c.Enabled = True
Next
End Sub