diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc
index 7906637..3ba373f 100644
--- a/dlls/jscript/jscript_En.rc
+++ b/dlls/jscript/jscript_En.rc
@@ -24,6 +24,7 @@
 {
     IDS_TO_PRIMITIVE        "Error converting object to primitive type"
     IDS_INVALID_CALL_ARG    "Invalid procedure call or argument"
+    IDS_SUBSCRIPT_OUT_OF_RANGE "Subscript out of range"
     IDS_CREATE_OBJ_ERROR    "Automation server can't create object"
     IDS_NO_PROPERTY         "Object doesn't support this property or method"
     IDS_UNSUPPORTED_ACTION  "Object doesn't support this action"
diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h
index 76f45e2..be569e0 100644
--- a/dlls/jscript/resource.h
+++ b/dlls/jscript/resource.h
@@ -20,6 +20,7 @@
 
 #define IDS_TO_PRIMITIVE                    0x0001
 #define IDS_INVALID_CALL_ARG                0x0005
+#define IDS_SUBSCRIPT_OUT_OF_RANGE          0x0009
 #define IDS_CREATE_OBJ_ERROR                0x01AD
 #define IDS_NO_PROPERTY                     0x01B6
 #define IDS_UNSUPPORTED_ACTION              0x01BD
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 16572ad..a6c0c5a 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1901,6 +1901,9 @@
 exception_test(function() {new nullDisp;}, "TypeError", -2146827850);
 exception_test(function() {new VBArray();}, "TypeError", -2146823275);
 exception_test(function() {new VBArray(new VBArray(createArray()));}, "TypeError", -2146823275);
+exception_test(function() {(new VBArray(createArray())).lbound("aaa");}, "RangeError", -2146828279);
+exception_test(function() {(new VBArray(createArray())).lbound(3);}, "RangeError", -2146828279);
+exception_test(function() {tmp = new Object(); tmp.lb = VBArray.prototype.lbound; tmp.lb();}, "TypeError", -2146823275);
 
 function testThisExcept(func, number) {
     exception_test(function() {func.call(new Object())}, "TypeError", number);
@@ -2250,5 +2253,8 @@
 
 var tmp = new VBArray(createArray());
 tmp = new VBArray(VBArray(createArray()));
+ok(tmp.lbound() == 0, "tmp.lbound() = " + tmp.lbound());
+ok(tmp.lbound(1) == 0, "tmp.lbound(1) = " + tmp.lbound(1));
+ok(tmp.lbound(2, 1) == 2, "tmp.lbound(2, 1) = " + tmp.lbound(2, 1));
 
 reportSuccess();
diff --git a/dlls/jscript/vbarray.c b/dlls/jscript/vbarray.c
index e7388a9..12bb7c0 100644
--- a/dlls/jscript/vbarray.c
+++ b/dlls/jscript/vbarray.c
@@ -61,8 +61,32 @@
 static HRESULT VBArray_lbound(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    VBArrayInstance *vbarray;
+    int dim;
+    HRESULT hres;
+
+    TRACE("\n");
+
+    vbarray = vbarray_this(vthis);
+    if(!vbarray)
+        return throw_type_error(ctx, ei, IDS_NOT_VBARRAY, NULL);
+
+    if(arg_cnt(dp)) {
+        hres = to_int32(ctx, get_arg(dp, 0), ei, &dim);
+        if(FAILED(hres))
+            return hres;
+    } else
+        dim = 1;
+
+    hres = SafeArrayGetLBound(vbarray->safearray, dim, &dim);
+    if(hres == DISP_E_BADINDEX)
+        return throw_range_error(ctx, ei, IDS_SUBSCRIPT_OUT_OF_RANGE, NULL);
+    else if(FAILED(hres))
+        return hres;
+
+    if(retv)
+        num_set_val(retv, dim);
+    return S_OK;
 }
 
 static HRESULT VBArray_toArray(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPPARAMS *dp,
