Davis Henderson
New Member
Hi All. I have several macros that I am trying to run at the same time. Each one has the same function as seen below that updates the page number where the value is found. Some of the macros grab the correct page number, but some don't. I am printing where the value is found, and they are always correct. For example, if the file is found on C2 on the 9th page, often the return value is C2.1 instead of the correct C2.9. I know that is a lot of information, but if there is anything in my code that could explain the pageNum Variable not consistently updating correctly, it would be greatly appreciated!
Code:
Option Explicit
Sub Find_DatDenverExp()
'Denver Exp Macro
Dim datatoFind As String, MySheet As String, FV As String
Dim aSh As Worksheet, fSh As Worksheet
Dim firstResult As Range
Dim secondResult As Range
Dim rng As Range
Dim LeftCell As Range
Dim leftValue As String
Dim RowCount As Integer
Dim rw As Long
Dim counter As Integer
Dim sheetNumber As Integer
Dim sheetCount As Integer
Dim findValue As Range
sheetNumber = ActiveWorkbook.Sheets.Count
For counter = 1 To sheetNumber
Sheets(counter).Activate
'Denver Exp Macro
Set rng = Cells.Find(What:="Denver Exp", after:=Sheet1.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False)
If Not rng Is Nothing Then
Exit For
Else
End If
Next counter
Set LeftCell = rng.Offset(0, -1)
leftValue = LeftCell.Value
'Ref. with one space after Ref.
If leftValue = "Ref. " Then
For rw = 1 To 10000
Set findValue = rng.Offset(rw, 0)
datatoFind = findValue
sheetCount = ActiveWorkbook.Sheets.Count
'Skipping the row that has a Zero
If Len(datatoFind) = 1 Then GoTo lastLine
'Stopping the macro where the values arer bold or grey
If Len(datatoFind) = 0 Or Not IsNumeric(datatoFind) Or findValue.Font.Bold Then Exit Sub
For counter = 1 To sheetCount
Sheets(counter).Activate
Set firstResult = Cells.Find(What:=datatoFind, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not firstResult Is Nothing Then
Set secondResult = Cells.FindNext(firstResult)
Debug.Print secondResult.Address
With secondResult
MySheet = IIf(InStr(secondResult.Parent.Name, "."), Split(secondResult.Parent.Name, ".")(0), Split(secondResult.Parent.Name)(0))
FV = MySheet & "." & pageNum8(secondResult)
End With
Else
End If
Next counter
With rng.Offset(rw, -1)
.Value = FV
.Font.Name = "Times New Roman"
.Font.Bold = True
.Font.Size = "10"
.Font.Color = vbRed
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
End With
lastLine:
Next rw
End If
End Sub
Function pageNum8(rng As Range)
Dim vA, hA
Dim iRow As Long, iCol As Long, I As Long
Dim pg8 As String
With rng.Parent
If .HPageBreaks.Count > 0 Then
ReDim hA(0 To .HPageBreaks.Count)
hA(0) = 1
For I = 1 To UBound(hA)
hA(I) = .HPageBreaks(I).Location.Row
Next
Else
ReDim hA(0 To 0)
hA(0) = 0
End If
If .VPageBreaks.Count > 0 Then
ReDim vA(0 To .VPageBreaks.Count)
vA(0) = 1
For I = 1 To UBound(vA)
vA(I) = .VPageBreaks(I).Location.Column
Next
Else
ReDim vA(0 To 0)
vA(0) = 0
End If
iRow = Application.Match(rng.Row, hA, 1)
iCol = Application.Match(rng.Column, vA, 1)
If .PageSetup.Order = xlDownThenOver Then
pg8 = (iCol - 1) * (.HPageBreaks.Count + 1) + iRow
Else
pg8 = (iRow - 1) * (.VPageBreaks.Count + 1) + iCol
End If
End With
pageNum8 = pg8
End Function
Last edited: