Solved

Excel VBA code assist

Posted on 2014-12-06
9
230 Views
Last Modified: 2014-12-06
I have a procedure that "closes" a section...

I call this procedure via the line below:

zzEndSection wksReport1.Range("A5")...

The procedure starts as follows:

Private Sub zzEndSection(theRange As Range, theSection As String, theOffset As Integer, theStartRow As Integer)

theRange.Offset(theOffset, 0).EntireRow.Insert             <<<<<<<<<<<<<<< Line 1
theRange.Offset(theOffset, 1) = theSection & " Total"   <<<<<<<<<<<<<<< Line 2

If I check the value of "theRange" in line 1 and in line 2 "theRange" is "A5".

I have a starting procedure that is called via:

zzStartSection wksReport1.Range("A5")...

The procedure starts as follows:

Private Sub zzStartSection(theRange As Range, theOffset As Integer, theVerbiage As String)

theRange.Offset(theOffset, 0).EntireRow.Insert   <<<<<<<<<<<<<<< Line 1a
theRange.Offset(theOffset, 0).EntireRow.Select  <<<<<<<<<<<<<<<  Line 2a

When checking values, "theRange" in Line 1a is "A5" yet in Line 2a it is "A6"

Any idea why the starting and ending procedures don't treat the range the same?
0
Comment
Question by:classnet
9 Comments
 
LVL 45

Expert Comment

by:Martin Liss
ID: 40484828
Are you sure? Because when I do this and run Sub x, where A5 on my Sheet1 is "test", 'theRange' in both statements in the sub shows "test"

Sub x()
zzStartSection Sheets("Sheet1").Range("A5")
End Sub
Private Sub zzStartSection(theRange As Range)
Const theOffset = 1
theRange.Offset(theOffset, 0).EntireRow.Insert '  <<<<<<<<<<<<<<< Line 1a
theRange.Offset(theOffset, 0).EntireRow.Select ' <<<<<<<<<<<<<<<  Line 2a
End Sub

Open in new window

0
 
LVL 33

Expert Comment

by:Norie
ID: 40484830
What is the theOffset when you are calling each sub?
0
 

Author Comment

by:classnet
ID: 40484832
I'm going to post both calling statements and procedures:

Calling segment:
        'End the Status
        zzEndSection wksReport1.Range("A5"), currentStatus, currentRowOffset, startSubTotalRowCategory
        
        currentRowOffset = currentRowOffset + 1
        currentStatus = wksReport1.Range("A5").Offset(currentRowOffset, statusColumn - 1)

      End If
      currentStatus = wksReport1.Range("A5").Offset(currentRowOffset, statusColumn - 1)
      startSubTotalRowStatus = wksReport1.Range("A5").Offset(currentRowOffset, 0).Row
      
      zzStartSection wksReport1.Range("A5"), currentRowOffset, "Status: " & currentStatus

Open in new window


End session
Private Sub zzEndSection(theRange As Range, theSection As String, theOffset As Integer, theStartRow As Integer)

theRange.Offset(theOffset, 0).EntireRow.Insert
theRange.Offset(theOffset, 1) = theSection & " Total"
theRange.Offset(theOffset, 1).HorizontalAlignment = xlRight
theRange.Offset(theOffset, 1).Font.Bold = True
theRange.Offset(theOffset, 2) = "=SUBTOTAL(9,C" & theStartRow & ":C" & theRange.Offset(theOffset, 1).Row - 1 & ")"

Open in new window


Start session:

Private Sub zzStartSection(theRange As Range, theOffset As Integer, theVerbiage As String)

theRange.Offset(theOffset, 0).EntireRow.Insert
theRange.Offset(theOffset, 0).EntireRow.Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Open in new window


Am I overlooking something?
0
 
LVL 45

Expert Comment

by:aikimark
ID: 40484833
since the insert creates a new line before the current line, Excel moves everything down.  If your parameter was on A5 (row 5), the data in the cells on that row are now located on row 5
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:classnet
ID: 40484836
aikimark... why doesn't the range change in both procedures?
0
 
LVL 33

Accepted Solution

by:
Norie earned 500 total points
ID: 40484837
I can only replicate the behaviour you describe if theOffset is 0, and it happens in both subs.
0
 

Author Comment

by:classnet
ID: 40484842
It appears that "theRange" does NOT change unless the offset = 0...  I'll put some code in place to catch this...
0
 

Author Closing Comment

by:classnet
ID: 40484843
Thanks for the catch...
0
 

Author Comment

by:classnet
ID: 40484847
I simply changed all occurrences of A5 to A4 and started the offset at 1... all is well.
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
excel file 5 52
Excel 2013 Problem 12 48
Macro 3 21
Moving Range Names/Formulas over to new WB 21 16
This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
This Micro Tutorial will demonstrate in Microsoft Excel how to add style and sexy appeal to horizontal bar charts.

747 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

13 Experts available now in Live!

Get 1:1 Help Now