Eliminar trabajos de la cola de impresión sin reiniciar

En algunas ocasiones no se puede borrar los archivos que quedan en la cola de impresión sin tener que reiniciar el ordenador, la solución es:

Los archivos de cola de impresión se guardan en la carpeta: C:/WINDOWS/system32/spool/PRINTERS

Estos archivos estan bloquedados a escritura por el servicio de Windows “cola de impresión”. Para detenerlo pulsaremos en el botón “Inicio” – “Ejecutar”, e introduciremos “services.msc”, pulsaremos “Aceptar”.

Nos mostrará la ventana de gestión de Servicios de Windows, seleccionaremos el servicio “Cola de impresión”, pulsaremos con el botón derecho del ratón sobre “Cola de impresión” y seleccionaremos “Detener” en el menú contextual que aparece.

Una vez parado el servicio de Windows, podemos borrar los archivos de la carpetar “C:/WINDOWS/system32/spool/PRINTERS” y luego ponemos de nuev23o en marcha el servicio “Cola de impresión”

Contar único VBA

Esta función permite contar valores únicos de un rango, con una condición de otro rango. Sería algo parecido a la funcion contar.si, pero el resultado final son valores únicos.

=ContarUnico([1];[2];[3])

[1]: Rango de valores que queremos contar sin repetidos

[2]: Rango que tienen las condiciones

[3]: Condición

Captura

Public Function ContarUnico(rng As Range) As Long
   'abelorteu@informaticaea.com
 
    Dim col As New Collection
    Dim cel As Range
    On Error Resume Next
    For Each cel In rng
        col.Add Item:=CStr(cel.Value), Key:=CStr(cel.Value)
    Next cel
    ContarUnico = col.Count
End Function
 
Public Function ContarUnicoSi(Unico As Range, Range1 As Range, Valor As Variant) As Long
       '=ContarUnicoSi([1];[2];[3])
       '[1]: Rango de valores que queremos contar sin repetidos
       '[2]: Rango que tienen las condiciones
       '[3]: Condición
 
       'abelorteu@informaticaea.com
    Dim filaInit As Long
    Dim filaFinal As Long
 
    Dim col As New Collection
 
    filaInit = Range1.Row
    filaFinal = filaInit + Range1.Rows.Count - 1
 
    On Error Resume Next
    For i = 1 To filaFinal - filaInit + 1
        If (UCase(Trim(Range1(i).Value)) = UCase(Trim(Valor))) Then
            col.Add Item:=CStr(Unico(i).Value), Key:=CStr(Unico(i).Value)
        End If
    Next
 
    If (arrDic.Count = 0) Then
        ContarUnicoSi = col.Count
    Else
        ContarUnicoSi = col.Count - 1
    End If
End Function
 
Public Function ContarUnicoSiConjunto(Unico As Range, ParamArray prms() As Variant) As Variant
    '=ContarUnicoSiConjunto([1];[2'];[3'];[2''];[3''].....)
       '[1]: Rango de valores que queremos contar sin repetidos
       '[2']: Rango que tienen las condiciones
       '[3']: Condición
       '[2'']: Segundo Rango que tienen las condiciones
       '[3'']: Segunda Condición
       '...... Tantos rangos y condiciones como quieras
 
       'abelorteu@informaticaea.com
    Dim filaInit As Long
    Dim filaFinal As Long
    Dim Condicion As Boolean
 
    Dim col As New Collection
 
    filaInit = Unico.Row
    filaFinal = filaInit + Unico.Count - 1
    Dim x As Variant
    x = (UBound(prms) + 1) / 2
    If (x = Int(x)) Then
        On Error Resume Next
        For i = 1 To filaFinal - filaInit + 1
            Condicion = True
            For a = 1 To x
                If (UCase(Trim(prms(a * 2 - 2)(i))) <> UCase(Trim(prms(a * 2 - 1)))) Then
                    Condicion = False
                End If
            Next a
            If (Condicion) Then
                col.Add Item:=CStr(Unico(i)), Key:=CStr(Unico(i))
                Debug.Print Unico(i)
            End If
        Next i
 
        If (arrDic.Count = 0) Then
            ContarUnicoSiConjunto = col.Count
        Else
            ContarUnicoSiConjunto = col.Count - 1
        End If
    Else
       ContarUnicoSiConjunto = "#ERROR"
    End If
End Function

OpenCV en Mac OS X

Instalar sistema de compilación para MacOS

xcode-select --install
Evita el error:
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

Instalar phyton

brew install python3

Desde MacPorts

Instalar MacPorts https://www.macports.org/install.php

OpenCV la podemos encontrar a traves de alguno de estos gestores e instalarla directamente con los siguientes comandos.

sudo port install opencv
brew install ffmpeg

Compilando e instalando las OpenCV

Utilizaremos Xcode (descargarlo de la Mac App Store) para instalar GCC y otras herramientas de desarrollo por linea de comandos. Iremos a: Xcode > Preferences… > Downloads > Components e instalamos Command Line Tools.
Instalar OpenCV

Descargar la última versión: opencv3.0 download

Captura de pantalla 2016-02-07 a les 18.42.43

cd eclipse/opencv-3.1.0/build/
make -j8
sudo make install

Si queremos probar algún ejemplo en la carpeta “samples” de OpenCV tenemos varios en varios lenguajes de programación.


cd ~/opencv*/samples/c # Ejemplos en C
./build_all.sh # Para compilarlos todos

Notas:
1) Para corregir errores en brew
brew doctor
2) Actualizar brew
cd /usr/local/Library && git stash && git clean -d -f
brew update && brew upgrade --all

3) Error de compilación
Utilizaremos Xcode (descargarlo de la Mac App Store) para instalar GCC y otras herramientas de desarrollo por linea de comandos. Iremos a: Xcode > Preferences… > Downloads > Components e instalamos Command Line Tools.

🍺

Funciones para trabajar con archivos

Funciones para trabajar con archivos

Sub MostrarRutaArchivo()
'Mostramos la ruta del archivo actual.
MsgBox ThisWorkbook.Path
 
End Sub
Sub CrearDirectorio()
'Creamos una caroeta en el escritorio
MkDir "C:\Users\Usuario\Desktop\NombreNuevaCarpeta"
 
End Sub
Sub CopiarArchivo()
'Copiamos archivo a la carpeta Nuevo
FileCopy "C:\Users\Usuario\Desktop\Archivo.xlsx", "C:\Users\Usuario\Desktop\Nuevo\Archivo.xlsx"
 
End Sub
Sub EliminarArchivo()
'Eliminamos archivo
Kill "C:\Users\Usuario\Desktop\archivo.xlsx"
 
End Sub
Sub RenombrarArchivo()
'Renombramos archivo
Name "C:\Users\Usuario\Desktop\archivo.xlsx" As "C:\Users\Usuario\Desktop\archivo2.xlsx"
 
End Sub
Sub MoverArchivo()
'Movemos archivo a la carpeta Nuevo
Name "C:\Users\Usuario\Desktop\archivo.xlsx" As "C:\Users\Usuario\Desktop\Nuevo\archivo.xlsx"
 
End Sub

Ordenar array VBA

Este script nos permite oredenar un array de manor a mayor en VBA

Sub BubbleSort(arr)
   ' Ordena de menor a mayor un array
   ' Call BubbleSort(MyArray)
  Dim strTemp As String
  Dim i As Long
  Dim j As Long
  Dim lngMin As Long
  Dim lngMax As Long
  lngMin = LBound(arr)
  lngMax = UBound(arr)
 
   For i = lngMin To lngMax - 1
    For j = i + 1 To lngMax
     If arr(i) &gt; arr(j) Then
       strTemp = arr(i)
       arr(i) = arr(j)
       arr(j) = strTemp
     End If
    Next j
   Next i
End Sub

Estructuras de control o Bucles en VBA

Las estructuras de control permiten la repetición de determinadas acciones.

Uno de los errores más comunes que se producen en la utilización de bucles de este tipo, es la no inicialización de las variables utilizadas como contadores de iteraciones, produciendo un error de no finalización del bucle.

Do… Loop Until

Esta estructura de control se puede usar para ejecutar un bloque de instrucciones un número indefinido de veces. Las instrucciones se repiten hasta que una condición llegue a ser True.

Ejemplo:

Sub Ejemplo1()
  Dim contador As Integer
  Dim numero As Integer
  numero = 9
  Do Until numero = 10
   If numero &lt;= 0 Then Exit Do
     numero = numero – 1
     contador = contador + 1
  Loop
  MsgBox “Se alcanzó el valor ” &amp; numero &amp; ” ” &amp; contador
End Sub

Do While… Loop

En este caso, las instrucciones se repiten mientras una condición sea True (al contrario que con el Do… Loop Until).

Ejemplo:

Sub Ejemplo2()
  Dim Escribir As Integer
  Escribir = 1
  Do While Escribir &lt; 7
    ActiveCell.FormulaR1C1 = “Excel”
    lastrow = Cells(Rows.Count, 1).End(xlUp).Row
    Cells(lastrow, 1).Offset(1, 0).Select
    Escribir = Escribir + 1
  Loop
End Sub

While … Wend

El bucle WHILE…WEND sirve para realizar un tipo de bucle muy utilizado en programación que es el bucle Mientras, que se ejecuta mientras que se cumpla una condición.

Ejemplo

Sub Ejemplo3()
  dim a As Integer
  a = 0
  While (a &lt; 13)
    a = a + 1
  End While
  MsgBox “Se alcanzó el valor ” &amp; a 
End Sub

For… To… Next

El bucle FOR NEXT nos permite repetir una acción un número de veces dado.

Ejemplo:

En este ejemplo tenemos el bucle FOR NEXT en VBA más sencillo. El bucle cuenta de 1 a 10 y va poniendo en una columna el valor del contador.

Sub Ejemplo4()
  dim fila As Integer
  For CONTADOR = 1 To 10
    fila = CONTADOR
    Cells(fila, 1) = CONTADOR
  Next
End Sub

With

La estructura With en Vba nos permite ejecutar un conjunto de instrucciones sin tener que volver a hacer referencia al mismo objeto.

Sub Ejemplo5()
  With Cells(1, 1)
   .Value = “Hola informaticaea.com”
   .Font.Bold = True
  End With
End Sub

Condición en VBA

La estrucura básica de las condiciones en VBA es la siguiente

If condición Then
   'Acciones si se cumple la condición
Else
   'Acciones si no se cumple la condición
End if

Las instrucciones If…Then…Else se pueden presentar en varios formatos, con unas características determinadas. Normalmente, se presentan anidadas en tantos niveles como sea necesario, sin embargo, puede hacer menos legible el código, por lo que es aconsejable utilizar una instrucción Select Case en vez de recurrir a múltiples niveles de instrucciones If…Then…Else anidadas (únicamente en caso de que el excesivo número de anidamientos pudiera dar problemas en la legibilidad del programa, o errores en la depuración de éste).

Select Case mi_expresion
 Case mi_expresion_1
 'código para expresion_1
 Case mi_expresion_2
 'código para expresion_2
 '...
 Case mi_expresion_n
 'código para expresion_n
 Case Else
 'código para cuando no hay coincidencias
End Select

Problemas con las variables en VBA

Definir una variable

1
Dim NombreVariavle As TipoVariable

Con esto queda la variable perfectamente definida, si no se pusiera no ocurriría posiblemente nada, salvo que se utilizaría una mayor cantidad de memoria de la necesaria, al definirse instantáneamente en el momento de utilizarla como de tipo Value.

1
Option Explicit

Con esta aplicación, se avisaría en caso de no tener definida una variable, o en caso de utilizar datos de páginas diferentes a la activa.

En algunos casos nos podemos encontrar que trate la variable como un tipo que no nos interesa (tipo int cuando queremos que sea un tipo string) y de este modo forzamos a que no se produzca este error.

Las funciones de conversión se utilizan para cambiar el tipo de dato, de una expresión a fin de poder operar con ella.

Función Tipo Valor que devuelve la función
CBool Boolean Cualquier cadena o expresión numérica válida
CByte Byte 0 a 255
CCur Currency 922 337 203 685 477,5808 a 922 337 203 685 477,5807
CDate Date Cualquier expresión de fecha válida
CDbl Double -1.79769313486231E308 a -4,94065645841247E-324 para los valores negativos ; 4,94065645841247E-324 a 1,79769313486232E308 para los valores positivos
CDec Decimal +/-79 228 162 514 264 337 593 543 950 335 para los número sin décimales. El rango de numeros  para  28 décimales +/-7,9228162514264337593543950335. El número más pequeño es diferente de cero 0,0000000000000000000000000001
CInt Integer -32 768 a 32 767 , las fracciones se redondean. Las partes decimales se redondean a 0.5 y el número par más cercano
CLng Long 2 147 483 648 a 2 147 483 647 , las fracciones son redondeadas.  Las partes decimales se redondean a 0.5 y el número par más cercano
CSng Single -3,402823E38 a -1,401298E-45 para los valores negativos,  1,401298E-45 à 3,402823E38 para los valores positivos
CStr String Los valores devueltos por la función Cstr de la expresión dependiente
CVar Variant Mismo rango de valores para los números de tipo doble y el tipo de cadenas no númericas.

Ocultar pestañas excel con VBA

Para ocultar una pestaña determinada con VBA:

1
Sheets("Hoja3").Visible = False

Para mostrar la pestaña:

1
Sheets("Hoja3").Visible = True

Si queremos buscar si existe una hoja en un documento en concreto:

1
2
3
4
5
6
7
8
9
10
11
12
Function BuscarHoja(nombreHoja As String) As Boolean
 
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = nombreHoja Then
            BuscarHoja = True
            Exit Function
        End If
    Next
 
    BuscarHoja1 = False
 
End Function

En el caso de querer ocultar todas las hojas menos la “Hoja3”

1
2
3
4
5
6
7
For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Hoja3" Then
            Sheets("Hoja3").Visible = True
         Else
            Worksheets(i).Visible = False
        End If
    Next

Si queremos mostrar todas las pestañas ocultas:

1
2
3
For i = 1 To Worksheets.Count
        Worksheets(i).Visible = True
    Next

Eliminar filtros VBA

Para eliminar un filtro aplicado a la pestaña actual de excel con VBA:

1
2
3
    If ActiveSheet.AutoFilterMode = True Then
        ActiveSheet.AutoFilterMode = False
    End If

Para seleccionar una pestaña en concreto:

1
Sheets("Pestaña").Select