Update Nov2017
UPDATE:  parse.com as now been closed and moved to parseplatform.org. I will update the content of this page an move the back-end to this platform

I use scriptDB a lot , both with Google Apps Script and from other sources, including VBA, and in this blog post, I  compare parse.com performance with script DB. One of the things that Parse.com has going for it is that there are APIs for IOS, Python, Javascript and other languages, so by choosing parse.com as your cloud based nosql database you are able to share the same data with many platforms.

I decided to put together a basic API for VBA so you could use Parse directly from Excel. It needs some refinement, and I’ll add capabilities to it if necessary. Let me know on the forum if you are using it, and how its working out. This will be based around the parse.com rest API – in other words calls to the custom VBA cParseCom class will be translated in rest API calls to Parse. All the code referenced here is available in the cDataSet.xlsm workbook, which you can download from Project Downloads

Primer slides


Before we get started, you’ll need to get logged on to parse.com, create an application and get some authentication keys. The 2 keys we will need for the current incarnation of the VBA parse API, are the application ID and the restAPI key.
Let’s get the topic of credential storage out of the way, before we dive into using Parse from VBA. Knowing what to do with these API keys in VBA in always a pain – you don’t want to have to duplicate them in every workbook that needs to access your data – so I’m going to take the same approach as I took for OAUTH2 and VBA, namely to encrypt theses and store them in the registry. This means you only have to register your application once on a pc, and then any other workbooks using the same credentials on that PC will get them from the encrypted registry. Again I recommend you have a separate workbook for your keys, and run the authentication process just once.
It looks like this. The optional arguments are so you can have multiple applications and scopes on the same PC. We’ll look at that in more detail later, and just use the defaults for now.
Private Sub firstTimeParseCom()
    Dim parseCom As cParseCom
    Set parseCom = New cParseCom
    With parseCom.init("ColorTable", , , "your application id",  "your restapi key")
    End With
End Sub

Every workbook that wants to use parse.com on this PC will just have to do this from then on.

With getParsed("a class name")
    .. do something
end with

Credentials encryption

These credentials are encrypted in the registry. If you don’t have the CAPICOM encryption dll loaded on your PC, you’ll need to get it from Microsoft as described in Google Oauth2 VBA authentication

The VBA parse.com API

It’s probably too grand to call it an API, but for the lack of a better term, let’s stick with that

Getting started

You’ll need to get registered with Parse, download cdataset.xlsm, and run the initial authentication as described on this page, and create some classes to play around with. A parse.com class is like a table, and you can look at them through your parse.com dashboard. We’ll work through the examples in the parseCom module of cDataSet.xslm.

Populating a parse.com class

Since this is Excel, the first job with the new API is to see how to create and populate a couple of classes from some given worksheets. Here’s the start of the first sheet – some customer data.
and here’s some order data
I’ve provided a general-purpose sub, populateFromSheet, for this, which we’ll look at in a moment. This will create a class for each sheet, with each object named the same as the columns in the table.
Private Sub populates()
    ' copy two sheets to parse.com
    populateFromSheet "VBAParseCustomers"
    populateFromSheet "VBAParseData"
End Sub
Here’s the parse.com dashboard, after I’ve run this – we have the two new classes, populated with the appropriate records
And here’s the code to do it.
Private Sub populateFromSheet(sheetName As String)
    Dim parseCom As cParseCom, job As cJobject, dset As cDataSet
    ' this will clear out an existing parse class, and create a new one from a worksheet
    ' we'll use batch mode throughout
    Set parseCom = getParsed(sheetName).batch
    ' clear out existing any existing data

    'get the data from the sheet and populate database
    Set dset = New cDataSet
    With dset.populateData(wholeSheet(sheetName), , , , , , True).jObject(, True, True)
        For Each job In .children
            With parseCom.createObject(job)
                ' clear this error handling up
                Debug.Assert .isOk
            End With
        Next job
        ' clear up
    End With
    ' commit any outstanding  and clean up
    With parseCom.flush.batch(False)
        Debug.Assert .isOk
        ' show how many are there now
        Debug.Print .count & " in class" & sheetName
    End With

End Sub

More examples and detail

For help and more information join our forum, follow the blog or follow me on Twitter