Solved

VBA Access: Repeated Formatting - How do I create a public function for this?

Posted on 2014-10-10
5
165 Views
Last Modified: 2014-10-10
Hi there!
I have some VBA code that involves a lot of formatting. My code is super long because of this, which is...distracting.

I would like to put the formatting part of the code into a public function so that I can just call the formatting with one word, but I am not sure who to do this with formatting. It isn't really a function (no "sub" at the front and no "end sub" at the end). It is just a chunk of code that formats. And I use it repeatedly, so it just be so great if I could make this work.

Any ideas?
0
Comment
Question by:Megin
  • 2
  • 2
5 Comments
 
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 40373628
Can you give more details about what it is formatting?

Generally, you would simply cut the code that you want to create a procedure from and paste it into a new code module.  But depending on what you are formatting, you might also have to pass some objects.  I do this with Excel all of the time, one subroutine that accepts objects for XL (Excel application), WBK (workbook), and SHT (worksheet).  It then loops through the header row looking at the column names and formats the columns according to a predefined parameters.

Then you simply call that subroutine from your original code, making sure you pass in all of the objects that are needed to perform whatever formatting you are doing.
0
 

Author Comment

by:Megin
ID: 40373675
This is the type of chunk that I would like to shorten:
With C
    .Font.Name = "Arial"
    .Font.Bold = True
    .Font.Size = 12
    .Interior.ColorIndex = 15
    .Borders(xlEdgeTop).LineStyle = xlContinuous
    .Borders(xlEdgeTop).Weight = xlThin
    .Borders(xlEdgeTop).ColorIndex = xlAutomatic
    .Borders(xlEdgeBottom).LineStyle = xlContinuous
    .Borders(xlEdgeBottom).Weight = xlThin
    .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
    .Borders(xlEdgeRight).LineStyle = xlContinuous
    .Borders(xlEdgeRight).Weight = xlThin
    .Borders(xlEdgeRight).ColorIndex = xlAutomatic
    .Borders(xlEdgeLeft).LineStyle = xlContinuous
    .Borders(xlEdgeLeft).Weight = xlThin
    .Borders(xlEdgeLeft).ColorIndex = xlAutomatic
    .Borders(xlInsideVertical).LineStyle = xlContinuous
    .Borders(xlInsideVertical).Weight = xlThin
    .Borders(xlInsideVertical).ColorIndex = xlAutomatic
    .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    .Borders(xlInsideHorizontal).Weight = xlThin
    .Borders(xlInsideHorizontal).ColorIndex = xlAutomatic
    .WrapText = True
    .RowHeight = 54.75
End With

Open in new window


I have this all over my code.

It is formatting an Excel spreadsheet.
0
 
LVL 11

Accepted Solution

by:
Dany Balian earned 500 total points
ID: 40373736
if all the linestyles are the same, and all colorindexes are the same within the same block, you can use something like this:

public sub formatItem(byref obj, byval fontName as string, byval fontbold as boolean, byval fontsize as integer, byval interiorcolorindex as integer, byval colorindex as integer, byval linestyle as integer, byval weight as integer, byval wraptext as boolean, byval rowheight as double)
With obj
    .Font.Name = fontname
    .Font.Bold = fontbold
    .Font.Size = fontsize
    .Interior.ColorIndex = interiorcolorindex
    .Borders(xlEdgeTop).LineStyle = linestyle
    .Borders(xlEdgeTop).Weight = weight
    .Borders(xlEdgeTop).ColorIndex = colorindex
    .Borders(xlEdgeBottom).LineStyle = linestyle
    .Borders(xlEdgeBottom).Weight = weight
    .Borders(xlEdgeBottom).ColorIndex = colorindex
    .Borders(xlEdgeRight).LineStyle = linestyle
    .Borders(xlEdgeRight).Weight = weight
    .Borders(xlEdgeRight).ColorIndex = colorindex
    .Borders(xlEdgeLeft).LineStyle = linestyle
    .Borders(xlEdgeLeft).Weight = weight
    .Borders(xlEdgeLeft).ColorIndex = colorindex
    .Borders(xlInsideVertical).LineStyle = linestyle
    .Borders(xlInsideVertical).Weight = weight
    .Borders(xlInsideVertical).ColorIndex = colorindex
    .Borders(xlInsideHorizontal).LineStyle = linestyle
    .Borders(xlInsideHorizontal).Weight = weight
    .Borders(xlInsideHorizontal).ColorIndex = colorindex
    .WrapText = wraptext
    .RowHeight = rowheight
End With

Open in new window


and you call it using:
call formatitem(c, "Arial", True, 12, 15, xlAutomatic, xlContinuous, xlThin, True, 54.75)

Open in new window

0
 

Author Closing Comment

by:Megin
ID: 40373791
That was exactly what I was looking for.

Thank you!
0
 
LVL 11

Expert Comment

by:Dany Balian
ID: 40373850
Glad i could help :)
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In the previous article, Using a Critera Form to Filter Records (http://www.experts-exchange.com/A_6069.html), the form was basically a data container storing user input, which queries and other database objects could read. The form had to remain op…
A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
Familiarize people with the process of utilizing SQL Server views from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Access…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now