Hope you can help. I have created a mail merge word doc which seems to work
fine. When I close and reload it asks if I wish to pull in the data.
Great.
However, I want to print the results of the mail merge from within a VB.Net
app. I can create and load the word app/doc, but the document is not opened
as a mail merge doc. In fact the mail merge fields just appear as text.
Any ideas please, or alternative was to do this.
many thanks
Chubbly 9 6034
Hi Chubbly, Hope you can help. I have created a mail merge word doc which seems to work fine. When I close and reload it asks if I wish to pull in the data. Great.
However, I want to print the results of the mail merge from within a VB.Net app. I can create and load the word app/doc, but the document is not opened as a mail merge doc. In fact the mail merge fields just appear as text.
It would help if you'd show us the code you're using... You also need to tell
us which version of Word you're testing on, which versions are targeted, what
type of data source is involved and, if you know, which connection method is
being used.
My best guess would be you're running into this:
"Opening This Will Run the Following SQL Command" Message When You Open a Word
Document - 825765 http://support.microsoft.com?kbid=825765
In an automation environment, where this security measure is activated, you
MUST use the OpenDataSource method to connect the data after the document is
opened. The data source is unlinked without question when a mail merge document
is opened by automation.
Cindy Meister
INTER-Solutions, Switzerland http://homepage.swissonline.ch/cindymeister (last update Jun 8 2004) http://www.word.mvps.org
This reply is posted in the Newsgroup; please post any follow question or reply
in the newsgroup and not by e-mail :-)
Hi Cindy
Had come round to the fact of using OpenDataSource. Just trying that now,
but unsure what the 'Name' parameter should hold.
I am using VB 2005, Word 2003 and trying to pull in data from an SQL 2005
table.
--------------------------------------
Dim wrdMailMerge As Word.MailMerge
Dim wrdMergeFields As Word.MailMergeFields
Dim wrdSelection As Word.Selection
wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
wrdDoc =
wrdApp.Documents.Open("C:\temp\2005\WordDocument1\ WordDocument1\DeliveryAddress.doc")
wrdDoc.MailMerge.OpenDataSource(Name:="Name", ConfirmConversions:=False,
ReadOnly:=True, LinkToSource:=True, AddToRecentFiles:=False,
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="",
WritePasswordTemplate:="", Revert:=True,
Format:=Word.WdOpenFormat.wdOpenFormatAuto, Connection:="data source=WEBDEV;
initial catalog=Subscriptions2; integrated security=SSPI; persist security
info=False; packet size=4096; Connect Timeout=300", SQLStatement:="select *
from subscriptionsprintqueue", SQLStatement1:="",
SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
wrdDoc.MailMerge.Execute()
--------------------------------------
Many thanks
Chubbly
"Cindy M -WordMVP-" <C.*********@hispeed.ch> wrote in message
news:VA.0000bee5.00a5e089@speedy... Hi Chubbly,
Hope you can help. I have created a mail merge word doc which seems to work fine. When I close and reload it asks if I wish to pull in the data. Great.
However, I want to print the results of the mail merge from within a VB.Net app. I can create and load the word app/doc, but the document is not opened as a mail merge doc. In fact the mail merge fields just appear as text. It would help if you'd show us the code you're using... You also need to tell us which version of Word you're testing on, which versions are targeted, what type of data source is involved and, if you know, which connection method is being used.
My best guess would be you're running into this: "Opening This Will Run the Following SQL Command" Message When You Open a Word Document - 825765 http://support.microsoft.com?kbid=825765
In an automation environment, where this security measure is activated, you MUST use the OpenDataSource method to connect the data after the document is opened. The data source is unlinked without question when a mail merge document is opened by automation.
Cindy Meister INTER-Solutions, Switzerland http://homepage.swissonline.ch/cindymeister (last update Jun 8 2004) http://www.word.mvps.org
This reply is posted in the Newsgroup; please post any follow question or reply in the newsgroup and not by e-mail :-)
I now have the code below. The name in the 'opendatasource' command now
points towards the *.odc file that was created when setting up the mail
merge doc.
When I try to execute, word shows a pop up stating that my merge field does
not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
It appears to be looking at the wrong datasource. If I set the datasource
manually in my document, all works fine.
My code is below again.
thx
wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
wrdDoc =
wrdApp.Documents.Open("C:\temp\2005\WordDocument1\ WordDocument1\DeliveryAddress.doc")
wrdDoc.MailMerge.OpenDataSource(Name:="C:\Document s and Settings\pd.ISL\My
Documents\My Data Sources\webdev Subscriptions2
SubscriptionsPrintQueue.odc", ConfirmConversions:=False, ReadOnly:=True,
LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="",
PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:=True, Format:=Word.WdOpenFormat.wdOpenFormatAuto, Connection:="data
source=WEBDEV; initial catalog=Subscriptions2; integrated security=SSPI;
persist security info=False; packet size=4096; Connect Timeout=300",
SQLStatement:="select * from subscriptionsprintqueue", SQLStatement1:="",
SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
wrdDoc.MailMerge.Destination =
Word.WdMailMergeDestination.wdSendToNewDocument
wrdDoc.MailMerge.Execute()
"Cindy M -WordMVP-" <C.*********@hispeed.ch> wrote in message
news:VA.0000bee5.00a5e089@speedy... Hi Chubbly,
Hope you can help. I have created a mail merge word doc which seems to work fine. When I close and reload it asks if I wish to pull in the data. Great.
However, I want to print the results of the mail merge from within a VB.Net app. I can create and load the word app/doc, but the document is not opened as a mail merge doc. In fact the mail merge fields just appear as text. It would help if you'd show us the code you're using... You also need to tell us which version of Word you're testing on, which versions are targeted, what type of data source is involved and, if you know, which connection method is being used.
My best guess would be you're running into this: "Opening This Will Run the Following SQL Command" Message When You Open a Word Document - 825765 http://support.microsoft.com?kbid=825765
In an automation environment, where this security measure is activated, you MUST use the OpenDataSource method to connect the data after the document is opened. The data source is unlinked without question when a mail merge document is opened by automation.
Cindy Meister INTER-Solutions, Switzerland http://homepage.swissonline.ch/cindymeister (last update Jun 8 2004) http://www.word.mvps.org
This reply is posted in the Newsgroup; please post any follow question or reply in the newsgroup and not by e-mail :-)
Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete
the MailMerge with the same DB.
I suggest you tried to follow the steps to retrieve the Macro to do mail
merge which is the same as we do in VB.NET.
1. Tools/Macro/Record Macro
2. Start your interactive operation of Mail Merge procedure and complete
that.
3. stop macro record
4. Press Alt+F11 to open the macro you recorded just now.
It should be similar with below.
ActiveDocument.MailMerge.OpenDataSource Name:= _
"<path>\<odc>" _
, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="",
PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="",
Revert:=False, _
Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="",
SQLStatement1 _
:="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result.
Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support
==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Hi Peter
yes the Word UI can complete the merge.
Have already tried as suggested below, but get the same problem as before
when I either run the Macro from within Word or run the code from within VB.
When I try to execute, word shows a pop up stating that my merge field does
not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
Chubbly
""Peter Huang" [MSFT]" <v-******@online.microsoft.com> wrote in message
news:WQ****************@TK2MSFTNGXA01.phx.gbl... Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete the MailMerge with the same DB. I suggest you tried to follow the steps to retrieve the Macro to do mail merge which is the same as we do in VB.NET. 1. Tools/Macro/Record Macro 2. Start your interactive operation of Mail Merge procedure and complete that. 3. stop macro record 4. Press Alt+F11 to open the macro you recorded just now. It should be similar with below. ActiveDocument.MailMerge.OpenDataSource Name:= _ "<path>\<odc>" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _ :="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result. Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support ================================================== When responding to posts, please "Reply to Group" via your newsreader so that others may learn and benefit from your issue. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights.
As mentioned, this is what the macro records. When doing this manually, the
doc will merge no problem. When running this macro I get the error.
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\Documents and Settings\pd.ISL\My Documents\My Data
Sources\webdev Subscriptions2 SubscriptionsPrintQueue.odc" _
, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False,
_
Format:=wdOpenFormatAuto, Connection:= _
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=True;Initial Catalog=Subscriptions2;Data Source=webdev;Use Procedure
for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation
ID=WGVWXL1J;Use Encryption for Data=False;Tag with colum" _
, SQLStatement:="SELECT * FROM SubscriptionsPrintQueue", _
SQLStatement1:="", SubType:=wdMergeSubTypeOther
"Chubbly Geezer" <ch************@newsgroup.nospam> wrote in message
news:%2***************@TK2MSFTNGP02.phx.gbl... Hi Peter
yes the Word UI can complete the merge.
Have already tried as suggested below, but get the same problem as before when I either run the Macro from within Word or run the code from within VB.
When I try to execute, word shows a pop up stating that my merge field does not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
Chubbly
""Peter Huang" [MSFT]" <v-******@online.microsoft.com> wrote in message news:WQ****************@TK2MSFTNGXA01.phx.gbl... Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete the MailMerge with the same DB. I suggest you tried to follow the steps to retrieve the Macro to do mail merge which is the same as we do in VB.NET. 1. Tools/Macro/Record Macro 2. Start your interactive operation of Mail Merge procedure and complete that. 3. stop macro record 4. Press Alt+F11 to open the macro you recorded just now. It should be similar with below. ActiveDocument.MailMerge.OpenDataSource Name:= _ "<path>\<odc>" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _ :="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result. Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support ================================================== When responding to posts, please "Reply to Group" via your newsreader so that others may learn and benefit from your issue. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights.
You probably need something more along the following lines. In VBA you
shouldn't need the other parameters (most of them have no effect) but if you
do, put them back
wrdDoc.MailMerge.OpenDataSource(Name:="C:\Document s and Settings\pd.ISL\My
Documents\My Data Sources\webdev Subscriptions2
SubscriptionsPrintQueue.odc", Connection:="Provider=SQLNCLI.1;Data
Source=WEBDEV;Integrated Security=SSPI;Initial Catalog=Subsscriptions2;",
SQLStatement:="select * from ""subscriptionsprintqueue""",
SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
This assumes that you are using the "Native Client" OLEDB provider for SQL
Server 2005 access. You may still be able to use the old provider by
specifying Provider=SQLOLEDB.1 instead. You may need to specify the Data
Source as SERVERNAME\WEBDEV where you substitute your server name.
As long as the Connection and SQLStatement parameters contain everything you
need you can probably get away with a completely empty .odc file.
The double quotes around the table name in the Select statement are probably
optional.
Peter Jamieson
"Chubbly Geezer" <ch************@newsgroup.nospam> wrote in message
news:%2***************@TK2MSFTNGP02.phx.gbl... Hi Peter
yes the Word UI can complete the merge.
Have already tried as suggested below, but get the same problem as before when I either run the Macro from within Word or run the code from within VB.
When I try to execute, word shows a pop up stating that my merge field does not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
Chubbly
""Peter Huang" [MSFT]" <v-******@online.microsoft.com> wrote in message news:WQ****************@TK2MSFTNGXA01.phx.gbl... Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete the MailMerge with the same DB. I suggest you tried to follow the steps to retrieve the Macro to do mail merge which is the same as we do in VB.NET. 1. Tools/Macro/Record Macro 2. Start your interactive operation of Mail Merge procedure and complete that. 3. stop macro record 4. Press Alt+F11 to open the macro you recorded just now. It should be similar with below. ActiveDocument.MailMerge.OpenDataSource Name:= _ "<path>\<odc>" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _ :="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result. Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support ================================================== When responding to posts, please "Reply to Group" via your newsreader so that others may learn and benefit from your issue. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights.
A problem with Word is that it truncates the Connection string when it
records it. If you delete "Tag with colum" from the end, it will probably
work.
Peter Jamieson
"Chubbly Geezer" <ch************@newsgroup.nospam> wrote in message
news:%2****************@TK2MSFTNGP03.phx.gbl... As mentioned, this is what the macro records. When doing this manually, the doc will merge no problem. When running this macro I get the error.
ActiveDocument.MailMerge.OpenDataSource Name:= _ "C:\Documents and Settings\pd.ISL\My Documents\My Data Sources\webdev Subscriptions2 SubscriptionsPrintQueue.odc" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Subscriptions2;Data Source=webdev;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WGVWXL1J;Use Encryption for Data=False;Tag with colum" _ , SQLStatement:="SELECT * FROM SubscriptionsPrintQueue", _ SQLStatement1:="", SubType:=wdMergeSubTypeOther "Chubbly Geezer" <ch************@newsgroup.nospam> wrote in message news:%2***************@TK2MSFTNGP02.phx.gbl... Hi Peter
yes the Word UI can complete the merge.
Have already tried as suggested below, but get the same problem as before when I either run the Macro from within Word or run the code from within VB.
When I try to execute, word shows a pop up stating that my merge field does not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
Chubbly
""Peter Huang" [MSFT]" <v-******@online.microsoft.com> wrote in message news:WQ****************@TK2MSFTNGXA01.phx.gbl... Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete the MailMerge with the same DB. I suggest you tried to follow the steps to retrieve the Macro to do mail merge which is the same as we do in VB.NET. 1. Tools/Macro/Record Macro 2. Start your interactive operation of Mail Merge procedure and complete that. 3. stop macro record 4. Press Alt+F11 to open the macro you recorded just now. It should be similar with below. ActiveDocument.MailMerge.OpenDataSource Name:= _ "<path>\<odc>" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _ :="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result. Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support ================================================== When responding to posts, please "Reply to Group" via your newsreader so that others may learn and benefit from your issue. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights.
Many thanks.
Seems the problem went away by removing the Connection and SQLStatement
strings.
"Peter Jamieson" <pj*@KillmapSpjjnet.demon.co.uk> wrote in message
news:O5**************@TK2MSFTNGP03.phx.gbl... You probably need something more along the following lines. In VBA you shouldn't need the other parameters (most of them have no effect) but if you do, put them back
wrdDoc.MailMerge.OpenDataSource(Name:="C:\Document s and Settings\pd.ISL\My Documents\My Data Sources\webdev Subscriptions2 SubscriptionsPrintQueue.odc", Connection:="Provider=SQLNCLI.1;Data Source=WEBDEV;Integrated Security=SSPI;Initial Catalog=Subsscriptions2;", SQLStatement:="select * from ""subscriptionsprintqueue""", SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
This assumes that you are using the "Native Client" OLEDB provider for SQL Server 2005 access. You may still be able to use the old provider by specifying Provider=SQLOLEDB.1 instead. You may need to specify the Data Source as SERVERNAME\WEBDEV where you substitute your server name.
As long as the Connection and SQLStatement parameters contain everything you need you can probably get away with a completely empty .odc file.
The double quotes around the table name in the Select statement are probably optional.
Peter Jamieson
"Chubbly Geezer" <ch************@newsgroup.nospam> wrote in message news:%2***************@TK2MSFTNGP02.phx.gbl... Hi Peter
yes the Word UI can complete the merge.
Have already tried as suggested below, but get the same problem as before when I either run the Macro from within Word or run the code from within VB.
When I try to execute, word shows a pop up stating that my merge field does not exist. Would I like to remove it or use field 'M__' or 'M__1'.?
Chubbly
""Peter Huang" [MSFT]" <v-******@online.microsoft.com> wrote in message news:WQ****************@TK2MSFTNGXA01.phx.gbl... Hi Chubbly,
Firstly I assume that you can use Word UI interactive operation to complete the MailMerge with the same DB. I suggest you tried to follow the steps to retrieve the Macro to do mail merge which is the same as we do in VB.NET. 1. Tools/Macro/Record Macro 2. Start your interactive operation of Mail Merge procedure and complete that. 3. stop macro record 4. Press Alt+F11 to open the macro you recorded just now. It should be similar with below. ActiveDocument.MailMerge.OpenDataSource Name:= _ "<path>\<odc>" _ , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _ :="", SubType:=wdMergeSubTypeOther
This is the code you will use for your VB.NET program.
Please have a try and let me know the result. Thanks!
Best regards,
Peter Huang
Microsoft Online Community Support ================================================== When responding to posts, please "Reply to Group" via your newsreader so that others may learn and benefit from your issue. ================================================== This posting is provided "AS IS" with no warranties, and confers no rights.
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: dixie |
last post by:
When I do a mailmerge from Access to Word by automation, sometimes, the Word
window does not fully open and can be found up in the very top left hand
corner of the screen. Is there a command I can...
|
by: dixie |
last post by:
I have an application which does a lot of reports (letters) by automation
with Word. The mail merge main document is a Word template and I transfer a
text file out to a prenamed filename to act as...
|
by: Nicolae Fieraru |
last post by:
Hi All,
I made an access Application which uses mailmerge function. I have a query
which I use to mailmerge to a word document. I created the word document as
a new document and I saved onto the...
|
by: Jim |
last post by:
I've got a routine that creates a Mail merge doc in Word. I'd like to
add a title and/or header to the document. How can I do this in code?
In other words, either before or after I execute the...
|
by: Karen Hill |
last post by:
How do I do a mailmerge via automation in Access? I would like to have
the datasource be an SQL statment. I would like this to be in VB
without using MS Query. Thanks in advance Access experts...
| |
by: Dixie |
last post by:
I have a mailmerge that works fine from an MDB database using the
OpenDataSource method to send its data from a query within Access as part of
an automation sequence. Now, if I compile that mdb...
|
by: John |
last post by:
Hi
I am trying to do a word mailmerge form within my vb.net app. My problem is
how to do a query on one of my tables and use the result as the mail merge
datasource. Any help would be...
|
by: Steve |
last post by:
Can anyone point me to a source that lays out the full word mailmerge
automation approach including events, properties, etc. and how they can be
used in a vb.net application. I've looked around on...
|
by: mleerog |
last post by:
Hope someone can shed some light on a tricky error.
I am trying to automate a mailmerge in VB.NET using Word 2003. The main document is a previously existing Word file. The data source is a text...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
| |
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |