T
Todd Huttenstine
Dim objConn As ADODB.Connection
Dim szConnect As String
Dim szSQL As String
' Create the connection string.
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=E:\QTD\Sales.xls;" & _
"Extended Properties=Excel 8.0;"
' Create the SQL statement.
szSQL = "INSERT INTO [Sheet3$A2:A2] VALUES
('TestValue1'); "
' Create and open the Connection object.
Set objConn = New ADODB.Connection
objConn.Open szConnect
' Execute the insert statement.
objConn.Execute szSQL
' Close and destroy the Connection object.
objConn.Close
Set objConn = Nothing
Above is my code. Jamie Collins gave me advice(bottom of
this post) but I cant seem to get 1 part to work.
I have 3 questions:
When I run this code it inserts the value "Testvalue1"
into cell A3. But why when I open Sales.xls and delete
the value and then run the code again, I get the
error "This table contains cells that are outside the
range of cells defined in this spreadsheet"? How do I
make it to where I can simply update this?
Also I cant figure out where to put the HDR=Yes and/or
HDR=no statement in the extended properties.
Last, how can I make it to where I can delete a value or
update a value instead of having to insert a new line to
the table?
Jamies Response:
To update a single cell in an existing table you use
HDR=No in the
extended properties of the connection string and use
UPDATE sql syntax
such as:
UPDATE [Sheet3$A2:A2] SET F1='TestValue1';
F1 is the default name Jet assigns to the first column
where the
column name is unknown or invalid. The inserted value must
match the
data type for the *whole* column. Better to use a key
column with
HDR=Yes e.g.
UPDATE [Sheet3$]
SET MyDataCol='TestValue1'
WHERE MyKeyCol=55
;
INSERT INTO is used to add a row to a table. With Excel,
it is always
added to the end of the existing table, subject to having
enough space
for the new row.
You can use INSERT INTO to put a value into a cell but
AFAIK this only
works on a sheet without an existing 'table' e.g.
INSERT INTO
[TotallyBlank$A1:A1]
(F1) VALUES ('TestValue1')
;
will put the value into cell A2 on an existing totally
blank sheet
named TotallyBlank. Did I say cell A2? Sure did. The only
way I've
found to insert the value into A1 is:
CREATE TABLE
TotallyBlank
(
TestValue1 VARCHAR(255)
)
;
This puts a column header into cell A1, in a new defined
Name named
TotallyBlank on a new sheet named TotallyBlank (unless
sheet
TotallyBlank already existed, then it would create a new
sheet named
TotallyBlank1).
Jamie.
Dim szConnect As String
Dim szSQL As String
' Create the connection string.
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=E:\QTD\Sales.xls;" & _
"Extended Properties=Excel 8.0;"
' Create the SQL statement.
szSQL = "INSERT INTO [Sheet3$A2:A2] VALUES
('TestValue1'); "
' Create and open the Connection object.
Set objConn = New ADODB.Connection
objConn.Open szConnect
' Execute the insert statement.
objConn.Execute szSQL
' Close and destroy the Connection object.
objConn.Close
Set objConn = Nothing
Above is my code. Jamie Collins gave me advice(bottom of
this post) but I cant seem to get 1 part to work.
I have 3 questions:
When I run this code it inserts the value "Testvalue1"
into cell A3. But why when I open Sales.xls and delete
the value and then run the code again, I get the
error "This table contains cells that are outside the
range of cells defined in this spreadsheet"? How do I
make it to where I can simply update this?
Also I cant figure out where to put the HDR=Yes and/or
HDR=no statement in the extended properties.
Last, how can I make it to where I can delete a value or
update a value instead of having to insert a new line to
the table?
Jamies Response:
To update a single cell in an existing table you use
HDR=No in the
extended properties of the connection string and use
UPDATE sql syntax
such as:
UPDATE [Sheet3$A2:A2] SET F1='TestValue1';
F1 is the default name Jet assigns to the first column
where the
column name is unknown or invalid. The inserted value must
match the
data type for the *whole* column. Better to use a key
column with
HDR=Yes e.g.
UPDATE [Sheet3$]
SET MyDataCol='TestValue1'
WHERE MyKeyCol=55
;
INSERT INTO is used to add a row to a table. With Excel,
it is always
added to the end of the existing table, subject to having
enough space
for the new row.
You can use INSERT INTO to put a value into a cell but
AFAIK this only
works on a sheet without an existing 'table' e.g.
INSERT INTO
[TotallyBlank$A1:A1]
(F1) VALUES ('TestValue1')
;
will put the value into cell A2 on an existing totally
blank sheet
named TotallyBlank. Did I say cell A2? Sure did. The only
way I've
found to insert the value into A1 is:
CREATE TABLE
TotallyBlank
(
TestValue1 VARCHAR(255)
)
;
This puts a column header into cell A1, in a new defined
Name named
TotallyBlank on a new sheet named TotallyBlank (unless
sheet
TotallyBlank already existed, then it would create a new
sheet named
TotallyBlank1).
Jamie.