are there any VBA consultants left ? - will pay for help

D

DonJ_Austin

These forums are great, but I really need some help quickly with something
that I MUST fix. How can I find someone within hours who can help
troubleshoot (Excel 2007 / VBA) for money ?
 
R

Rick Rothstein

If the "fix" is not too extensive, we might be able to handle it here for
you at no cost. Can you provide more information so we can see what you
actually need?
 
J

JLatham

Well, I hadn't planned on doing anything this weekend anyhow.

Send email with sample workbook, explanation of requirements, explanation of
problem to (remove spaces)
Help From @ JLatham Site. com
I probably won't be available for phone call until after 6 p.m. CST today.

But by looking quickly at your problem, I can at least figure out if it's in
my knowledge area to even begin to help with.
 
B

B Lynn B

I just have to say, it's really nice that you've offered compensation. It's
all too common in this forum for people who really don't want to learn VBA to
just expect others to do their work for them for free. Hats off to you!
 
C

Chip Pearson

I am a full time Office/Excel developer. Feel free to call me at (913)
549-4658.

Cordially,
Chip Pearson
Microsoft Most Valuable Professional,
Excel, 1998 - 2010
Pearson Software Consulting, LLC
www.cpearson.com
 
D

DonJ_Austin

Thanks to EVERYONE who reponded. To those who suggested I post more
information here, the issue is not one of syntax. When the code below is
executed, the condition is true (double-checked) but the conditional code is
not run. This same routine (and more) have been working in another place
with only one variable change, and that is been checked for existence and
spelling.

I will be following up with those who provided contact info so I can deliver
the program in question.



For iDSLineCounter = 1 To 20
If Sheets(strSheetName).Cells(4 + iDSLineCounter, 10) = "Y" Or _
Sheets(strSheetName).Cells(4 + iDSLineCounter, 10) = "y" Then

' *** Copy Bed Number
Sheets(strSheetName).Cells(4 + iDSLineCounter, 1).Copy
Sheets("Isolation").Cells(5 + iListCounter, 3).PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=False
' *** Copy Patient Name
Sheets(strSheetName).Cells(4 + iDSLineCounter, 2).Copy
Sheets("Isolation").Cells(5 + iListCounter, 4).PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=False

iListCounter = iListCounter + 1
End If

Next iDSLineCounter
 
M

Mike H

Hi,

I'm confused by the comments you make with regard to the code snippet
When the code below is
executed, the condition is true (double-checked)

If Sheets(strSheetName).Cells(4 + iDSLineCounter, 10) = "Y" Or _
Sheets(strSheetName).Cells(4 + iDSLineCounter, 10) = "y" Then

I assume you mean this 'Conditional code' is true. Setting aside that this
isn't the best way of checking for a 'Y' or 'y' in a cell when the code
executes if there is a Y or y in cell J5 (It's J5 on the first loop) of sheet
strSheetName then the next bit of code does execute and copies a couple of
cells (Paste values) to a worksheet called isolation.

What therefore is the issue?
Why is in J5 is it a Y or y or is it something else?
What cells do you think it should copy if the condition evaluates as TRUE, I
think it's A5 & B5?
--
Mike

When competing hypotheses are otherwise equal, adopt the hypothesis that
introduces the fewest assumptions while still sufficiently answering the
question.
 
D

Dave Peterson

I don't see anything wrong with your code. I'm gonna guess that it's your data
that doesn't match what you want -- maybe there's an extra space
(leading/trailing) in that field.

You could check it again or write your code to eliminate those extra spaces:

With Worksheets(strSheetName)
For iDSLineCounter = 1 To 20
If Trim(LCase(.Cells(4 + iDSLineCounter, 10).Value)) _
= LCase("Y") Then
' *** Copy Bed Number
.Cells(4 + iDSLineCounter, 1).Copy
Worksheets("Isolation").Cells(5 + iListCounter, 3).PasteSpecial
_
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
' *** Copy Patient Name
.Cells(4 + iDSLineCounter, 2).Copy
Worksheets("Isolation").Cells(5 + iListCounter, 4).PasteSpecial
_
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
iListCounter = iListCounter + 1
End If
Next iDSLineCounter
end with

(I added trim() and compared using lcase() on both sides of the comparison
operator.)

The with/end with saves some typing and (I think) makes it easier to read.
 
D

Dave Peterson

ps. Watch for line wrap.

Dave said:
I don't see anything wrong with your code. I'm gonna guess that it's your data
that doesn't match what you want -- maybe there's an extra space
(leading/trailing) in that field.

You could check it again or write your code to eliminate those extra spaces:

With Worksheets(strSheetName)
For iDSLineCounter = 1 To 20
If Trim(LCase(.Cells(4 + iDSLineCounter, 10).Value)) _
= LCase("Y") Then
' *** Copy Bed Number
.Cells(4 + iDSLineCounter, 1).Copy
Worksheets("Isolation").Cells(5 + iListCounter, 3).PasteSpecial
_
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
' *** Copy Patient Name
.Cells(4 + iDSLineCounter, 2).Copy
Worksheets("Isolation").Cells(5 + iListCounter, 4).PasteSpecial
_
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
iListCounter = iListCounter + 1
End If
Next iDSLineCounter
end with

(I added trim() and compared using lcase() on both sides of the comparison
operator.)

The with/end with saves some typing and (I think) makes it easier to read.
 
J

JLatham

First - the Fix!!
It was a head scratcher for a file, not readily apparent unless you really
dig into the code a bit. First clue: there is NOT an Option Explicit
statement in the module.
Second clue: in that procedure what was NOT shown in the code he put up here
were 3 lines just ahead of it:
For iSheetIndex = iPrevIsol To iCurrentDay
strSheetName = iSheetIndex
Sheets(strSheetName).Activate

Because strSheetName was created 'on the fly' it took on the integer typing
of iSheetIndex!! and so when Sheets(strSheetName) was used in the code, VBA
interpreted it as
Sheets(1) instead of Sheets("1") as intended!!
Sheets(1) happens to be a worksheet named "workdata", not "1" and on
"workdata", J5 is empty, so the test for = "Y or ="y" legitimately failed.

It took me about a half-hour of head scratching which led to thumb sucking
numbness before I figured it out.

I didn't charge him any time for it -- seemed a good way to introduce myself
to him, and we seem to have struck up some sort of agreement. So ain't 100%
true what they say about Okies not being able to get along with Texicans!!
 
J

JLatham

I actually took a belt, suspenders and duct tape too solution:

I explicitely Dim'd strSheetName as String at the start of the module, then
at the assignment statement I went with
strSheetName = Trim(Str(iSheetIndex))

But cStr would have probably been the more efficient solution.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top