, I have macro here that needs adjustment. Basically what this macro is suppose to do is select the value from a drop down and go to another worksheet (titled "master) and retrive all the information matching that value along the row. however currently it is not doing that. The macro is below --X-- Sub PopulateData()
Dim LCIMOutlet As Integer Dim LSAPNumber As String Dim LRegion As String Dim LRow As Long Dim LFound As Boolean 'Retrieve project number number LCIMOutlet = Range("L4").Value 'Move to Sheet1 Sheets("Master").Select LFound = True LRow = 2 Do While LFound = False 'Found matching project, now update address and phone number information on Sheet2 If Range("B" & LRow).Value = LCIMOutlet Then LFound = True LSAPNumber = Range("C" & LRow).Value LRegion = Range("D" & LRow).Value Sheets("Sheet2").Select Range("K6").Value = LSAPNumber Range("K8").Value = LRegion 'Encountered a blank project number (assuming end of list on Sheet1) ElseIf IsEmpty(Range("B" & LRow).Value) = True Then MsgBox ("No match was found for combo box selection.") Exit Sub End If LRow = LRow + 1 Loop
End Sub
Vish,
LFound = True LRow = 2 Do While LFound = False
that says to loop while Lfound = False, but when you first get there you have set lFound = true so the loop is never entered. I would suggest
LFound = False LRow = 2 Do While LFound = False
I can't say the code will then do all that you want, but that should eliminate your major problem.
, I have a small macro that needs a slight adjustment. The objective of the macro is to split values into different worksheet everytime a change in Column A occurs. I.E Create a differnt worksheet when Column A number changes from 1 to 2. Currently it is creating additional worksheet which i dont need it to do, also the name of the worksheet should ONLY represent the value in column A. Macro is below Sub Splitter()
n = 2
Again:
lastn = Evaluate("match(true,A" & n & "<>OFFSET(A" & n & ",1,0,20000,1),0)") + n - 1 from = Cells(n, 1).Value too = Cells(lastn + 1, 1).Value If too = "" Then too = "end" Worksheets.Add.Name = from & " - " & too Sheet1.Range("A" & n & ":H" & lastn).Copy Sheets(from & " - " & too).Range("A2") Sheets(from & " - " & too).Range("A1:H1").Value = Array("store_No", "Fixture Type", "POG Name", "Position", "Title", "UPC", "Vendor Name", "Item Nbr") n = lastn + 1 Sheet1.Select If Cells(n, 1).Value <> "" Then GoTo Again
End Sub
Vish,
so are you saying that there are already worksheets named for the values in column A - that is my assumption of what you are asking.
Anyway, this code should handle the situation whether they exist or not:
Sub Splitter() Dim sh1 As Worksheet, sh As Worksheet Dim n As Long, first As Long, last As Long Dim i As Long
Set sh1 = ActiveSheet n = 2 first = 2 last = sh1.Cells(sh1.Rows.Count, 1).End(xlUp).Row For i = n To last If sh1.Cells(i, 1) <> sh1.Cells(i + 1, 1) Then Set sh = Nothing On Error Resume Next Set sh = Worksheets(sh1.Cells(i, 1).Text) On Error GoTo 0 If sh Is Nothing Then Worksheets.Add After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = sh1.Cells(i, 1).Text Set sh = Worksheets(Worksheets.Count) sh.Range("A1:H1").Value = Array("store_No", _ "Fixture Type", "POG Name", "Position", "Title", _ "UPC", "Vendor Name", "Item Nbr") End If sh1.Range(sh1.Cells(first, 1), _ sh1.Cells(i, 1)).Resize(, 8).Copy _ sh.Cells(sh.Rows.Count, 1).End(xlUp).Offset(1, 0) first = i + 1 End If Next i
End Sub
tested against my understanding of what you want to do and it worked for me. Obviously I could have a faulty understanding, so test this on a copy of your workbook until you are satisfied it works as you want.
QUESTION: , I have a macro here that is suppose to adjust the print parameters but cant seem to adjust so that it fits all of the information onto one page. Macro is below Vish
Sub ShowPrintParameters() ' Keyboard Shortcut: Ctrl+t ' ' Dim sh1 As Worksheet, bk As Workbook Dim sh As Worksheet, sPath As String Dim sName As String, rw As Long Set sh1 = ActiveSheet
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Documents and Settings\nishantm\Desktop\rob\" .Title = "Please selected the folder containing the files you would like to consolidate." .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls")
rw = 2
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh1.Cells(rw, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh1.Cells(rw, 2) = sh.Name Set r = sh.UsedRange If r.Width > 0.5 * r.Height Then
s = xlLandscape
Else
s = xlPortrait
End If
sh.PageSetup.Orientation = s sh.PageSetup.CenterHorizontally = True sh.PageSetup.CenterVertically = True
sh1.Cells(rw, 1) = r.Width sh1.Cells(rw, 1) = r.Height sh1.Cells(rw, 1) = s
With sh.PageSetup .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = True .PrintGridlines = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed End With
rw = rw + 1 Next sh
'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True
sName = Dir() Loop
End Sub
ANSWER: Vish,
when you use
.FitToPagesWide = 1 .FitToPagesTall = 1
you also need to set Zoom to false
.Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1
Hopefully it is as simple as that.
Sub ShowPrintParameters()
' Keyboard Shortcut: Ctrl+t
'
'
Dim sh1 As Worksheet, bk As Workbook
Dim sh As Worksheet, sPath As String
Dim sName As String, rw As Long
Set sh1 = ActiveSheet
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Documents and Settings\nishantm\Desktop\rob\" .Title = "Please selected the folder containing the files you would like to consolidate." .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls")
rw = 2
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh1.Cells(rw, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh1.Cells(rw, 2) = sh.Name Set r = sh.UsedRange If r.Width > 0.5 * r.Height Then s = xlLandscape Else s = xlPortrait End If
sh.PageSetup.Orientation = s sh.PageSetup.CenterHorizontally = True sh.PageSetup.CenterVertically = True
sh1.Cells(rw, 1) = r.Width sh1.Cells(rw, 1) = r.Height sh1.Cells(rw, 1) = s
With sh.PageSetup .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = True .PrintGridlines = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed End With
rw = rw + 1 Next sh
'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True
sName = Dir() Loop
End Sub
---------- FOLLOW-UP ----------
QUESTION: , The macro above works perfectly now. Just one more question Can we add a parameter that enables it to provide a summary of the workbook and worksheet it has looped through and adjusted? And the adjustments it has made i.e from landscape to portraite Thanks Vish
Vish,
perhaps this:
Sub ShowPrintParameters() ' Keyboard Shortcut: Ctrl+t ' ' Dim sh1 As Worksheet, bk As Workbook, r As Range Dim sh As Worksheet, sPath As String, s As Variant Dim sName As String, rw As Long, rw2 As Long, sh2 As Worksheet Dim l As Long Set sh1 = ActiveSheet ' add a sheet as the end to record the changes made Application.ScreenUpdating = False Worksheets.Add after:=Worksheets(Worksheets.Count) Set sh2 = Worksheets(Worksheets.Count) sh1.Activate Application.ScreenUpdating = True sh2.Range("A1:G1") = Array("Workbook", "Worksheet", "Changed from", "Changed to", _
"Height", "Width", "Constant")
sh2.Range("A1:G1").Font.Bold = True rw2 = 2 With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Documents and Settings\nishantm\Desktop\rob\" .Title = "Please selected the folder containing the files you would like to consolidate." .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls")
rw = 2
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh2.Cells(rw2, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh2.Cells(rw2, 2) = sh.Name l = sh.PageSetup.Orientation If l = 1 Then
sh2.Cells(rw2, 3) = "Portrait"
Else
sh2.Cells(rw2, 3) = "Landscape"
End If Set r = sh.UsedRange If r.Width > 0.5 * r.Height Then s = xlLandscape sh2.Cells(rw2, 4) = "Landscape" Else s = xlPortrait sh2.Cells(rw2, 4) = "Portrait" End If
sh.PageSetup.Orientation = s sh.PageSetup.CenterHorizontally = True sh.PageSetup.CenterVertically = True
sh2.Cells(rw2, 6) = r.Width sh2.Cells(rw2, 5) = r.Height sh2.Cells(rw2, 7) = s
With sh.PageSetup .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = True .PrintGridlines = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed End With
rw = rw + 1 rw2 = rw2 + 1 Next sh
'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True
sName = Dir() Loop
End Sub
Hi Jan, I have a macro here that set the print parameter, but i cant seem to figure out why it is not setting the parameter of "Fit To one Page" even though I've included into the macro. Vish Sub ShowPrintParameters() ' Keyboard Shortcut: Ctrl+t ' ' Dim sh1 As Worksheet, bk As Workbook Dim sh As Worksheet, sPath As String Dim sName As String, rw As Long Set sh1 = ActiveSheet
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Documents and Settings\nishantm\Desktop\rob\" .Title = "Please selected the folder containing the files you would like to consolidate." .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls")
rw = 2
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh1.Cells(rw, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh1.Cells(rw, 2) = sh.Name Set r = sh.UsedRange If r.Width > 0.5 * r.Height Then
s = xlLandscape
Else
s = xlPortrait
End If
sh.PageSetup.Orientation = s sh.PageSetup.CenterHorizontally = True sh.PageSetup.CenterVertically = True
sh1.Cells(rw, 1) = r.Width sh1.Cells(rw, 1) = r.Height sh1.Cells(rw, 1) = s
With sh.PageSetup .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintHeadings = True .PrintGridlines = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed End With
rw = rw + 1 Next sh
'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True
sName = Dir() Loop
End Sub
Not sure why, but using this seems to do the trick:
.LeftMargin = Application.InchesToPoints(0.75) .RightMargin = Application.InchesToPoints(0.75) .TopMargin = Application.InchesToPoints(1) .BottomMargin = Application.InchesToPoints(1) .HeaderMargin = Application.InchesToPoints(0.5) .FooterMargin = Application.InchesToPoints(0.5) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments .PrintQuality = -1 .CenterHorizontally = False .CenterVertically = False .Orientation = xlPortrait .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = 1 .PrintErrors = xlPrintErrorsDisplayed
QUESTION: Hi Isaac, I have a macro below that needs slight adjustment that i cant seem to figure out. The problem is that the macro loops through the files and adjusts the print orientation of the files to the criteria i've set, however i cant seem to add a criteria where it sets the margins at "0" inches across the page. The macro is below ---X--- Sub ShowPrintParameters() ' Keyboard Shortcut: Ctrl+t ' ' Dim sh1 As Worksheet, bk As Workbook Dim sh As Worksheet, sPath As String Dim sName As String, rw As Long Set sh1 = ActiveSheet
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\Documents and Settings\nishantm\Desktop\rob\" .Title = "Please selected the folder containing the files you would like to consolidate." .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls")
rw = 2
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh1.Cells(rw, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh1.Cells(rw, 2) = sh.Name Set r = sh.UsedRange If r.Width > 0.5 * r.Height Then
s = xlLandscape
Else
s = xlPortrait
End If
sh.PageSetup.Orientation = s sh.PageSetup.CenterHorizontally = True sh.PageSetup.CenterVertically = True
sh1.Cells(rw, 1) = r.Width sh1.Cells(rw, 1) = r.Height sh1.Cells(rw, 1) = s rw = rw + 1 Next sh
'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True
sName = Dir() Loop
End Sub
ANSWER: Right before this line:
rw = rw + 1
I would add this block of code:
______________________________________________________________________________
With sh.PageSetup
.LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0)
End With ______________________________________________________________________________
If you really want to set margins to zero?
---------- FOLLOW-UP ----------
QUESTION: Hi Isaac, Thank you so much for your help, just wanted to ask a follow regarding fit to one page parameter. I want to be able to fit all of the information(Headers) into one page with the margins set at 0. I tried adding
.FitToPagesWide = 1 .FitToPagesTall = 1
after the last line of ".FooterMargin..." but was not able to accomplish my parameter. So just wanted to know how can i add a fit to one page paramter on the macro. I've only made the adjustments recomended by you, so did not want to send you another duplicate of the macro
ANSWER: to be honest with you, this kind of code, is not something I really know or memorize, I think few people do - cuz the macro recorder can spit out the code for you and who wants to memorize this crap? LOL
So the last code I posted was something I recorded with macro recorded, I Just tweaked it from saying With ActiveSheet.PageSetup, to fit your object "sh", and I suggested where to put it in your code.
Anyway having said all that, I got the same result you did, in terms of the
.FitToPagesWide = 1 .FitToPagesTall = 1
So how does it not work you mean you get an error? or what happens in regard to the fit?
---------- FOLLOW-UP ----------
QUESTION: No it just doesn't fit to one page, it separates the last 2 columns onto another page instead all of the headers in one page.(hopefully that makes). And where did you place those 2 parameters? Main purpose of this macro is that it should fit all of the information onto one page, instead of splitting the columns into different pages. Vish
I would place them in the With statement:
With sh.PageSetup
.LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .FitToPagesWide = 1 .FitToPagesTall = 1
End With
Is there something else that can be changing the print settings before the code prints it? I actually don't see any code that prints it out??
Hi I have a macro here that I've created but seem to hit a wall. The main objective of this macro is to loop through a folder with 100+files and sort column E ascending. The macro is below. Sub Macro1() ' ' ' Dim wk As Workbook Dim s As Worksheet Dim addre As String Dim shtOrigin As String Dim Rnge As String With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\" .Title = "Please Select the Folder to Loop" .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls") rw = 2 Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) sh1.Cells(rw, 1) = bk.Name For Each sh In bk.Worksheets sh.Activate sh1.Cells(rw, 2) = sh.Name Set r = sh.UsedRange Range("E:E").Select Selection.Sort Key1:=Range("E:E"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBot_ DataOption1:=xlSortNormal 'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True sName = Dir()
Loop
End Sub
Vish,
Macro1()
'
'
'
Dim bk As Workbook
Dim sh As Worksheet
Dim sPath as String, sName as String
Dim r as Range
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\" .Title = "Please Select the Folder to Loop" .Show If .SelectedItems.Count = 0 Then Exit Sub Else sPath = .SelectedItems(1) & "\" End If
End With
sName = Dir(sPath & "*.xls*")
Do While sName <> ""
Set bk = Workbooks.Open(sPath & sName) For Each sh In bk.Worksheets set r = sh.Range("A1").currentRegion r.Sort Key1:=sh.Range("E1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBot Next 'save the changes done to center the worksheet horizontally and vertically for printing bk.Close SaveChanges:=True sName = Dir()
Loop
End Sub
Advertisement