Requirement:
The user has two file in same Directory. One is The Converter.xlsm and the other one the user received every day through email. The name of the file and worksheet is variable.
The user wants to copy data from that variable workbook, range ("A5:J5") till last but one row to the Convert.xlsm, worksheet ("Sheet1") from A4.
Solution:
Sub Main() Dim sWB As String, wb As Workbook, tf As Boolean, r as Range 'Open the Variable Workbook if not open and set reference. sWB = FileOpen(ThisWorkbook.Path) tf = IsWorkbookOpen(sWB) If Not tf Then Set wb = Workbooks.Open(sWB, ReadOnly:=True) Else Set wb = Workbooks(sWB) End If 'Exit if Sheet1 does not exist in Variable workbook. If Not WorkSheetExists("Sheet1", wb.Name) Then MsgBox "Sheet1 does not exist in: " & vbLf & wb.Name, vbCritical, "Macro Ending" GoTo TheEnd End If 'Set and copy the range from Variable workbook and paste to ThisWorkbook. With wb.Worksheets("Sheet1") Set r = .Range("A5:J" & .Cells(.Rows.Count, "A").End(xlUp).Row - 1) r.Copy ThisWorkbook.Worksheets("Sheet1").Range("A4") End With TheEnd: If Not tf Then wb.Close False End Sub 'https://msdn.microsoft.com/en-us/library/office/aa219834(v=office.11).aspx Function FileOpen(initialFilename As String) As String With Application.FileDialog(msoFileDialogOpen) .ButtonName = "&Open" .initialFilename = initialFilename 'Change the contents of the Files of Type list. 'Empty the list by clearing the FileDialogFilters collection. .Filters.Clear 'Add a filter that includes all files. .Filters.Add "All files", "*.*" '.Filters.Add "Excel (*.xls)", "*.xls", 1 .Filters.Add "Excel", "*.xls; *.xlsx; *.xlsm", 1 .Title = "File Open" .AllowMultiSelect = False If .Show = -1 Then FileOpen = .SelectedItems(1) End With End Function Function IsWorkbookOpen(stName As String) As Boolean Dim Wkb As Workbook On Error Resume Next ' In Case it isn't Open Set Wkb = Workbooks(stName) If Not Wkb Is Nothing Then IsWorkbookOpen = True 'Boolean Function assumed To be False unless Set To True End Function 'WorkSheetExists in a workbook: Function WorkSheetExists(sWorkSheet As String, Optional sWorkbook As String = "") As Boolean Dim ws As Worksheet, wb As Workbook On Error GoTo notExists If sWorkbook = "" Then Set wb = ActiveWorkbook Else Set wb = Workbooks(sWorkbook) 'sWorkbook must be open already. e.g. ken.xlsm, not x:\ken.xlsm. End If Set ws = wb.Worksheets(sWorkSheet) WorkSheetExists = True Exit Function notExists: WorkSheetExists = False End Function
Obtained from the OzGrid Help Forum.
Solution provided by Kenneth Hobson.
See also: Index to Excel VBA Code and Index to Excel Freebies and Lesson 1 - Excel Fundamentals and Index to how to… providing a range of solutions and Index to new resources and reference sheets
See also:
How to use VBA script to count files/subfolders using a range from WB for the root folder |
How to add sequential numbers between values, within a range |
How to locate numbers 1 to 10 in a range |
How to loop through different ranges |
Click here to visit our Free 24/7 Excel/VBA Help Forum where there are thousands of posts you can get information from, or you can join the Forum and post your own questions.