标题:VB6窗体中插入一个excel表格并显示数据
只看楼主
caonao
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-9-15
 问题点数:0 回复次数:9 
VB6窗体中插入一个excel表格并显示数据
请问,在VB6窗体中插入一个excel表格,制作一个命令按扭,点击命令按扭后窗体中的excel表格range("b10")的值为88这个代码怎样写,谢谢!
搜索更多相关主题的帖子: excel表格 制作 
2015-03-19 22:12
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
1.昨天嘗試拉個OLE控件選擇excel格式文件,就把excel內嵌進VB了.(2007)
2.以前試過用VB創個excel,寫入資料,並依資料制作一个命令按扭,再遊VB將宏寫入excel中對應一个命令按扭,最後再將excel嵌入到VB的Form中。(2003的)
3.以前看過用excel做出“制作一个命令按扭,点击命令按扭后窗体中的excel表格range("b10")的值为88”,再將檔案存成範本*.xlt,再用VB使用範本生成excel檔。
  自己再去把excel內嵌進Form裡。
4.等版主釋出其他方法。

不要選我當版主
2015-03-20 06:52
caonao
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-9-15
得分:0 
回复 2楼 wube
写这个问题的目的是想知道怎样激活窗体中的Excel表格,用 OLE1.DoVerb 0 '激活Excel时窗体与表格之间有个白色空白我总感到不爽,我想能否在在窗体的通用事件中加段程序让窗体中的Excel表格处于激活状态而不出现窗体与表格之间白色空白,请老师指点,谢谢!
当然添加控件用OLE1.DoVerb 0'激活Excel是很容易的:
Private Sub Command1_Click()
    OLE1.DoVerb 0'激活Excel
    OLE1.object.Parent.Cells(10, 2) = "88"
End Sub

[ 本帖最后由 caonao 于 2015-3-20 10:46 编辑 ]
2015-03-20 10:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
http://blog.

白白的是指?




不要選我當版主
2015-03-20 17:03
caonao
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-9-15
得分:0 
回复 4楼 wube
我运行一个按钮时,excel就被激活,此时就好像excel表格从窗体中跳了出来,形成窗体下边和右边各一条白边,也就是说窗体和表格脱节,虽然用OLE1.Refresh可以复位但总感到不爽,我想要的效果就是像MSFlexgrid控件做好表格后怎样运行其表格都不与窗体分离,形成窗体下边和右边各一条白边不知为什么,请指点,谢谢!

7.zip (65.27 KB)
2015-03-20 21:16
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
以下是引用caonao在2015-3-20 21:16:09的发言:

我运行一个按钮时,excel就被激活,此时就好像excel表格从窗体中跳了出来,形成窗体下边和右边各一条白边,也就是说窗体和表格脱节,虽然用OLE1.Refresh可以复位但总感到不爽,我想要的效果就是像MSFlexgrid控件做好表格后怎样运行其表格都不与窗体分离,形成窗体下边和右边各一条白边不知为什么,请指点,谢谢!


確實我試的時候直接拉也是這樣,但是照上面的網址裡的代碼寫就不會了,至於原因我就沒有深究了,
我家電腦裡沒VB無法試。

不要選我當版主
2015-03-20 22:24
caonao
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-9-15
得分:0 
回复 6楼 wube
连接上面的網址总是出错,请上传一份代码给我好吗,谢谢!
2015-03-21 00:50
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:0 
全貼了
---------------------------------------------------------------------------------------
藉由 Microsoft 的物件連結與內嵌 (OLE) 技術,可以將 Office 文件插入 Visual Basic 中。OLE 的設計,是要讓某個應用程式利用使用者方便的方式,裝載屬於另一個應用程式的物件,
但是相關的應用程式並不需要知道對方的內部詳細資料。Visual Basic 提供 OLE 容器控制項,可讓 Visual Basic 程式設計人員將 OLE 物件加入表單。

一旦內嵌物件之後,大多數 OLE 伺服器都支援 Automation,可讓主應用程式以程式設計的方式變更或操作物件。若要取得 Automation 物件的參照,請使用 OLE 容器的 Object 屬性。這個
屬性會傳回最符合特定之內嵌項目的 Automation 物件。

回此頁最上方
建立裝載 Excel 活頁簿的 Visual Basic 應用程式

啟動 Visual Basic 並建立新的標準專案。根據預設會建立 Form1。
從控制工具箱中,新增三個命令按鈕至 Form1。然後新增一個 OLE 容器控制項的執行個體。將 OLE 容器控制項放在表單上後,它會提示您選擇要插入的物件類型。在這個範例中,您必須動態地新增
物件,因此請按一下 [取消] 以關閉對話方塊,不新增物件。
在 Form1 的 [程式碼] 視窗中,新增下列程式碼:
 Option Explicit

Dim oBook As Object
Dim oSheet As Object

Private Sub Command1_Click()
   On Error GoTo Err_Handler

 ' Create a new Excel worksheet...
   OLE1.CreateEmbed vbNullString, "Excel.Sheet"
   
 ' Now, pre-fill it with some data you
 ' can use. The OLE.Object property returns a
 ' workbook object, and you can use Sheets(1)
 ' to get the first sheet.
   Dim arrData(1 To 5, 1 To 5) As Variant
   Dim i As Long, j As Long
   
   Set oBook = OLE1.object
   Set oSheet = oBook.Sheets(1)
   
 ' It is much more efficient to use an array to
 ' pass data to Excel than to push data over
 ' cell-by-cell, so you can use an array.
 
 ' Add some column headers to the array...
   arrData(1, 2) = "April"
   arrData(1, 3) = "May"
   arrData(1, 4) = "June"
   arrData(1, 5) = "July"
   
 ' Add some row headers...
   arrData(2, 1) = "John"
   arrData(3, 1) = "Sally"
   arrData(4, 1) = "Charles"
   arrData(5, 1) = "Toni"
   
 ' Now add some data...
   For i = 2 To 5
      For j = 2 To 5
         arrData(i, j) = 350 + ((i + j) Mod 3)
      Next j
   Next i
   
 ' Assign the data to Excel...
   oSheet.Range("A3:E7").Value = arrData
   
   oSheet.Cells(1, 1).Value = "Test Data"
   oSheet.Range("B9:E9").FormulaR1C1 = "=SUM(R[-5]C:R[-2]C)"
   
 ' Do some auto formatting...
   oSheet.Range("A1:E9").Select
   oBook.Application.Selection.AutoFormat
   
   Command1.Enabled = False
   Command2.Enabled = False
   Command3.Enabled = True
   Exit Sub
   
Err_Handler:
   MsgBox "An error occurred: " & Err.Description, vbCritical
End Sub

Private Sub Command2_Click()
   On Error GoTo Err_Handler
      
 ' Create an embedded object using the data
 ' stored in Test.xls.<?xm-insertion_mark_start author="v-thomr" time="20070327T040420-0600"?> If this code is run in Microsoft Office
 ' Excel 2007, <?xm-insertion_mark_end?><?xm-deletion_mark author="v-thomr" time="20070327T040345-0600" data=".."?><?xm-insertion_mark_start author="v-thomr" time="20070327T040422-0600"?>change the file name to Test.xlsx.<?xm-insertion_mark_end?>
   OLE1.CreateEmbed "C:\Test.xls"
   
   Command1.Enabled = False
   Command2.Enabled = False
   Command3.Enabled = True
   Exit Sub
   
Err_Handler:
   MsgBox "The file 'C:\Test.xls' does not exist" & _
          " or cannot be opened.", vbCritical
End Sub

Private Sub Command3_Click()
   On Error Resume Next
   
 ' Delete the existing test file (if any)...
   Kill "C:\Test.xls"
   
 ' Save the file as a native XLS file...
   oBook.SaveAs "C:\Test.xls"
   Set oBook = Nothing
   Set oSheet = Nothing
   
 ' Close the OLE object and remove it...
   OLE1.Close
   OLE1.Delete
   
   Command1.Enabled = True
   Command2.Enabled = True
   Command3.Enabled = False
End Sub

Private Sub Form_Load()
   Command1.Caption = "Create"
   Command2.Caption = "Open"
   Command3.Caption = "Save"
   Command3.Enabled = False
End Sub
                    
按 F5 鍵以執行程式。按一下 [建立] 按鈕。這會內嵌新的工作表,並自動化 Excel 以直接新增資料至工作表。請注意,如果您按兩下物件,它會就地啟動,而且使用者可以直接編輯資料。
接著按一下 [儲存],將資料儲存至檔案並關閉 OLE 物件。[開啟] 按鈕可讓您開啟先前儲存之檔案的複本。
 

回此頁最上方
建立裝載 Word 文件的 Visual Basic 應用程式

啟動 Visual Basic 並建立新的標準專案。根據預設會建立 Form1。
從控制工具箱中,新增三個命令按鈕至 Form1。然後新增一個 OLE 容器控制項的執行個體。將 OLE 容器控制項放在表單上後,它會提示您選擇要插入的物件類型。在這個範例中,我們必須動態
地新增物件,因此請按一下 [取消] 以關閉對話方塊,不新增物件。
在 Form1 的 [程式碼] 視窗中,新增下列程式碼:
 Option Explicit

Dim oDocument As Object

Private Sub Command1_Click()
   On Error GoTo Err_Handler

 ' Create a new Word Document...
   OLE1.CreateEmbed vbNullString, "Word.Document"
   
 ' Add some text to the document. The OLE.Object
 ' property returns the document object...
   Set oDocument = OLE1.object

   
   oDocument.Content.Select
   With oDocument.Application.Selection
   
   ' Add a heading at the top of the document...
      .Style = oDocument.Styles("Heading 1")
      .Font.Color = &HFF0000
      .TypeText "Blue Sky Airlines"
      .ParagraphFormat.Alignment = 1 '[wdAlignParagraphCenter]
      .TypeParagraph
      .TypeParagraph
      
    ' Now add some text...
      .TypeText "Dear Mr. Smith,"
      .TypeParagraph
      .TypeParagraph
      .TypeText "Thank you for your interest in our current fares " & _
                "from Oakland to Sacramento. We guarantee to be " & _
                "the lowest price for local flights, or we'll " & _
                "offer to make your next flight FREE!"
      .TypeParagraph
      .TypeParagraph
      .TypeText "The current fare for a flight leaving Oakland " & _
                "on October 4, 1999 and arriving in Sacramento " & _
                "the same day is $54.00."
      .TypeParagraph
      .TypeParagraph
      .TypeText "We hope you will choose to fly Blue Sky Airlines."
      .TypeParagraph
      .TypeParagraph
      .TypeText "Sincerely,"
      .TypeParagraph
      .TypeParagraph
      .TypeParagraph
      .TypeText "John Taylor"
      .TypeParagraph
      .Font.Italic = True
      .TypeText "Regional Sales Manager"
      .TypeParagraph
      
   End With
      
 ' Zoom to see entire document...
   OLE1.SizeMode = 3
   OLE1.DoVerb -1
   
   Command1.Enabled = False
   Command2.Enabled = False
   Command3.Enabled = True
   Exit Sub

   
Err_Handler:
   MsgBox "An error occurred: " & Err.Description, vbCritical
End Sub

Private Sub Command2_Click()
   On Error GoTo Err_Handler
      
 ' Create an embedded object using the data
 ' stored in Test.doc.<?xm-insertion_mark_start author="v-thomr" time="20070327T040719-0600"?> If this code is run in Microsoft Office
 ' Word 2007, change the file name to Test.docx.<?xm-insertion_mark_end?><?xm-deletion_mark author="v-thomr" time="20070327T040717-0600" data=".."?>
   OLE1.CreateEmbed "C:\Test.doc"
   
   Command1.Enabled = False
   Command2.Enabled = False
   Command3.Enabled = True
   Exit Sub
   
Err_Handler:
   MsgBox "The file 'C:\Test.doc' does not exist" & _
          " or cannot be opened.", vbCritical
End Sub

Private Sub Command3_Click()
   On Error Resume Next
   
 ' Delete the existinf test file (if any)...
   Kill "C:\Test.doc"
   
 ' Save the file as a native Word DOC file...
   oDocument.SaveAs "C:\Test.doc"
   Set oDocument = Nothing
   
 ' Close the OLE object and remove it...
   OLE1.Close
   OLE1.Delete
   
   Command1.Enabled = True
   Command2.Enabled = True
   Command3.Enabled = False
End Sub


Private Sub Form_Load()
   Command1.Caption = "Create"
   Command2.Caption = "Open"
   Command3.Caption = "Save"
   Command3.Enabled = False
End Sub
                    
按 F5 鍵以執行程式。按一下 [建立] 按鈕。這會內嵌新的文件,並自動化 Word 以直接新增資料至文件。請注意,如果您按兩下物件,它會就地啟動,而且使用者可以直接編輯資料。
接著按一下 [儲存],將資料儲存至檔案並關閉 OLE 物件。[開啟] 按鈕可讓您開啟先前儲存之檔案的複本。
回此頁最上方
使用 OLE 容器時的考量

如果您是內嵌現有的檔案,在 OLE 容器內所看到的資料就是檔案中之資料的複本。您所做的任何變更並不會自動儲存至同一個檔案。雖然您可以使用類似上面的技巧將結果存回特定的檔案
,但是並非所有的 OLE 伺服器都支援這項功能。這並不是正常的 OLE 物件行為。如果您是「連結」檔案‧則不能就地啟動物件。而是會在使用者按兩下物件時,在伺服器應用程式的視窗中
開啟物件。只有內嵌的物件可以就地啟動。OLE 容器控制項可以感知資料繫結。如果您有 Access 97 或 Access 2000 資料庫,就可以將控制項繫結至資料庫中的 OLE 物件欄位。顯示
表單時,會從資料庫取出並顯示資料,以供使用者編輯。使用者所做的任何編輯變更,都會在關閉 OLE 物件時自動存回資料庫。

若要讓 OLE 容器控制項產生資料繫結,請新增一個 Visual Basic 資料控制項,並將其 DatabaseName 屬性設定至資料庫路徑。然後將 RecordSource 設定為資料庫中現有的資料表
。使用 OLE 控制項的 DataSource 屬性,將控制項繫結至 Visual Basic 資料控制項,然後設定 DataField 屬性,以指向包含 OLE 物件之資料錄集內的特定欄位。其餘的工作就交
給 Visual Basic。就地啟動容器時顯示之影線框線的大小和位置,是由您為 OLE 控制項選取之物件大小和選項決定。顯示這個框線是要標記編輯視窗的界限。編輯視窗的界限往往與 OLE
容器本身的界限不一致;這種行為對 OLE 物件而言是正常的。編輯視窗不能從 Visual Basic 以程式設計的方式改變。有些 Automation 方法必須在就地啟動物件時才能正確工作。如果
要以程式設計的方式啟動 OLE 物件,請使用 DoVerb 方法,並指定 vbOLEShow (-1) 為其動作。您可以設定表單的 NegotiateMenus 屬性,以決定是否在容器中顯示連結或內嵌物件的
功能表。如果子表單的 NegotiateMenus 屬性設定為 True,而且容器定義了功能表列,則在啟動物件時,會將物件的功能表放在容器的功能表列上。如果容器沒有功能表列,或者
NegotiateMenus 屬性設定為 False,則在啟動物件時,並不會顯示物件的功能表。請注意,NegotiateMenus 屬性並不會套用至 MDI 表單,因此 MDI 表單的功能表不能與啟動之物件
的功能表合併。為了說明功能表交涉,請利用您在前一節建立的範例應用程式執行下列作業:

執行應用程式,然後按一下 [建立] 按鈕,將新文件內嵌到 OLE 容器中。
用滑鼠右鍵按一下 OLE 容器,然後選取 [編輯] 以就地啟動物件。請注意,這會顯示物件應用程式的功能表,因為 Form1 的 NegotiateMenus 屬性預設設定為 True。
關閉表單以結束應用程式。
選取 Form1,然後按一下 [工具] 功能表上的 [功能表編輯器]。
建立新的最上層功能表,標題為 File,名稱為 mnuFile。將這個功能表的 NegotiatePosition 屬性設定為「1-Left」。建立一個功能表項目,標題為 Open,名稱為 mnuOpen。
按一下 [確定] 以關閉功能表編輯器。
再次執行應用程式,然後按一下 [建立] 按鈕,將新文件內嵌至 OLE 容器中。
用滑鼠右鍵按一下 OLE 容器,然後選取 [編輯] 以就地啟動物件。請注意,Form1 的功能表已經和物件應用程式的功能表合併。
Visual Basic 不允許您在新增時控制功能表的合併程序,或者變更伺服器的功能表項目。但是,您可以使用類似下列的程式碼,透過 Automation 變更或修改 Office 應用程式的功能表:
  ' This code disables the Insert|Object item on the merged menu...
   Dim oMenuBar As Object
   Set oMenuBar = oBook.("Worksheet Menu Bar")
   oMenuBar.Controls("&Insert").Controls("&Object...").Enabled = False
                        
請注意,有些變更必須在物件就地啟動之前進行,否則變更不會在合併後的功能表中顯示。

注意 這個項目並不適用於 Microsoft Office Excel 2007 或 Microsoft Office Word 2007。
Visual Basic 目前並不支援指派工具列空間。因此,啟動物件時正常是不會顯示停駐的工具列。不過,可以利用自動化顯示浮動的工具視窗:
    OLE1.DoVerb -1 '[vbOLEShow]
   With oBook.("Standard")
      .Position = 4 '[msoBarFloating]
      .Visible = True
   End With

                    
注意 這個項目並不適用於 Microsoft Office Excel 2007 或 Microsoft Office Word 2007。
針對要求物件永遠保持就地啟動的程式,Microsoft 提供了 ActiveX Documents 技術。並非所有的 OLE 伺服器都屬於 ActiveX Document 伺服器;Microsoft Word、Microsoft Excel
及 Microsoft PowerPoint 是 ActiveX Document 伺服器。

Visual Basic 並不支援裝載 ActiveX Documents 的原生控制項。不過,Internet Explorer (3.0 版和更高的版本) 所附的 WebBrowser 控制項支援這種形式的就地 Containment。
您可以使用這個控制項將 Office 文件開啟為 ActiveX 文件。如需使用 WebBrowser 控制項的詳細資訊,請參閱下面的文件:243058  (http://support. )
如何使用 WebBrowser 控制項開啟 Office 文件OLE 容器的 SaveToFile 方法會建立一個可以在 OLE 容器中開啟的檔案。不過,利用 OLE 容器的 SaveToFile 方法儲存的檔案,不能直接在
對應的 Office 應用程式中開啟。如果您要將內嵌的文件儲存到磁碟,以便讓文件能夠在目標應用程式中開啟,請使用應用程式的文件 SaveAs 方法:
 OLE1.object.SaveAs ("C:\MyNewFile.doc")

不要選我當版主
2015-03-21 01:16
caonao
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-9-15
得分:0 
回复 8楼 wube
慢慢学习消化,谢谢老师的热心帮助!

[ 本帖最后由 caonao 于 2015-3-21 15:18 编辑 ]
2015-03-21 09:53
lwb514
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-11-5
得分:0 
回复 8楼 wube
感谢大神帮助,因为你,我注册了!
2021-11-05 22:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442835-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069735 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved