VBA-Zugriff: XML Error '91': Objektvariable oder With-Blockvariable nicht festgelegt?
Nun, die Schule ist aus für den Sommer und ich habe einige freie Zeit, die ich gewählt haben, erstellen Sie ein persönliches Buch, das Inventar-system. Während der recherche stieß ich auf diesen Beitrag von Jules: ISBN -> bookdata-Lookup für das füllen der Datenbank
Wenn Sie versuchen, zu implementieren meinen code unten, habe ich zum ersten mal eine Run-time error: Access is denied
bei der Verwendung Set xmlhttp = CreateObject("MSXML2.xmlhttp")
. Ich fand den post (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) sagte, dass die Linie wechseln, um Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
.
Ich jetzt erhalte Run-time error '91': Object variable or With block variable not set.
Jemand irgendwelche Ideen, wie man dieses Problem beheben? Ich bin neu in der Arbeit mit XML. Zum testen bin ich mit der Immediate-Fenster und die Eingabe von testlookup("0007102968")
.
Modul 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
Klassenmodul 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
BEARBEITEN: Noch immer die Fehler, aber bin jetzt immer eine Antwort im Direktfenster:
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>
Browser Ergebnisse von https-Anforderung:
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da XML in VBA kann manchmal ein Schmerz für mich, ich nehme einfach die XML-Antwort-text zu laden und dann in ein
MSXML2.DOMDocument
. Von dort aus können Sie analysieren und die Daten abrufen, die Sie benötigen. Zuerst müssen Sie sicherstellen, dass die Datei einen Verweis auf Microsoft XML dll (tun Sie dies, indem Sie Werkzeug - > Verweise im Visual Basic-Fenster und wählen Sie dann "Microsoft XML 6.0").Als für den code, es würde in etwa so Aussehen:
Können Sie loswerden der for-Schleife, wenn Sie sicher sind, dass Sie bekommen nur eine Antwort (die isbn, ich denke, Sie sollten... )
for
Schleife. Wo/was istmyChildren
definiert?myChildren
mitmyElement
. Sollte jetzt funktionierenxmlhttp.Open "Get", strTest, False
. Irgendwelche Ideen?xmlhttp.Open "Get", strTest, False
strTest
hat diese URL bereits. Löschen Sie es, so gibt es nichts nach dem Wort falsch und die Zeile liest nurxmlhttp.Open "Get", strTest, False
False
ist bereits auskommentiert. Es hatte nichts mit dem Fehler zu tun. Ich habe den code zu arbeiten, nachdem es zu kauen um ein gutes Stück. Trotzdem danke.