[AccessD] OT: Excel 97 Macro

John W. Colby jcolby at ColbyConsulting.com
Sat Mar 22 09:39:01 CST 2003


Gustav,

Must have been mom.  ;-)

I used dbase and 123 back in the 80s but never got into them at anything
close to this depth.  In fact I should guess that automation as we know it
didn't even exist.

You mention Macro Sheets.  I know about macro modules, which are just code
modules as we have in Access.  Are we talking about building up a macro
library in a separate workbook and then referencing that workbook from
another workbook, like we reference an MDA from another MDB?

Knowing the little I know about dynamically setting references in a running
Access App, I am not sure how to apply that to an Excel spreadsheet received
from a client.  These sheets have no code in them, or if they do that are
not my code.  IOW, I have to somehow insert a module or at least a macro
into a module inside of the received sheet, even in order to get the code
running that would link to my "library" workbook (assuming that this is even
the strategy you are discussing).  It seems that if I go to the bother of
doing that, then I would just insert all of the code I needed (an entire
module) into the target worksheet and just run it.

Given the lack of specific response to my question I guess I'll dive in to
trying to figure out how to do that process.  Open a worksheet, insert a
module, and run code.  I have done everything except insert the module, but
I suspect that process isn't too difficult.  

What would be nice is to know the ending row of the data.  Does anyone know
off the top of their head how to determine the max size (the largest row
index) of a populated row?  Remember I am working with what appears to be a
table - fixed column count / fixed row count.  What is the numbers of
records in that table (as determined in Excel).  I can always if necessary
just link the table in and get a record count but it would be nice to figure
it out in Excel.

John W. Colby
Colby Consulting
www.ColbyConsulting.com

-----Original Message-----
From: accessd-admin at databaseadvisors.com
[mailto:accessd-admin at databaseadvisors.com]On Behalf Of Gustav Brock
Sent: Friday, March 21, 2003 3:00 PM
To: John W. Colby
Subject: Re: [AccessD] OT: Excel 97 Macro


Hi John

Don't you regularly brag of your experience with old DOS applications
like dBase and Lotus 1-2-3? Or is that your mother, Charlotte?

Anyway, Lotus 1-2-3 and Quattro Pro both sported the use of separate
macro sheets to keep code separated from data.
You can do the same in Excel - it's like the Named Ranges - it's a
splendid feature but only few use it.

The additional advantage is that your macro workbook can stay
protected if you write protect the file.

Here's a snippet from the start of a main function called from Access
(as you learnt me).
Access opens the macro book and runs this macro. This macro opens a
template and another workbook (with data only), then saves the
template as a temporary workbook which the function then manipulates:

---

' Filenames of standard workbooks.

  Public Const cstrWorkbookForm As String = "PeriodForm.xls"
  Public Const cstrWorkbookData As String = "PeriodData.xls"
  Public Const cstrWorkbookTemp As String = "PeriodTemp.xls"
  Public Const cstrWorkbookSend As String = "PeriodSend.xlt"
  Public Const cstrWorkbookDist As String = "PeriodSend.xls"

[snip]

Function CreateSurvey() As Boolean
  
  Const cstrWorksheetName       As String = "Survey"
  ' Maximum length of name for a sheet.
  Const cbytWorksheetNameLen    As Byte = 31
    
  Dim wkb                 As Workbook
  Dim wkbPeriod           As Workbook
  Dim wkbPeriodData       As Workbook
  Dim wks                 As Worksheet

  Dim rng                 As Range
  Dim rngGroups           As Range
  Dim rngFormat           As Range
  Dim rngData             As Range
  Dim rngTxtHeader        As Range
  Dim rngTxtPeriod        As Range
  Dim rngTxtPeriodData    As Range
  Dim rngTxtSeason        As Range
  Dim rngTxtSeasonData    As Range

[snip]

  With Application
    ' Disable automatic recalculation and screen updating.
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
  End With
  
  ' For debugging only.
  With Application
  '  .Visible = True
  '  .ScreenUpdating = True
  End With
  
  ' Close all files except the first if more than one should be open.
  Call CloseOtherWorkbooks(False)
  
  strPath = ActiveWorkbook.Path
  
  ' Open file with statistics as template.
  Set wkbPeriode = Workbooks.Add(strPath & vbBackSlash & cstrWorkbookForm)
  ' This is used by DLookupSystem():
  Set wkbPeriodData = Workbooks.Open(strPath & vbBackSlash &
cstrWorkbookData, UpdateLinks:=0, ReadOnly:=True)

  Application.DisplayAlerts = False
  strPathFileName = strPath & vbBackSlash & cstrWorkbookTemp
  ' Save statistics in temporary file in the smaller Excel5-format.
  wkbPeriod.SaveAs strPathFileName, xlExcel5
  Application.DisplayAlerts = True
  
  wkbPeriod.Activate
  ' Set ranges.
  Set rngGroups = Range("xlsGroupInterval")
  Set rngFormat = Range("FormatHeader")
  Set rngData = Range("xlsSurvey")
  Set rngTxtHeader = Range("TextHeader")
  Set rngTxtPeriod = Range("TextPeriod")
  Set rngTxtPeriodData = Range("TextPeriodData")
  Set rngTxtSeason = Range("TextSeason")
  Set rngTxtSeasonData = Range("TextSeasonData")

[snip]

Run formatting code ...

---

Finally (cut away from this example, no big deal) the finished range
in the temporary workbook is copied into an empty template workbook -
clean with no code or left-over data - and saved as the finished
workbook.

/gustav


----------------------------------------------------
Is email taking over your day?  Manage your time with eMailBoss.  
Try it free!  http://www.eMailBoss.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 4424 bytes
Desc: not available
URL: <http://databaseadvisors.com/pipermail/accessd/attachments/20030322/c470928f/attachment-0001.bin>


More information about the AccessD mailing list