Excel/ how to connect buttons on different worksheets - vba
my first button (Schaltfläche 83)
Other button which I want to activate vom "Hirata Bestellformular"
1st option: the top blue one
2nd option: the big one (activexelement)
I want to activate one button from another worksheet because I want to execute the code below on the worksheet "Teileliste" directly from "Hirata Bestellformular". How can I accomplish this?
Sub Teileliste_generieren()
' advanced filter
Sheets("Hirata Bestellformular").Range("Tabelle3[[#Headers],[#Data]]"). _
AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("B50:B51"), _
CopyToRange:=Range("B54:B55"), Unique:=False
Range("B5").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(LEFT(R[50]C,FIND(CHAR(10),R[50]C)-1),R[50]C)"
Range("B6").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(LEFT(R[50]C,FIND(CHAR(10),R[50]C)-1),R[50]C)"
Range("B5:B6").Select
Selection.AutoFill Destination:=Range("B5:B26"), Type:=xlFillDefault
Range("B5:B26").Select
Range("D22").Select
'formatierung tabelle
Range("B3").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 16763955
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("B4").Select
With Selection.Interior
.Pattern = xlSolid
.PatternThemeColor = xlThemeColorAccent3
.Color = 16777215
.TintAndShade = 0
.PatternTintAndShade = 0.799981688894314
End With
Range("B5").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 9868950
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("B6").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15395562
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("B5:B6").Select
Selection.AutoFill Destination:=Range("B5:B26"), Type:=xlFillDefault
Range("B5:B26").Select
Range("D20").Select
' Wenn 0 blank
Range("B5:B26").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("C22").Select
' Exportieren
ThisWorkbook.Sheets("Teileliste").Copy
Application.GetSaveAsFilename
End Sub
I can try. :)
If I understand you, you want to be able to press Teileliste generieren from Hirata Bestellformular. This means that you still want the button Schaltfläche 83 do to the same thing as Teileliste generieren, but you don't want to switch sheets to press the button?
Then I believe your problem is in your Range.Select statements.
In Excels VBA Object Model, if you call Range("B50:B51").Select from the Teileliste-sheet, then it will automatically select that range in Teileliste-sheet. If do it from Hirata Bestellformular, then it will select Range("B50:B51") from Hirata Bestellformular instead.
This means: it should work if you change all your Range("...").Select to Worksheets("Teileliste").Range("...").Select
This has to do with the Excel VBA Object Model.
I'm pretty sure that should do the trick but it depends on where your code is placed (within the specific sheets or in a Module). Try replacing the Range.Selects and see if it helps. :)
Just A quick hint:
You can right-click the button Schaltfläche 83 and assign a macro to it. So in your case you can just right-click -> assign macro -> choose
Teileliste_generieren()
If your code can deal with being called on different sheets, then it Will work.
//from My iPhone
Sub Teileliste_generieren2()
' advanced filter
Sheets("Hirata Bestellformular").Range("Tabelle3[[#Headers],[#Data]]"). _
AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("Teileliste").Range("B50:B51"), _
CopyToRange:=Worksheets("Teileliste").Range("B54:B55"), Unique:=False
Worksheets("Teileliste").Range("B5").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(LEFT(R[50]C,FIND(CHAR(10),R[50]C)-1),R[50]C)"
Worksheets("Teileliste").Range("B6").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(LEFT(R[50]C,FIND(CHAR(10),R[50]C)-1),R[50]C)"
Worksheets("Teileliste").Range("B5:B6").Select
Selection.AutoFill Destination:=Worksheets("Teileliste").Range("B5:B26"), Type:=xlFillDefault
Worksheets("Teileliste").Range("B5:B26").Select
Worksheets("Teileliste").Range("D22").Select
'formatierung tabelle
Worksheets("Teileliste").Range("B5").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark2
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Worksheets("Teileliste").Range("B6").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
Worksheets("Teileliste").Range("B5:B6").Select
Selection.AutoFill Destination:=Worksheets("Teileliste").Range("B5:B26"), Type:=xlFillDefault
Worksheets("Teileliste").Range("B5:B26").Select
Worksheets("Teileliste").Range("C18").Select
' Wenn 0 blank
Worksheets("Teileliste").Range("B5:B26").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Worksheets("Teileliste").Range("C22").Select
' Exportieren
ThisWorkbook.Sheets("Teileliste").Copy
Application.GetSaveAsFilename
End Sub
I just replaced it everywhere like you said and it works if I aktivate the makro from "Teileliste" but there s error when I acctivate it from "Hiraa Bestellformular" saying: Error1004 he Select- Method of the Range-Object could not be executed:/ Another suggestion?:)
Related
Conditional formatting. Color cells that are out of range
I have set conditional formatting at both of my column BA and BB. The cells will be filled in color if the values are in the range. Columns("BA:BA").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="=0.921", Formula2:="=0.931" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Columns("BB:BB").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="=0.069", Formula2:="=0.079" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With What code I have to use to make the cells that are not in the range to be filled with other color ?
Conditional formatting (exact criteria and multiple columns)
I'm an excel vba noob and I'm quite stuck at this code wherein I need to format cells containing a specific criteria for multiple columns. For example I would need to highlight all values except the cells which contains "Complete" into YELLOW with BOLD RED FONT. I've tried to just record it by simply filtering out "Complete" and highlighting all other values but I would need it to be dynamic. Sub Macro1() ActiveSheet.Range("$A$1:$W$6114").AutoFilter Field:=6, Criteria1:= _ "=Incomplete", Operator:=xlOr, Criteria2:="=" Range("F171").Select Range(Selection, Selection.End(xlDown)).Select Range("F171:F6114").Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True End Sub Will be grateful for any assistance!
Try this: Sub Macro1() Dim rng As Range Set rng = ActiveSheet.Range("A1").CurrentRegion With rng .AutoFilter Field:=6, Criteria1:="<>Complete", Operator:=xlAnd End With With rng.Range(Cells(2, 6), Cells(rng.Rows.Count, 6)).SpecialCells(xlCellTypeVisible) With .Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = vbYellow .TintAndShade = 0 .PatternTintAndShade = 0 End With With .Font .Color = vbRed .TintAndShade = 0 .Bold = True End With End With End Sub
Excel VBA macro:
I want to split quarterly the dates from a year (with some colors). Right now I have a macro for 2 years only, but I want to make it automatically for every year. (ex: with Red color: between date 01/01/YYYY-01/05/YYYY..... and so on) This is what did: Private Sub CheckBox1_Click() If CheckBox1.Value = True Then Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="01/01/2015", Formula2:="01/05/2015" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 End With Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="30/04/2015", Formula2:="01/08/2015" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 7461287 .TintAndShade = 0 End With Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="31/07/2015", Formula2:="01/01/2016" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 6750207 .TintAndShade = 0 End With Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="01/01/2016", Formula2:="01/05/2016" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 End With Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="30/04/2016", Formula2:="01/08/2016" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 7461287 .TintAndShade = 0 End With Rows("1:1").Select Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="31/07/2016", Formula2:="01/01/2017" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 6750207 .TintAndShade = 0 End With End Sub The result: enter image description here
Ahh - it that case you need this: Sub demo() Dim r As Range For Each r In ActiveSheet.UsedRange.Columns(1).Cells If IsDate(r) Then Select Case Month(r) Case 1 To 3 With r.Interior .ThemeColor = xlThemeColorLight2 .TintAndShade = 0.799981688894314 End With Case 4 To 6 r.Interior.Color = 7461287 Case 7 To 8 r.Interior.Color = 7461287 Case 9 To 12 r.Interior.Color = 6750207 End Select End If Next r End Sub
At the start of the code add Private Sub CheckBox1_Click() Const DesiredYear = "2017" 'change this for each year you want Then change lines like this: Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="01/01/2015", Formula2:="01/05/2015" to Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ Formula1:="01/01/" & DesiredYear, Formula2:="01/05/" & DesiredYear
VBA Error 1004 Object Range failed for _Global
I need to make a little VBA Application for a School project. I recorded a Macro which Resize all Cells and then make them green. After that I select specific Cells and recolor them in white. So the result should be the Excel logo. However when I run the code there is an Error 1004 Range Object failed for _Global. Code: Sub Resize() Columns("A:BZ").ColumnWidth = 2.71 Rows("1:1000").RowHeight = 15 Cells.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 4485149 .TintAndShade = 0 .PatternTintAndShade = 0 End With Union(Range( _ "O14:P15,L7:T7,S5:T6,P6:Q6,E38:F47,G46:J47,G42:J43,G38:J39,N38:O39,O40:R41,R38:S39,P42:Q43,O44:R45,N46:O47,R46:S47,W38:X47,Y46:AB47,Y38:AB39,AF38:AK39,AF40:AG47,AH46:AK47,AH42:AK43,AO38:AP47,AQ46:AT47,R6,Y7:AP9,AN10:AP31,Y29:AM31,AF10:AF28,AG24:AM24,Y24:AE24" _ ), Range( _ "AG19:AM19,AG14:AM14,Y14:AE14,V4:X33,U5:U32,T12:T25,S14:S23,R16:R21,Q18:Q19,Q28:T32,M26:R27,N24:Q25,O22:P23,L28:P31,H28:K30,F9:G29,H8:J27,K12:K25,L14:L23,M16:M21,N18:N19,K8:T9,M10:R11,N12:Q13" _ )).Select Cells.Select With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
the string fed to Range must be less then 256 characters, while your first range has just 257... so just shift some characters to the 2nd range furthermore you're selecting all cells instead of wanted ones see code: Option Explicit Sub Resize() With Range("A1:BZ1000") .ColumnWidth = 2.71 .RowHeight = 15 With .Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 4485149 .TintAndShade = 0 .PatternTintAndShade = 0 End With End With With Union(Range( _ "O14:P15,L7:T7,S5:T6,P6:Q6,E38:F47,G46:J47,G42:J43,G38:J39,N38:O39,O40:R41,R38:S39,P42:Q43,O44:R45,N46:O47,R46:S47,W38:X47,Y46:AB47,Y38:AB39,AF38:AK39,AF40:AG47,AH46:AK47,AH42:AK43,AO38:AP47,AQ46:AT47,R6,Y7:AP9,AN10:AP31,Y29:AM31" _ ), Range( _ "AF10:AF28,AG24:AM24,Y24:AE24,AG19:AM19,AG14:AM14,Y14:AE14,V4:X33,U5:U32,T12:T25,S14:S23,R16:R21,Q18:Q19,Q28:T32,M26:R27,N24:Q25,O22:P23,L28:P31,H28:K30,F9:G29,H8:J27,K12:K25,L14:L23,M16:M21,N18:N19,K8:T9,M10:R11,N12:Q13" _ )).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorDark1 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub
How can I compare a master list of serial numbers and compare it to a seperate list and have it mark duplicates?
Sheets("Die Sizes").Select Columns("A:A").Select Selection.FormatConditions.Add Type:=xlTextString, String:= _ "=cells(i,ForgeSchedule!B2)", TextOperator:=xlContains Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.399945066682943 End With Selection.FormatConditions(1).StopIfTrue = False This is what I have so far. This will compare the specific cells in the secondary list to the master list. This means I would have to rerun this one at a time changing the "B2" to B3 all the way to B3200. How can I get it to do that automatically? I'm very new to VBA.
Sounds like you just need a loop. Perhaps something like this (air code): Dim lngRow As Long Sheets("Die Sizes").Select Columns("A:A").Select For lngRow = 2 To 3200 Selection.FormatConditions.Add Type:=xlTextString, String:= _ "=cells(i,ForgeSchedule!B" & lngRow & ")", TextOperator:=xlContains Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent6 .TintAndShade = 0.399945066682943 End With Selection.FormatConditions(1).StopIfTrue = False Next lngRow