H o l a:
En este caso tienes que declarar el objeto h1 como object, la explicación, es que los objetos propios de la hoja como la celda, la columna, la fila, etc, pertenecen a la hoja, pero un control activeX como un textbox, no es un objeto propiamente de la hoja, es por eso que te aparece el mensaje de error: "No se encontró el método o el dato miembro", ya que ese textbox no es un método y tampoco es un miembro de la hoja.
Sub Botón5_Haga_clic_en()
Dim h1 As Object
Dim h2 As Object
Dim a As Integer
Set h1 = Sheets("Facturacion")
Set h2 = Sheets("Pedidos Pendientes")
a = h1.Range("F2")
b = h1.txt_Cliente.Value
If Not IsEmpty(h2.Range("A2")) Then
x = h2.Range("A1").End(xlDown).Row + 1
Else
x = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
End If
With h2
.Cells(x, 1).Value = a
.Cells(x, 2).Value = b
End With
End Sub
Comentarios sobre la declaración de variables.
1. En vba de excel no es necesario declarar variables, todas se declaran en automático como variant.
https://msdn.microsoft.com/en-us/library/office/gg251448.aspx
2. Si se declaran las variables deberá realizarse de forma correcta, de lo contrario pueden ocurrir errores.
3. La declaración de las variables se utiliza cuando el programa es muy extenso y se requiere el control de las variables, de esa forma evitarías utilizar variables forma errónea. En este caso la macro es muy pequeña, no es necesario.
https://msdn.microsoft.com/es-mx/library/y9341s4f.aspx
4. Y la razón más importante para el uso de variables, es para optimizar el uso de la memoria, ya que si no se declaran las variables, cada variable se declara en automático como variant y esto ocupa más cantidad de memoria.
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=140:tipos-de-variables-en-visual-basic-integer-single-double-string-object-boolean-etc-ejemplos-cu00308a&catid=37:curso-aprender-a-programar-visual-basic-desde-cero&Itemid=61
La macro te hubiera funcionado desde el principio si no declaras las variables:
Sub Botón5_Haga_clic_en()
Set h1 = Sheets("Facturacion")
Set h2 = Sheets("Pedidos Pendientes")
a = h1.Range("F2")
b = h1.txt_Cliente.Value
If Not IsEmpty(h2.Range("A2")) Then
x = h2.Range("A1").End(xlDown).Row + 1
Else
x = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
End If
With h2
.Cells(x, 1).Value = a
.Cells(x, 2).Value = b
End With
End Sub
5. También se recomiendo declarar las variables cuando un proceso es muy largo y va a estar trabajando durante mucho tiempo, pero en este caso solamente estás asignando un dato a una variable.
De hecho, ni siquiera tienes que declarar las variables a y b, como ya estableciste que la hoja va a estar en el objeto h1 y h2, entonces puedes ocupar directamente la información sin necesidad de pasar por una variable:
Sub Botón5_Haga_clic_en()
Set h1 = Sheets("Facturacion")
Set h2 = Sheets("Pedidos Pendientes")
If Not IsEmpty(h2.Range("A2")) Then
x = h2.Range("A1").End(xlDown).Row + 1
Else
x = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
End If
h2.Cells(x, 1) = h1.Range("F2")
h2.Cells(x, 2) = h1.txt_Cliente
End Sub