+ Reply to Thread
Results 1 to 2 of 2

Maintaining Hyperlinks when copying worksheet

Hybrid View

  1. #1
    Registered User
    Join Date
    08-16-2010
    Location
    Singapore
    MS-Off Ver
    Excel 2007
    Posts
    2

    Maintaining Hyperlinks when copying worksheet

    Hi all,

    I'm new to excel macros and have benefited greatly from this site.

    I collated excel spreadsheets different workbooks from a folder into a master spreadsheet.
    Thanks to the help given on this (and other) forums, I was able to do this successfully.

    However, all of the hyperlinks I had in the original spreadsheets disappeared in the master spreadsheet.

    I've tried numerous ways of adding the hyperlinks, but have ultimately be unsuccessful.

    Please take a look at my code and i'll greatly appreciate it if anyone could tell em how to proceed. Thanks

    Sub MasterWorksheet()
    
        Dim MyPath As String, FilesInPath As String
        Dim MyFiles() As String
        Dim SourceRcount As Long, FNum As Long
        Dim mybook As Workbook, BaseWks As Worksheet, BaseWbk As Workbook
        Dim sourceRange As Range, destrange As Range
        Dim rnum As Long, CalcMode As Long
        Dim FirstCell As String
        Dim HL As Hyperlink
                      
           ' Change this to the path\folder location of your files.
        MyPath = ActiveWorkbook.Path & "\Monitoring Folder"
        
        ' Add a slash at the end of the path if needed.
        If Right(MyPath, 1) <> "\" Then
            MyPath = MyPath & "\"
        End If
    
        ' If there are no Excel files in the folder, exit.
        FilesInPath = Dir(MyPath & "*.xl*")
        If FilesInPath = "" Then
            MsgBox "No files found"
            Exit Sub
        End If
    
        ' Fill the myFiles array with the list of Excel files
        ' in the search folder.
        FNum = 0
        Do While FilesInPath <> ""
            FNum = FNum + 1
            ReDim Preserve MyFiles(1 To FNum)
            MyFiles(FNum) = FilesInPath
            FilesInPath = Dir()
        Loop
    
        ' Set various application properties.
        With Application
            CalcMode = .Calculation
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
            .EnableEvents = False
        End With
    
        ' Change Worksheet'
        Set BaseWbk = ThisWorkbook
        Set BaseWks = BaseWbk.Worksheets(1)
        BaseWks.Rows("6:" & BaseWks.Rows.Count).Clear
        BaseWks.Name = "Forums and Bilateral Issues"
        rnum = 6
    
        ' Loop through all files in the myFiles array.
        If FNum > 0 Then
            For FNum = LBound(MyFiles) To UBound(MyFiles)
                Set mybook = Nothing
                On Error Resume Next
                Set mybook = Workbooks.Open(MyPath & MyFiles(FNum))
                On Error GoTo 0
    
                If Not mybook Is Nothing Then
                    On Error Resume Next
    
                    ' Change this range to fit your own needs.
                   With mybook.Worksheets("Forums")
       FirstCell = "A2"
       Set sourceRange = .Range(FirstCell & ":" & RDB_Last(3, .Cells))
       ' Test if the row of the last cell is equal to or greater than the row of the first cell.
       If RDB_Last(1, .Cells) < .Range(FirstCell).Row Then
          Set sourceRange = Nothing
       End If
    End With
    
    
                    If Err.Number > 0 Then
                        Err.Clear
                        Set sourceRange = Nothing
                    Else
                        ' If source range uses all columns then
                        ' skip this file.
                        If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
                            Set sourceRange = Nothing
                        End If
                    End If
                    On Error GoTo 0
    
                    If Not sourceRange Is Nothing Then
    
                        SourceRcount = sourceRange.Rows.Count
    
                        If rnum + SourceRcount >= BaseWks.Rows.Count Then
                            MsgBox "There are not enough rows in the target worksheet."
                            BaseWks.Columns.AutoFit
                            mybook.Close savechanges:=False
                            GoTo ExitTheSub
                        Else
    
                            ' Copy the file name in column A.
                            With sourceRange
                                BaseWks.Cells(rnum, "A"). _
                                        Resize(.Rows.Count).Value = MyFiles(FNum)
                            End With
    
                            ' Set the destination range.
                            Set destrange = BaseWks.Range("B" & rnum)
    
                            ' Copy the values from the source range
                            ' to the destination range.
                            With sourceRange
                                Set destrange = destrange. _
                                                Resize(.Rows.Count, .Columns.Count)
                            End With
                            destrange.Value = sourceRange.Value
                                              
                            rnum = rnum + SourceRcount
                        End If
                    End If
                    mybook.Close savechanges:=False
                End If
    
            Next FNum
            
            'Edit Column Width'
            BaseWks.Columns.AutoFit
            BaseWks.Columns("A:A").ColumnWidth = 10
            BaseWks.Columns("C:D").ColumnWidth = 15
            BaseWks.Columns("F:F").ColumnWidth = 12
            BaseWks.Columns("G:I").ColumnWidth = 50
            BaseWks.Rows.AutoFit
                  
          End If
        
        'Rename first column'
        Dim j As Long
          
        For j = 6 To BaseWks.Range("A6").End(xlDown).Row
            With BaseWks.Cells(j, 1)
            .Value = SplitsItems(.Value, "- ", 1)
            End With
        Next j
        
        For j = 6 To BaseWks.Range("A6").End(xlDown).Row
            With BaseWks.Cells(j, 1)
            .Value = Left(.Value, (Len(.Value) - 5))
            End With
        Next j
    
    'News'
    
    ' Change Worksheet'
        Set BaseWks2 = BaseWbk.Worksheets(2)
        BaseWks2.Rows("2:" & BaseWks.Rows.Count).Clear
        BaseWks2.Name = "News"
        rnum = 2
    
        ' Loop through all files in the myFiles array.
        If FNum > 0 Then
            For FNum = LBound(MyFiles) To UBound(MyFiles)
                Set mybook = Nothing
                On Error Resume Next
                Set mybook = Workbooks.Open(MyPath & MyFiles(FNum))
                On Error GoTo 0
    
                If Not mybook Is Nothing Then
                    On Error Resume Next
    
                    ' Change this range to fit your own needs.
                   With mybook.Worksheets("News")
       FirstCell = "A2"
       Set sourceRange = .Range(FirstCell & ":" & RDB_Last(3, .Cells))
       ' Test if the row of the last cell is equal to or greater than the row of the first cell.
       If RDB_Last(1, .Cells) < .Range(FirstCell).Row Then
          Set sourceRange = Nothing
       End If
    End With
    
    
                    If Err.Number > 0 Then
                        Err.Clear
                        Set sourceRange = Nothing
                    Else
                        ' If source range uses all columns then
                        ' skip this file.
                        If sourceRange.Columns.Count >= BaseWks2.Columns.Count Then
                            Set sourceRange = Nothing
                        End If
                    End If
                    On Error GoTo 0
    
                    If Not sourceRange Is Nothing Then
    
                        SourceRcount = sourceRange.Rows.Count
    
                        If rnum + SourceRcount >= BaseWks.Rows.Count Then
                            MsgBox "There are not enough rows in the target worksheet."
                            BaseWks2.Columns.AutoFit
                            mybook.Close savechanges:=False
                            GoTo ExitTheSub
                        Else
    
                            ' Copy the file name in column A.
                            With sourceRange
                                BaseWks2.Cells(rnum, "A"). _
                                        Resize(.Rows.Count).Value = MyFiles(FNum)
                            End With
    
                            ' Set the destination range.
                            Set destrange = BaseWks2.Range("B" & rnum)
    
                            ' Copy the values from the source range
                            ' to the destination range.
                            With sourceRange
                                Set destrange = destrange. _
                                                Resize(.Rows.Count, .Columns.Count)
                            End With
                            destrange.Value = sourceRange.Value
                                                    
                            rnum = rnum + SourceRcount
                        End If
                    End If
                    mybook.Close savechanges:=False
                End If
    
            Next FNum
            
            'Edit Column Width'
            BaseWks2.Columns.AutoFit
            BaseWks2.Columns("A:A").ColumnWidth = 10
            BaseWks2.Rows.AutoFit
            BaseWks2.Columns("C:C").NumberFormat = "mmm-yy" 'Date as Jul-10
    
          End If
        
        'Rename first column'
        Dim k As Long
          
        For k = 2 To BaseWks2.Range("A2").End(xlDown).Row
            With BaseWks2.Cells(k, 1)
            .Value = SplitsItems(.Value, "- ", 1)
            End With
        Next k
        
        For k = 2 To BaseWks2.Range("A2").End(xlDown).Row
            With BaseWks2.Cells(k, 1)
            .Value = Left(.Value, (Len(.Value) - 5))
            End With
        Next k
        
        
    
           
    ExitTheSub:
        ' Restore the application properties.
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = CalcMode
        End With
        End Sub

  2. #2
    Registered User
    Join Date
    08-16-2010
    Location
    Singapore
    MS-Off Ver
    Excel 2007
    Posts
    2

    Re: Maintaining Hyperlinks when copying worksheet

    bump. any help will be greatly appreciated. thanks

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1