type mismatch in loop

Hi,
I get a type mismatch error and I have changed to variable types so many times I can't remember where I started! Hopefully someone can point me in the right direction.

The code in question is attached

I have I as String and K as Long. The code stops at line 11.
Maybe it's just bad syntax in the loop. I'm completely lost.
Any help as always is greatly appreciated.

ps
I should probably explain what I'm trying to do.
I want the code to look at the value of A1 in wsht1 ("I") and find that same value in column A of wsht3 ("K"), then paste the range values of wsht1 (C1:AA1) to the corresponding "K" row but offset two columns right (Column C in effect)

I hope I have explained it clear enough.

Set wbk1 = ActiveWorkbook
    Set wsht1 = wbk1.Sheets("Sheet1")
    Set wbk3 = Workbooks.Open(wbk3path) 'Interface workbook
    Set wsht3 = wbk3.Sheets(1)
    wsht3.Range("A1:AA2").Formula = wsht1.Range("A1:AA2").Value
    wsht1.Range("A1").EntireRow.Delete
    wsht1.Range("A1").EntireRow.Delete
Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    K = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
    wsht3.Range(K).Offset(0, 2).PasteSpecial xlPasteValues
    wsht1.Range("A1").EntireRow.Delete
Loop Until I = ""

Open in new window

LVL 1
Stephen ByromWarehouse/ShippingAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
Guy Hengel [angelIII / a3]Connect With a Mentor Billing EngineerCommented:
> K = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
the Find returns a Range object, normally, so if that returns nothing, your error is normal.

try to do this:
Dim findK as object
findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
if findK is not Nothing then
  K = findK.Value
end if 

Open in new window

0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
thanks for the input.
I get an error "Invalid use of object" when I run it though, and the "Nothing" is highlighted
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
sorry:

if not ( findK is Nothing ) then
0
[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

 
Stephen ByromWarehouse/ShippingAuthor Commented:
Thanks for persevering.
I now get the error "Object variable or With block variable not set"
The code is now
Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    Dim findK As Object
    findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
        If Not (findK Is Nothing) Then
            K = findK.Value
            Range(K).Offset(0, 2).PasteSpecial xlPasteValues
            wsht1.Range("A1").EntireRow.Delete
        End If
Loop Until I = ""
0
 
Saqib Husain, SyedConnect With a Mentor EngineerCommented:
set findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
Thanks for the input ssaqibh, but i still get the error and I've changed the code to this;
Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    Dim findK As Object
    Set findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
        If Not (findK Is Nothing) Then
            K = findK
            K.Offset(0, 2).PasteSpecial xlPasteValues
            wsht1.Range("A1").EntireRow.Delete
        End If
Loop Until I = ""
0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
Tried this also;
Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    Dim findK As Object
    Set findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
        If Not (findK Is Nothing) Then
            K = findK
            wsht3.Range(K).Offset(0, 2).PasteSpecial xlPasteValues
            wsht1.Range("A1").EntireRow.Delete
        End If
Loop Until I = ""

Still get the "Object variable or With block variable not set" error
0
 
Saqib Husain, SyedEngineerCommented:
Ok Try this

Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    Dim findK As Object
    Set findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
        If Not (findK Is Nothing) Then
            K = findK
            wsht3.Range(findK.Address).Offset(0, 2).PasteSpecial xlPasteValues
            wsht1.Range("A1").EntireRow.Delete
        End If
Loop Until I = ""
0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
managed it!!
new code is this;
Do
    I = wsht1.Range("A1")
    wsht1.Range("C1:AA1").Copy
    Dim findK As Object
    Set findK = wsht3.Columns("A:A").Find(What:=I, lookat:=xlWhole)
        If Not (findK Is Nothing) Then
            findK.Offset(0, 2).PasteSpecial xlPasteValues
        End If
    wsht1.Range("A1").EntireRow.Delete
Loop Until I = ""
0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
I've requested that this question be closed as follows:

Accepted answer: 0 points for olorin57's comment #a38798967
Assisted answer: 250 points for angelIII's comment #a38798639
Assisted answer: 250 points for ssaqibh's comment #a38798844

for the following reason:

Had to split the points. Thanks to you both for your advice and pointers.
0
 
Stephen ByromWarehouse/ShippingAuthor Commented:
Had to split the points
Thanks to you both
0
All Courses

From novice to tech pro — start learning today.