ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Macro Help (https://www.excelbanter.com/excel-programming/355038-macro-help.html)

Celt[_3_]

Macro Help
 

Thanks in adavance for any help provided!!

I am very new to VBA code. I am trying to create a macro for use in a
budget template. My template has accounts across the top and cost
drivers down the side. My general ledger will not accept pennies on
the dollar in budgetary figures. I have used data validation to
prevent this, but users can still paste over the validation. I was
looking for a simple macro that would search the range of entered
figures (from Acct 1 & ABC thru Acct 4 & PQR ... below) and highlight
any cell containing a decimal yellow. Heres the catch, once the error
is corrected, I'd like the cell to return to normal. I was thinking
the best way to do that was once the macro found a cell with a decimal,
it would enter some sort of conditional format into the cell. I was
also hoping there was a way for the macro to indicate in a cell on
another spreadsheet tab if an error was present (ie. the cell turns red
indicating an error or green indicating no error). My information looks
like this...


Acct 1 Acct 2 Acct 3 Acct 4
ABC 1200.00
DEF 1300.00
GHI 1000.00 2000.00
JKL 1500.50
MNO
PQR 1600.00


Budget 2200.00 2800.50 2000.00 1600.00

on my spreadsheet the amount under Acct 1 & ABC oocupies cell B2.

If anymore info is needed, I will gladly provide it. Thanks again for
any help.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hello Celt,

Why don't you try conditional formatting with a formula like :
=INT(B2)/B2<1
and your selection of format to see your decimals

HTH
Cheers
Carim


Celt[_4_]

Macro Help
 

Thanks Carim.

However, people are going to have the ability to paste data into this
template and that will wipe out any conditional formating I already
have in place. That's why I was hoping someone could help me come up
with a macro that would use dynamic ranges to check all the data
entered and identify errors as found.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hello Celt,

A macro solution is always possible ...
However, one has to fully understand your constraints...
An important process is the one that extracts data from the Budget to
go to the General Ledger, how is it done today ?

Carim


Carim[_3_]

Macro Help
 
Hello Celt,

In the meantime, the following macro will color in red cells which have
decimals ...

Sub MacroRed()
Dim i As Long
Dim j As Long
Dim Lrow As Long
Dim Lcol As Long

Range("A1").Select
Selection.SpecialCells(xlCellTypeLastCell).Select
Lrow = ActiveCell.Row
Lcol = ActiveCell.Column
For i = 2 To Lrow
For j = 2 To Lcol
Application.Goto Cells(i, j)
If Int(ActiveCell.Value) / ActiveCell.Value < 1 Then
ActiveCell.Font.ColorIndex = 3
End If
Next j
Next i
Range("A1").Select
End Sub


HTH
Cheers
Carim


Celt[_5_]

Macro Help
 

Thank you Carim!!

Getting my budget into my general ledger is a 2 part process. I use
contactenate formula to pull the required pieces of the informatio
into the "upload" format. Then a general ledger upload process pull
the info in. It won't take pennies on the dollar when uploading, so
was trying to find a way to prevent my staff from entering decimals.
have used Data Validation, but they can just copy and paste over i
nullifying the Validation. So I was looking for a macro that woul
search the "input range" and turn any cell with a decimal yellow.
However, once they fix the error I would like the cell to go back o
normal...that's why i was toying with a macro that somehow use
conditional formatting.

Thank you for this macro!! I am going to play around with it and se
what I can get it to do

--
Cel
-----------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...fo&userid=1941
View this thread: http://www.excelforum.com/showthread.php?threadid=51879


Carim[_3_]

Macro Help
 
Hello Celt,

It seems to me that you could make your life easier if ...
in your " general ledger upload process ", you could use the integer
function ...
Int(anycell) will systematically extract the number without its
decimals ...

HTH
Cheers
Carim


Celt[_8_]

Macro Help
 

Hi Carim,

That actually is a much better idea (I knew I was making this too
complicated!!). That would solve my upload issues.

However, I would still like the macro to identify the decimals in the
input area. I am trying to get the employees to learn to stop entering
pennies on the dollar. So to break them of that habit, I would love to
be able to point out the error (even though with the Int(anycell)
suggestion.....it would no longer hinder my upload process).

In the macro you gave me earlier, I get a "Run-time error '6':
Overflow" message. I was testing the macro to see what it did... I have
my data in a single column from A1:A9 with no blanks. Excel gets stuck
on this line...

If Int(ActiveCell.Value) / ActiveCell.Value < 1 Then

Any idea why excel gets caught here?

Thanks again for your time and help Carim. I really appreciate it.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Celt,

The original macro was designed to scan an area starting in B2, down to
an unknow number of lines and across an unknow number of columns ...
hence the use of i and j starting from 2 and going to the lasr row and
last column of your area ...
Should you want to test the macro on A1: A9 ...

Sub MacroRed()
Dim i As Long
Dim Lrow As Long

Range("A1").Select
Selection.SpecialCells(xlCellTypeLastCell).Select
Lrow = ActiveCell.Row
For i = 1 To Lrow
Application.Goto Cells(i, 1)
If Int(ActiveCell.Value) / ActiveCell.Value < 1 Then
ActiveCell.Font.ColorIndex = 3
End If
Next i
Range("A1").Select
End Sub

By the way the colorindex 3 means Red .. you can pick any other color
.... yellow is 6 ...

HTH
Cheers
Carim


Celt[_11_]

Macro Help
 

Sorry.

I get it now.

Thank you Carim.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Celt[_10_]

Macro Help
 

Sorry.

I get it now.

Thank you Carim.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Celt[_13_]

Macro Help
 

quick question.... I have altered the code I was given earlier in this
thread. Works well up till it encounters a cell that contains text. I
wanted to add an arguement that allows the macro to identify if a cell
contains a number or text. If text then just skip to the next cell.
If a number then preform these steps. I have been messing around with
Isnumeric and Istext. Any ideas? Here is the code:

Sub MacroYellow()
Dim i As Long
Dim j As Long
Dim Lrow As Long
Dim Lcol As Long

Range("A1").Select
Selection.SpecialCells(xlCellTypeLastCell).Select
Lrow = ActiveCell.Row
Lcol = ActiveCell.Column
For i = 6 To Lrow
For j = 4 To Lcol
Application.Goto Cells(i, j)
If ActiveCell.Value < Fix(ActiveCell.Value) Then
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlNotEqual, _
Formula1:="Fix (ActiveCell.Value)"
Selection.FormatConditions(1).Interior.ColorIndex = 6
End If
Next j
Next i
Range("A1").Select
End Sub


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hi Celt,

Congratulations on your progress ...
You are right IsNumeric will solve your problem ...

Just after Application.Goto Cells(i, j)
insert a new condition
If IsNumeric(ActiveCell.Value) = True Then
followed by the existing code ...
Do not forget to insert a new End If just before the line Next j

HTH
Cheers
Carim


Celt[_14_]

Macro Help
 

Thanks Carim! I hope I'm not bugging you too much.

Your solution worked great, but raised two questions:

1. As of now, this macro changes the conditional format of a cell that
has a decimal. My question is, if I go into the spreadsheet and alter
the highlighted decimal to a whole number, the cell remains yellow. I
am thinking it is beacause of the way the macro enters the conditional
formatting arguement like so...

="Trunc(ActiveCell.Value)"

is there a way around this? Some adjustment that I can make that will
get rid of the " " and actually input the active cell adress (ie. D14
or whatever it may be)?


2. I would like to change the area the macro is searching. Right now
it is searching from cell D6 over and down to the last line of my data
in column E. how would I go about limiting the search area to D6:-N-40
(N=as many columns as there is data present).

thanks again for you help!


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hi Celt,

If I may congratulate you again on your progress ...!!!
For somebody who started in VBA just a while ago, it is truly
impressive ...

To answer your questions :
1. Since you are intervening manually, you will need to use event
macros, which are macros stored in the specific worksheet ... not in a
"common" module like standard macros ...
In the sheet, you have to input following code

Private Sub Worksheet_Change(ByVal Target As Range)
If (Int(Target.Value) / Target.Value) = 1 Then
Target.Interior.ColorIndex = xlNone
End If
End Sub

2. As far as playing around with the scanned area, I do not understand
if you are talking about the same macro, because it is exactly supposed
to do that Lrow is LastRow and Lcol is LastColumn

HTH
Cheers
Carim


Celt[_15_]

Macro Help
 

Ok, I think I am following you Carim (thanks so much for your patience
and guidance!!!).

I read up on the event macros real quick. I have dropped the code you
gave me into the specific worksheet. How is this event macro activated
(right now, it doesn't seem to be doing anything).

I don't know what the deal is with the scan area. I am hoping I didn't
do something to mess it up. Right now it is only scanning columns D and
E down to the last row of data entered. If it would be easire for me to
share my spreadsheet with you so you can see what's going on, just let
me know.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Celt[_16_]

Macro Help
 

I think I got the event macro working. I used this.

Private Sub Worksheet_Change(ByVal Target As Range)
If (Int(Target.Value) / Target.Value) = 1 Then
Target.FormatConditions.Delete
End If
End Sub

It seems to work. Once the Macro is run, identifies the decimals and I
go in and "correct" them, removing the conditional formatting with the
event macro makes the cell go back to normal. For some reason I
couldn't get this statement to work.

Interior.ColorIndex = xlNone

It left the cell yellow.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Celt,


Glad you could fix the yellow/non-yellow with the "private sub" macro
....

To answer to an earlier remark, these macros are events macro, i.e. the
macros are triggered
by the event ... there is no intervention needed ... But the one which
is the event itself ...
in your example, "removing the decimals" is the event ... which
triggers the private sub which deletes the Format conditions ...

As far as monitoring the range your macro is scanning and therefore
correcting, there are only two possibilities :
1. either you hard-code it , i.e the sheet range is for example D6:P500
and in your macro, you make this info appear ... , or
2. your range will keep on changing and you do not want to go back to
your macro, each and every time to adjust the range accordindly.
In this case, you have to use Variables which will "recognize" the last
row and last column used ... before the macro even starts to perform
its actual job ...

I hope these explanations are clear enough ...
If not, do not hesitate to drop a message ...

HTH
Cheers
Carim


Celt[_17_]

Macro Help
 

Very clear explanations, thanks Carim!

I have everything working the way I want it to now, with the exception
of the "scan area". I am using the Lcol and Lrow statement you
originally gave me, but for some reason the macro is on "scanning"
columns D & E. My spreadsheet does have a small amount of data (both
text and numeric) in columns F through I. The macro is just ignoring
it.

Is it possible for spreadsheet formatting or data validation (or
somthing else) to hinder the macro or the Lcol statement?


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hello Celt,

I am glad to hear you are making good progress ...!!!
As far the last cell is concerned, if you are using xl2000, there is
sometimes a bug related to spreadsheet formatting, with the instruction
xlCellTypeLastCell, which is used to identify the "bottom end" cell.
However, with worksheets which have been extensively manipulated,
sometimes this function gets corrupted.
Two tiny recommendations :
1. Insert a new worksheet, in which you copy paste all the cells of the
worksheet you are currently using ... Then, in this newly created
worksheet hit "end" "home" to visualize where Excel jumps to ... it
should be the clean last cell ... if so ... in VB, don't forget to copy
your private modules from the old to the new worksheet and then get rid
of your old worksheet ...
2. To be on the safe side, in your macro just before the line
Selection.SpecialCells(xlCellTypeLastCell).Select
go and insert the following line
ActiveSheet.UsedRange

Go ahead and test your updated macro in your new worksheet ...
everything should be fine ...
If some reason, it does not fix your problem , do not hesitate to drop
me a line ...

HTH
Cheers
Carim


Celt[_20_]

Macro Help
 

AHHHHhhhhh!!!

That's the problem exactly. I was testing this macro on a spreadsheet
I created a year ago on XL2000. We are now using XL2003.

It works just fine now.

Thanks for all your help Carim. I truly do appreciate it!


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Glad to see that you are truly enjoying your new VBA experience...
It' s a lot of fun ... and you obviously have what is needed to become
excel-lent ... !!!
All the Best

Carim


Celt[_21_]

Macro Help
 

Thanks very much Carim!:)

Hey if you have a second, have a look at this post...

http://www.excelforum.com/showthread...highlight=celt

Its another macro I am writing for the same spreadsheet. I'm having
trouble with a Text comparison argument.


--
Celt
------------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...o&userid=19413
View this thread: http://www.excelforum.com/showthread...hreadid=518793


Carim[_3_]

Macro Help
 
Hi Celt,

Take a look at Chip's brilliant solution :
http://cpearson.com/excel/CFColors.htm

HTH
Cheers
Carim


Carim[_3_]

Macro Help
 
Celt,

Before going any further ...
Replace your line :
If ActiveCell.Value = Evaluate("OR(EXACT(" & ActiveCell.Value &
",DropDown))") = False Then
by the line :
If Evaluate("OR(EXACT(" & ActiveCell.Value & ",DropDown))") Then
and see what happens ...
Tom is certainly on the most knowledgeable MVP ... !!!
Cheers
Carim


Celt[_22_]

Macro Help
 

Carim,

I absolutely know Tom knows his stuff. I see his name and advic
everywhere when researching how to code in VB (and he's alway
right!!). I wouldn't dream of arguing coding with anyone on this sit
(not with my meager coding skills :) .

I dropped his coding in to my macro and I am getting a "type mismatch
error on a code that should return a "True" result with this functio
(ie. input exactly the same in my scanned area as it appears in th
checklist). I think that error refers to having too many elements i
my array???

I'll keep playing around with it.

Thanks for the link to the Pearson site

--
Cel
-----------------------------------------------------------------------
Celt's Profile: http://www.excelforum.com/member.php...fo&userid=1941
View this thread: http://www.excelforum.com/showthread.php?threadid=51879



All times are GMT +1. The time now is 02:05 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com