Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsFormsForms ProgrammingQueriesModules / DAO / VBAReports / PrintingMacrosDatabase DesignSecurityConversionImporting / LinkingSQL Server / ADPMultiuser / NetworkingReplicationSetup / ConfigurationDeveloper ToolkitsActiveX ControlsNew UsersGeneral 1General 2
Access DirectoryToolsTutorialsUser Groups
Related Topics
SQL ServerOther DB ProductsMS OfficeMore Topics ...

MS Access Forum / General 1 / January 2008

Tip: Looking for answers? Try searching our database.

VBA Editor

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
User - 29 Jan 2008 00:25 GMT
Hello...

After many years of programing with access, I decided to automate the
creation of the vba coding behind a form.

Basically, I have a form where I select all the settings for any given
form then,  by pressing a button I generate all the code I need to a
file then open it with notepad.

What I like to do is to "paste" the generated code to the form module
automatically.

I do know a few things:

1. The form needs to be open to be able to read from the controls on
it. (which I'm doing right now. If the form is not open then I open it
hidden, do my stuff and close it)

2. There's a way of doing it using the VBE.

So far, I've been able to open the form and get the focus on the
module. When I try to paste the generated code it fail! It's driving
me crazy!

I google it, but I only got examples for excel which are helpful but
not good.

Any help would be much appreciated!

Finally, going further, my goal is to create a tool, like the "M-Z
Tools" to use it directly with the editor but that has proven
difficult. No many doc. on how to.

I know how to create an mde and use it as an "Add-In" (quite fun and
easy to do BTW...) but I haven't got the part to read from the Actual
DB and NOT the Add-In ! I know is something with the references to the
db I want, but no luck yet.

Currently, I have the "Tool" Form on the DB I'm developing and
assigned a hot key thru macros to call it. It works but I would like
to have it as a "Tool" instead of copying the form every time, plus
it's easier to correct and/or enhance the "Tool" than chaging all of
them.

Many, many thanks for any help.
Salad - 29 Jan 2008 18:06 GMT
> Hello...
>
[quoted text clipped - 24 lines]
>
> Any help would be much appreciated!

At this point I would go to MSAccess Help, search for Module Object, and
look at the Methods and Property, as well as the code examples for each
method and property associated with Module.

Modules
http://www.youtube.com/watch?v=kJf9MZEdviA
Phil Stanton - 29 Jan 2008 22:25 GMT
I don't know if this is any help. Used to add code to a report

Phil

Function AddModules(Rpt As Report, MainOrSub As Byte)          ' Add the
print modules 0 = Main Report, 1 = SubReport

   Dim Mdl As Module
   Dim lngStartLine As Long, lngBodyLine As Long
   Dim lngCount As Long
   Dim strProcName As String
   Dim i As Integer

   On Error GoTo AddModules_Err
   Set Mdl = Rpt.Module

   If MainOrSub = 0 Then                           ' Code for Main Report
only
       If Rpt.OnOpen = "" Then                         ' No on Open module
           Rpt.OnOpen = "[Event Procedure]"
           lngCount = Mdl.CreateEventProc("Open", "Report")
       End If

       ' Insert text into body of procedure.
       strProcName = "Report_Open"
       ' Count lines in procedure.
       lngCount = Mdl.ProcCountLines(strProcName, vbext_pk_Proc)
       ' Determine start line.
       lngStartLine = Mdl.ProcStartLine(strProcName, vbext_pk_Proc)
       ' Determine body line.
       lngBodyLine = Mdl.ProcBodyLine(strProcName, vbext_pk_Proc)

       Do Until Mdl.Lines(lngStartLine + lngCount, 1) <> ""    ' Problem if
there are blank lines at the end of a procedure
           lngCount = lngCount - 1
       Loop

       Mdl.InsertLines lngStartLine + lngCount, vbTab & "Call OpenWord(" &
Chr$(34) & Chr$(34) & ")" & vbCrLf       ' Open Word
       Mdl.InsertLines lngStartLine + lngCount + 2, vbTab & "Documents.Add
Template:=" & Chr$(34) & "Normal" & Chr$(34) & vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 4, vbTab & "Call
SetUpPage(Me)" & vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 6, vbTab & "LeftOffset =
0" & vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 8, vbTab & "TopOffset = 0"
& vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 10, vbTab & "StartTime =
Timer" & vbCrLf

       If Rpt.OnPage = "" Then                         ' No on Open module
           Rpt.OnPage = "[Event Procedure]"
           lngCount = Mdl.CreateEventProc("Page", "Report")
       End If

       ' Insert text into body of procedure.
       strProcName = "Report_Page"

       ' Count lines in procedure.
       lngCount = Mdl.ProcCountLines(strProcName, vbext_pk_Proc)
       ' Determine start line.
       lngStartLine = Mdl.ProcStartLine(strProcName, vbext_pk_Proc)
       ' Determine body line.
       lngBodyLine = Mdl.ProcBodyLine(strProcName, vbext_pk_Proc)

       Do Until Mdl.Lines(lngStartLine + lngCount, 1) <> ""    ' Problem if
there are blank lines at the end of a procedure
           lngCount = lngCount - 1
       Loop

       Mdl.InsertLines lngStartLine + lngCount, vbTab & "Call
FindAndDeleteBookMark" & vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 2, vbTab & "Call
NextPageAddBookMark" & vbCrLf
       Mdl.InsertLines lngStartLine + lngCount + 4, vbTab & "Msgbox " &
Chr$(34) & "Time taken was " & Chr$(34) _
           & " & Timer - StartTime" & " & " & Chr$(34) & " seconds" &
Chr$(34) & vbCrLf

       ' Count lines in procedure.
       lngCount = Mdl.ProcCountLines(strProcName, vbext_pk_Proc)
       ' Determine start line.
       lngStartLine = Mdl.ProcStartLine(strProcName, vbext_pk_Proc)
       ' Determine body line.
       lngBodyLine = Mdl.ProcBodyLine(strProcName, vbext_pk_Proc)
   End If                                              ' End of Main report
only

   For i = 0 To 20
       If Rpt.Section(i).Controls.Count <> 0 Then
           If Err <> 0 Then
               Err = 0
               GoTo NextSection
           End If

           'Debug.Print mdl.CountOfLines & "  i= " & i & " Section: " &
Rpt.Section(i).Name

           If Rpt.Section(i).OnPrint = "" Then
               Rpt.Section(i).OnPrint = "[Event Procedure]"
CreatePrintSub:
               'Debug.Print Rpt.Section(i).Name & " event proc"
               lngCount = Mdl.CreateEventProc("Print", Rpt.Section(i).Name)
           End If

          ' Insert text into body of procedure.
           strProcName = Rpt.Section(i).Name & "_Print"
               ' Count lines in procedure.
           lngCount = Mdl.ProcCountLines(strProcName, vbext_pk_Proc)
           ' Determine start line.
           lngStartLine = Mdl.ProcStartLine(strProcName, vbext_pk_Proc)
           ' Determine body line.
           lngBodyLine = Mdl.ProcBodyLine(strProcName, vbext_pk_Proc)
           ' Determine line number of last line in procedure.

           Do Until Mdl.Lines(lngStartLine + lngCount, 1) <> ""   ' Problem
if there are blank lines at the end of a procedure
               lngCount = lngCount - 1
           Loop

           If MainOrSub = 1 Then                       ' Sub report
               Mdl.InsertLines lngStartLine + lngCount, vbTab &
"SubRptRunning = True" & vbCrLf
               Mdl.InsertLines lngStartLine + lngCount + 2, vbTab & "Call
OutputSection(Me, " & i & ", Left, Top)" & vbCrLf
               Mdl.InsertLines lngStartLine + lngCount + 4, vbTab &
"SubRptRunning = False" & vbCrLf
           Else
               Mdl.InsertLines lngStartLine + lngCount, vbTab & "Call
OutputSection(Me, " & i & ", Left, Top)" & vbCrLf
           End If
       End If
NextSection:

   Next i

   Exit Function

AddModules_Err:
   If Err = 35 Then                                    ' Sub not found
       Resume CreatePrintSub
   End If
   If Err = 2462 Then                                  ' Invalid section
       Resume NextSection
   End If
   MsgBox "Error: " & Err & " " & Err.Description

End Function

>> Hello...
>>
[quoted text clipped - 31 lines]
> Modules
> http://www.youtube.com/watch?v=kJf9MZEdviA
EI User - 29 Jan 2008 22:47 GMT
Phil... are you joking right ?

By looking at your reply, it look like the solution I need. I'll give
it a try and let you know.

Many, MANY.. THANKS !!

>I don't know if this is any help. Used to add code to a report
>
>Phil
EI User - 30 Jan 2008 00:21 GMT
Hello Phil...

It worked like Magic !!!

Again, MANY, MANY THANKS !!!!!

One last question, let's say I create a mde as an "Add-In". How do I
tell vba to read from the active db an not the mde ?

I've tried several things but no luck.

Thanks!

>I don't know if this is any help. Used to add code to a report
>
>Phil
Phil Stanton - 30 Jan 2008 19:07 GMT
Glad it put you on the right track. Still not sure what you are trying to
achieve.

Dunno about the MDE bit

If you MDE is declared in the Reference section of VBA I know there can be a
conflict with your actual DB. I have a DB which extracts stuff to build an
Outlook address book from any Database, and frequently get conflicts.
Doesn't seem to stop it working, however.

Phil

> Hello Phil...
>
[quoted text clipped - 12 lines]
>>
>>Phil
EI User - 30 Jan 2008 23:18 GMT
Hello Phil...

I've been using Access like for 6+ years at work. I don't consider my
self an expert but I think I'm pretty good. So you have an idea; I
have a DB at work that does the following:

1. Connect to the main unix system, download a specified file.
2. Convert that file using Monarch and Inport to DB
3. Manipulate the Data then send the neccessary emails, using Lotus
Notes, to some of the office managers.
4. Save reports to PDF and/or Excel
5. Custom "Select Print Settings" form where users can select any
windows printer and I have my own routines to the various print
functions.

All of the above is done by just pressing a button. Pure access forms,
reports, etc. and VBA coding !!

Mind you, I have never set foot on a class room. I learned Access and
VBA all my self. By looking at examples, trial and error, READING and
a lot of google ! LOL

So, after all these years, even though I'm very organized, sometimes
it's hard to keep track of everything.

For that reason, I've decided it was time to "automate" the creation
of a DB, from the ground up! I'm standarizing everything, from the
field names on tables to the vba modules.

I have all the basics now like default forms, reports, coding, etc.;
the part I really want is this:

I created a form, for my use only, that will create all of the coding
of a normal form in my db. That includes all of the events for each
field, everything! The same form will copy and paste the coding to the
target form. All by selecting the necessary fields and pressing a
button. With your help, I completed everything!; except;

I want to take it to the next level. I want to create a DLL or
Something like that to using as an "extension" of the VBA editor. The
best idea is the "M-Z Tools", great tool and free.

So far, I've created a mde with the neccessary settings to be used as
an "Add-In", it works great but, is doing everything on the mde and
not the actual or current db I'm working on. I've tried somethings but
no luck. If I got it to work, I'll use it as an "Add-In" but I'll love
to have it as a DLL like the m-z tools.

Any ways, many thanks for all your help.

>Glad it put you on the right track. Still not sure what you are trying to
>achieve.
[quoted text clipped - 7 lines]
>
>Phil
Tony Toews [MVP] - 31 Jan 2008 01:55 GMT
>One last question, let's say I create a mde as an "Add-In". How do I
>tell vba to read from the active db an not the mde ?

Use CurrentDB to refer to the "parent" MDB/MDE.   Use CodeDB to refer to the "add-in"
mde.

Also see my Add-in Tips, Hints and Gotchas page at
http://www.granite.ab.ca/access/addins.htm which may be of some use.

Tony
Signature

Tony Toews, Microsoft Access MVP
  Please respond only in the newsgroups so that others can
read the entire thread of messages.
  Microsoft Access Links, Hints, Tips & Accounting Systems at
http://www.granite.ab.ca/accsmstr.htm
  Tony's Microsoft Access Blog - http://msmvps.com/blogs/access/

EI User - 31 Jan 2008 22:37 GMT
Hello Tony..

Many, maaannyyy thanks !!!!

I beleive that will solve the final problem.

Again, many thanks!

>>One last question, let's say I create a mde as an "Add-In". How do I
>>tell vba to read from the active db an not the mde ?
[quoted text clipped - 6 lines]
>
>Tony
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.