当前位置:首页 -> 焦点新闻

使用Excel VBA来访问WEB页面

2005/4/24 9:39:17       
   以前有过一个VB用户他想知道如何能在一个Excel电子数据表中自动打开一个URL链接以及怎样才能在其中复制信息。他注意到在他的应用程序有一些特征可以使这个问题简单化,“当我在Excel中打开URL链接的时候,我所需要提取的信息通常都位于相同的单元格中。例如,Sheet3中的单元格G13将会总是显示客户的名字”。同时他也注意到他的应用程序可能引用了数以千计的WEB页面,所以,性能也是一个值得关注的问题。






    注意:上面实例中的图片是以Excel 2003中的VBA开发的。在VB 6中实现,使用VB的三层架构而不是VB.NET。测试工作已经完成以确保程序代码能够兼容于Excel 2003中的VBA,但是仍然可能有一些兼容性的BUG存在。

    准备开始实现这个项目的一个方法就是在Excel中记录几个宏(Macro)并且查看Excel生成的这些代码是如何来解决这些问题的。所以,为了这样做,我首先创建一个Excel电子数据表格并且其中包含有一些测试用的实例数据,而且需要手工完成选择这些实例数据的操作。以下这段代码就是被Excel所记录下来的:
Sub Macro1()
    Range("A2").Select
    Selection.Hyperlinks(1).Follow _
        NewWindow:=False, AddHistory:=True
    Sheets("ResultsReports").Select
    Range("A2").Select
    ActiveSheet.Paste
End Sub


    这看起来很好,除了我们在这段代码里面还没有加入从Web页面选择文本的操作之外。当然,这个操作不会被记录,这是因为Excel它只能记录数据表的操作。所以,通常我们没有办法直接从Web页面上查找我们所需要的数据。但就象我们在文章以后部分将要看到的那样,这事实上是可以的。为了完成这件事,你可以将Internet Explorer浏览器载入成为一个对象,然后查找在Web页面上你所需要的任何文本。在开始阅读后面部分的文章之前,我们假设你还不知道有关使用这个方法的一些事情。我们需要一个更好的方法来完成这个任务。



    如果你将Web页面打开为一个数据表的形式,Excel它将会自动的将Web页面导入到你的本地工作簿中,然后你就可以查找其中的内容,并且甚至可以记录在其中的操作。让我们来尝试做一下。这里有一个窍门就是在你尝试打开Web页面之前,你要记住将URL复制到剪贴板中的名字。Excel它没有一个直接的方法可以将Web页面打开成为一个文件。所以你必须首先将Web页面的URL地址复制到剪贴板中,然后将其粘贴到Excel的打开对话框中。



    第二个窍门是你要意识到Excel它会自动的将我们所查找的Web页面中的文章名字复制到数据表格中的单元格中。Excel它会通过复制在HTML文档中表格的格式来完成这件事。所以我们需要分离这些单元格并且通过重新选择真正位于这些单元格中的数据来复制我们想要的数据。

一旦我们注意到以上这些窍门后,我们就可以得到以下所列出的这些结果:


Sub Macro1()
    Range("A2").Select
    Selection.Copy
    Application.CutCopyMode = False
    Workbooks.Open Filename:= _
        "http://visualbasic.about.com/library/bldykblkscpa.htm"
    Range("B10:C10").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 1
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
    Selection.UnMerge
    Range("B10").Select
    Selection.Copy
    ActiveWorkbook.Close
    Sheets("ResultsReports").Select
    Range("A2").Select
    ActiveSheet.Paste
End Sub


    这样看起来更好了。我们就可以使用这个来完成工作。现在我们就可以在其中加入某些所需要的循环逻辑来完成这个程序了。最后我们所看到的结果已经展示在文章最前面的图片中了。下面就是生成这些结果的一些代码:

Sub CopyWebData()
'
' CopyWebData Macro
'
Dim InCellLoc As String
Dim InCellCol As String
Dim InCellRow As String
Dim NameValue As String
Dim AddressValue As String
Dim OutCellLoc As String
Dim OutCellCol As String
Dim OutCellRow As String
 
InCellCol = "B"
InCellRow = "2"
OutCellRow = "1"
InCellLoc = InCellCol & InCellRow
Sheets("WebAddresses").Select
Do While Range(InCellLoc).Value <> ""
    Sheets("WebAddresses").Select
    Workbooks.Open Range(InCellLoc).Value
    Range("B10:C10").Select
    Selection.UnMerge
    ArticleNameValue = Range("B10").Value
    ActiveWorkbook.Close (False)
    Windows("Start.xls").Activate
    Sheets("ResultsReports").Select
    OutCellRow = CStr(CInt(OutCellRow) + 1)
    OutCellCol = "A"
    OutCellLoc = OutCellCol & OutCellRow
    Range(OutCellLoc).Value = ArticleNameValue
    Sheets("WebAddresses").Select
    InCellRow = CStr(CInt(InCellRow) + 1)
    InCellLoc = InCellCol & InCellRow
Loop
End Sub



煤炭网版权与免责声明:

凡本网注明"来源:煤炭网www.coal.com.cn "的所有文字、图片和音视频稿件,版权均为"煤炭网www.coal.com.cn "独家所有,任何媒体、网站或个人在转载使用时必须注明"来源:煤炭网www.coal.com.cn ",违反者本网将依法追究责任。

本网转载并注明其他来源的稿件,是本着为读者传递更多信息的目的,并不意味着本网赞同其观点或证实其内容的真实性。其他媒体、网站或个人从本网转载使用时,必须保留本网注明的稿件来源,禁止擅自篡改稿件来源,并自负版权等法律责任。违反者本网也将依法追究责任。 如本网转载稿件涉及版权等问题,请作者在两周内尽快来电或来函联系。

  • 用手机也能做煤炭生意啦!
  • 中煤远大:煤炭贸易也有了“支付宝”
  • 中煤开启煤炭出口贸易人民币结算新时代
  • 下半年煤炭市场依然严峻
市场动态

网站技术运营:北京真石数字科技股份有限公司、喀什中煤远大供应链管理有限公司、喀什煤网数字科技有限公司

总部地址:北京市丰台区总部基地航丰路中航荣丰1层

京ICP备18023690号-1      京公网安备 11010602010109号


关注中煤远大微信
跟踪最新行业资讯