既然學校已經到了夏季,我有一些空閒時間,我選擇創建個人圖書庫存系統。在研究中,我遇到了Jules的這篇文章:ISBN -> bookdata Lookup to fill in a databaseVBA訪問:XML,錯誤'91':對象變量或塊變量未設置?
當試圖執行我的代碼時,我在使用Set xmlhttp = CreateObject("MSXML2.xmlhttp")
時首先得到了Run-time error: Access is denied
。我發現一條帖子(http://social.msdn.microsoft.com/Forums/en-US/1abda1ce-e23c-4d0e-bccd-a323aa7f2ea5/access-is-denied-while-using-microsoftxmlhttp-to-get-a-url-link-in-vbscript-help),表示要將該行更改爲Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
。
我現在收到Run-time error '91': Object variable or With block variable not set.
人對如何解決這個任何想法?我新來使用XML。爲了測試,我使用了立即窗口並輸入testlookup("0007102968")
。
模塊SearchISBN:
Option Compare Database
Option Explicit
Public Function testlookup(value As String)
Dim book
Set book = New isbn
book.Lookup (value)
Debug.Print book.Title
Debug.Print book.PublisherText
End Function
類模塊ISBN:
Option Compare Database
Option Explicit
'https://stackoverflow.com/questions/2454348/isbn-bookdata-lookup-to-fill-in-a-database
' AccessKeys created with account on ISBNDB.com
' Reference in (Tools->Refernces) made to "Microsoft XML"
Dim strTitle As String
Dim strAuthor As String
Dim strPublisher As String
Dim strSummary As String
Dim strPrice As Currency
Dim strISBN10 As Integer
Dim strISBN13 As Integer
Dim strNotes As String
'Dim strPersRating As String
Dim accessKey As String
Private Sub Class_Initialize()
' Set AccessKey value of ISBNDB API
accessKey = "NSOY388Z"
End Sub
Property Get Title() As String
Title = strTitle
End Property
Property Get Author() As String
Author = strAuthor
End Property
Property Get Publisher() As String
Publisher = strPublisher
End Property
Property Get Summary() As String
Summary = strSummary
End Property
Property Get Price() As Currency
Price = strPrice
End Property
Property Get ISBN10() As Integer
ISBN10 = strISBN10
End Property
Property Get ISBN13() As Integer
ISBN13 = strISBN13
End Property
Property Get Notes() As String
Notes = strNotes
End Property
Public Function Lookup(isbn As String) As Boolean
Lookup = False
' Dim xmlhttp
' Dim strTest As String
' strTest = "https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn
' Debug.Print strTest
' 'Run-time error, access is denied
' ' Set xmlhttp = CreateObject("MSXML2.xmlhttp")
' Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
' xmlhttp.Open "Get", strTest, False '"https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn, False
' xmlhttp.send
' Debug.Print xmlhttp.responseText
' Debug.Print "Response: " & xmlhttp.responseXML.XML '
' Dim xmldoc
'' Set xmldoc = CreateObject("Microsoft.XMLDOM")
'' xmldoc.loadXML (xmlhttp.responseXML.XML)
'' ERROR
'' If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") = 0) Then
'' MsgBox "Invalid ISBN or not in database"
'' Exit Function
'' End If
'' If (xmldoc.selectSingleNode("//BookList").getAttribute("total_results") > 1) Then
'' MsgBox "Caution, got more than one result!"
'' Exit Function
'' End If
'
' Set xmldoc = New DOMDocument
' xmldoc.loadXML (xmlhttp.responseText)
'
'
'
' strTitle = xmldoc.selectSingleNode("//BookData/TitleLong").Text
' strAuthor = xmldoc.selectSingleNode("//BookData/AuthorsText").Text
' strPublisher = xmldoc.selectSingleNode("//BookData/PublisherText").Text
' strNotes = xmldoc.selectSingleNode("//BookData/Notes").Text
' strSummary = xmldoc.selectSingleNode("//BookData/Summary").Text
'
Dim xmlhttp As MSXML2.xmlhttp
Dim xmldoc As MSXML2.DOMDocument
Dim XMLNodes As MSXML2.IXMLDOMNodeList
Dim xmlElement As MSXML2.IXMLDOMElement
Dim bookTitle As String
Dim myErr As MSXML2.IXMLDOMParseError
Dim strTest As String
strTest = "https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn
' Fetch the XML - THIS IS WHERE I AM NOW GETTING ERROR
xmlhttp.Open "Get", strTest, False '"https://isbndb.com/api/books.xml?access_key=" & accessKey & "&results=texts&index1=isbn&value1=" & isbn, False
xmlhttp.send
Set xmldoc = New DOMDocument
xmldoc.loadXML (xmlhttp.responseText)
Set XMLNodes = xmldoc.getElementsByTagName("BookData")
Dim i As Integer
' Get the data
For i = 1 To XMLNodes.length
Set xmlElement = XMLNodes.nextNode
bookTitle = xmlElement.getElementsByTagName("Title").Item(0).nodeTypedValue
Next
Lookup = True
End Function
編輯:仍然得到錯誤,但我現在越來越在即時窗口的響應:
https://isbndb.com/api/books.xml?access_key=NSOY388Z&results=texts&index1=isbn&value1=0007102968
Response:
<?xml version="1.0" encoding="UTF-8"?>
<ISBNdb server_time="2013-06-20T16:20:00Z">
<BookList total_results="1" page_size="10" page_number="1" shown_results="1">
<BookData book_id="the_times_book_of_quotations" isbn="0007102968" isbn13="9780007102969">
<Title>The Times book of quotations</Title>
<TitleLong></TitleLong>
<AuthorsText></AuthorsText>
<PublisherText publisher_id="times_books">[Glasgow] : Times Books : 2000.</PublisherText>
<Summary></Summary>
<Notes>Includes index.</Notes>
<UrlsText></UrlsText>
<AwardsText></AwardsText>
</BookData>
</BookList>
</ISBNdb>
https請求的瀏覽器結果:
在我的代碼中,我檢查0或> 1的結果。我試過你的,但是我在'for'循環中遇到問題。 myChildren定義在哪裏? –
我的錯誤;更新了代碼以'myChildren'替換'myElement'。現在應該工作 – Jaycal
這有助於一些事情,但現在在我的類模塊isbn我得到了錯誤91在以下行:'xmlhttp.Open「獲取」,strTest,False「。有任何想法嗎? –