Implement Vlookup formula on VBA, and handle error 1004 - vba

I start my adventure with VBA. I would like to create formula on VBA, use vlookup but something is going wrong with this.
Also I would like to implement vlookup for cells, when
cells from deferent column will be filled
( for example if WB_WS_Pricing.Range("A4")<>0 then
WB_WS_PRICING.Range("CX4") = "=IFNA(VLOOKUP(Delivering!E4,DATA!A:I,9,0),"")"
Sub formula()
Set WB_CMSO_MASS_IBERIA = ThisWorkbook
Set WB = ThisWorkbook
Set WB_WS_PRICING = WB.Sheets("Pricing")
Set WB_WS_HEADER = WB.Sheets("Header")
Set WB_WS_DATA = WB.Sheets("DATA")
Set WB_WS_Extension = WB.Sheets("Extension")
Set WB_WS_DELIVERING = WB.Sheets("Delivering")
WB_WS_PRICING.Range("CX4") = "=IFNA(VLOOKUP(Delivering!E4,DATA!A:I,9,0),"")"
End Sub
Enyone has idea what is wrong?? For me the formula seems be fine...

You need to escape the double quotes in your formula with an extra quote in front of each (ie """" not "")
WB_WS_PRICING.Range("CX4") = "=IFNA(VLOOKUP(Delivering!E4,DATA!A:I,9,0),"""")"

Related

Visio Change Shape Data/Properties with VBA

for a project I am creating a UserForm that reads values from textboxes and generates Shapes with the data.
So after dropping a shape I want to change the Shape Data rows, for example "Prop.SO_Name".
When I use
shp.CellsU("Prop.SO_Name").FormulaU = """Test"""
It works just fine. But I want to read a value from the textbox. I tried
Dim cell As Visio.cell
Set cell = shp.Cells("Prop.SO_Name")
cell.FormulaU = TextBox2.Value
But it returns a runtime error. I also tried
Dim str as String
str = Textbox2.value
Dim cell As Visio.cell
Set cell = shp.Cells("Prop.SO_Name")
cell.FormulaU = str
With the same result.
I looked into the documentation for the FormulaU Property but they do it, apparently, just like I tried. Clearly I am missing something.
`Try use
Dim cell As Visio.cell
Set cell = shp.Cells("Prop.SO_Name")
cell.FormulaU = chr(34) & UserForm1.TextBox2.Value & chr(34)
Update You try write string to ShapeSheet cell ! The double quotes within the string is one way to tell VB[A] to make a string with embedded quote mark characters in it.

VBA Type Mismatch when returning string to a value

Fairly new to VBA but I have the following function that runs up until the Workbooks(PDwb).Sheets("pivotdata").Range("E2").Value = "ON-HAND" then returns a Tpye Mismatch Error.
The full code checks a cell from a different workbook so I don't know if that is causing the error.
Function IfCheck(Cell As Variant)
If Cell = "ON_HAND" Or Cell = "ON HAND" Then
Set PDwb = ActiveWorkbook
Workbooks(PDwb).Sheets("pivotdata").Range("E2").Value = "ON-HAND"
Else
Set PDwb = ActiveWorkbook
Workbooks(PDwb).Sheets("pivotdata").Range("E2").Value = Cell
End If
Set BOwb = ActiveWorkbook
End Function
I can't for the life of me work out what to do differently :S
Many Thanks,
The Workbooks(PDwb) function expects a string as parameter. But PDwb already IS the workbook.
Try
PDwb.Sheets("pivotdata").Range("E2").Value = "ON-HAND"

FormulaR1C1 doesn't work with SUMME

The FormulaR1C1 Method doesn't work as it's supposed to.
objExcel = CreateObject("Excel.Application")
objWorkbook = objExcel.Workbooks.Add
Dim Formula As String
Formula = "=SUMME(Z1S1;Z2S1)"
For i = 1 To 5 Step 1
objWorkbook.Worksheets("Tabelle1").Cells(i, 1).FormulaR1C1 = 5
objWorkbook.Worksheets("Tabelle1").Cells(i, 5).FormulaR1C1 = "Text"
objWorkbook.Worksheets("Tabelle1").Cells(i, 3).FormulaR1C1 = Formula
Next
This should give me 10 in the third column 5 times, but it doesn't. I even tried it with:
Formula = "=SUMME(Z[0]S[-2];Z[1]S[-2])"
but that doesn't work either. The Loop just breaks when coming to the assigment line :( . If I try it with
Formula = "=SUMME(Z1S1,Z2S1)"
It executes completely but it doesn't work for excel because then it says =SUMME('Z1S1';'Z2S1') in the Excel Field
You have to use the Range.FormulaLocal property or Range.FormulaR1C1Local property if you plan to use a string that contains non-EN-US function. VB.Net expects a EN-US formula and will translate that to the regional language of the worksheet.
Formula = "=SUM(A1, B2)"
'or depending on your requiements,
Formula = "=SUM(A1:B2)"
.Formula = Formula
Formula = "=SUM(R1C1, R2C2)"
'or depending on your requiements,
Formula = "=SUM(R1C1:R2C2)"
.FormulaR1C1 = Formula
Formula = "=SUMME(Z1S1;Z2S1)"
'or depending on your requirements,
Formula = "=SUMME(Z1S1:Z2S1)"
.FormulaLocalR1C1 = Formula
Don't confuse xlA1 cell references with xlR1C1 references. R23 would mean Cells(23, 18) in xlA1 and 23:23 in xlR1C1.
Note that using the Range.Formula property or Range.FormulaR1C1 property enforces the use of a comma (EN-US standard) instead of a semicolon as a system list separator.
Range.Formula property
Range.FormulaR1C1 property
Range.FormulaLocal property
Range.FormulaR1C1Local property

Inserting Formula in Formula Bar

Anyone knows what's the problem with my code?
Sub reFormat()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Admin")
ws.Range("C21").Formula = "=""S4&""AA5&""AA6&""AA7&""AA8&""AA9&""AA10" 'returns applica-
tion defined or object-defined error
End Sub
And I want the output of this code to be: =S4&(AA5&AA6&AA7&AA8&AA9&AA10)
Thanks for the help!
Your formula is fundamentally invalid. The string evaluates to this:
="S4&"AA5&"AA6&"AA7&"AA8&"AA9&"AA10
Which isn't a valid Excel formula.
You have too many quotes. If these are cell references and your formula intends to concatenate them, and you want your string to evaluate to this:
=S4&(AA5&AA6&AA7&AA8&AA9&AA10)
Then you could just do this:
.Formula = "=S4&(AA5&AA6&AA7&AA8&AA9&AA10)"

Using Select Case in Excel VBA To Copy Worksheet from Closed Workbook

Hello I am trying to write an excel VBA script that will copy a specific worksheet from a closed workbook to the active workbook. The sheet to copy is determined by a checkbox and the value of a variable that is set to be the text in a specific cell. My code:
Sub copysheet()
Dim WB, ClosedWB as Workbook
Set CheckBox = ActiveSheet.Shapes("CheckBox").DrawingObject
Model = ActiveSheet.Range("K3").Text
Const FilePath = "C:\..."
Set WB = Application.Workbooks.Open(FilePath, UpdateLinks:=False, ReadOnly:=False, AddToMRU:=False)
If CheckBox.Value = xlOn Then
With ClosedWB
Select Case Model.Text
Case Model = Sheet1
Sheets("Sheet 1 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count)
Case Model = Sheet2
Sheets("Sheet 2 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count)
End Select
End With
End If
If CheckBox.Value = xlOff Then
With ClosedWB
Select Case Model.Text
Case Model = Sheet3
Sheets("Sheet 3 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count)
Case Model = Sheet4
Sheets("Sheet 4 Name").Copy After:=Workbooks(WB).Sheets(Workbooks(WB).Sheets.Count)
End Select
End With
End If
I am getting a Run-Time error '424': Object Required and it highlights the Select Case Model.Text line. I have also tried Select Case Model.Value, but that didn't work. If I create a MsgBox to display the variable model, then it displays whatever is written in the appropriate cell, so the variable value is being stored. Please help I am new at this.
Edit: Modifying Select Case Model.Text to just Select Case Model no longer results in a run-time error, but the sheets will not copy. When I run the script, it opens up the new workbook (ClosedWB), but does nothing after that. It doesn't even select the sheet that I specified it to. How can I get this to work?
Model is a string since you assigned it ActiveSheet.Range("K3").Text. I strongly suggest you insert Option Explicit at the top of your module, and always compile before running. (Tools, Options, Require variable Declaration will do it automatically in every new module).
Select Case Model
You are also trying to compare a string to a sheet. Either you need to put the sheet# part in quotes if that is the text that is being entered or use sheet1.name.