Problema con AutoHotKey ed Excel

di il
9 risposte

Problema con AutoHotKey ed Excel

Buonasera a tutti del forum,
vi scrivo perchè sto avendo un piccolo problema con AutoHotKey per effettuare una selezione su Excel.

Per farla breve, dovrei fare in modo di selezionare più celle non continue (H2, H5, H8, H…). Con la funzione ExcelObj.Range(Cella).Select() riesco a selezionare una cella.. Io attualmente mi ritrovo con una stringa che contiene tutte le celle selezionate ottenuta grazie ad un ciclo while:

daSelezionare = “H2,H5,H8,H11”.

Come faccio a selezionarle tutte insieme? Davvero non riesco a trovare soluzione .-. 

La funzione Select() mi permette di selezionare una sola cella quindi se la richiamo su un'altra cella mi deseleziona quella precedente invece io ho bisogno che tenga selezionate tutte le celle interessate.

Alt:: 
{
    XlObj := ComObjActive("Excel.Application") ; Rileva file aperto
    column := "H" ; Colonna
    startRow := 2 ; Riga di partenza
    offset := 3 ; Offset tra le celle
    
    rangeStr := column . startRow ; Stringa che contiene tutte le celle da selezionare
    currentRow := startRow + offset ; Serve per spostarmi da una cella all'altra

    while (XlObj.Range(column . currentRow).Value != "") { ; Se la cella non è vuota
        rangeStr := rangeStr . "," . column . currentRow ; Aggiungila alla stringa
        currentRow := currentRow + offset ; Passa alla cella successiva
    }

	; Mo come le seleziono? Non posso passare la stringa rangeStr perchè ovviamente non funge.
	; Se può servire: sono celle della stessa colonna   
}

9 Risposte

  • Re: Problema con AutoHotKey ed Excel

    Provato con

    XlObj.Range(daSelezionare).Select
  • Re: Problema con AutoHotKey ed Excel

    Buongiorno Oregon, la stringa da selezionare (che in effetti nel codice si chiama “rangeStr”) alla fine del ciclo while contiene tutte le celle interessate:

    daSelezionare = "H2,H5,H8,H11,H14" ; e via fino all'ultima cella interessata

    se provo a passarla alla funzione Range(daSelezionare).Select mi dà errore proprio su “Range()” perchè suppongo non possa passare la stringa daSelezionare così com'è.

  • Re: Problema con AutoHotKey ed Excel

    Buongiorno Oregon, la stringa da selezionare (che in effetti nel codice si chiama “rangeStr”) alla fine del ciclo while contiene tutte le celle interessate:

    daSelezionare = "H2,H5,H8,H11,H14" ; e via fino all'ultima cella interessata

    se provo a passarla alla funzione Range(daSelezionare).Select mi dà errore proprio su “Range()” perchè suppongo non possa passare la stringa daSelezionare così com'è.

  • Re: Problema con AutoHotKey ed Excel

    Esattamente quale messaggio di errore hai?

    Esattamente cosa contiene la stringa?

    Esattamente quale riga di codice hai scritto?

    Cerca di essere preciso nelle risposte

  • Re: Problema con AutoHotKey ed Excel

    Ti indico tutta la porzione di codice interessata:

    Alt:: 
    {
       XlObj := ComObjActive("Excel.Application") ; Rileva file aperto
       column := "H" ; Colonna
       startRow := 2 ; Riga di partenza
       offset := 3 ; Offset tra le celle
       
       rangeStr := column . startRow ; Contiene tutte le celle interessate
       currentRow := startRow + offset ; Passa alla prossima colonna aggiungendo l'offset
       while (XlObj.Range(column . currentRow).Value != "") { ; Ciclo fino al rilevamento di una cella VUOTA
           rangeStr := rangeStr . "," . column . currentRow ; Aggiungi la cella interessata alla stringa rangeStr
           currentRow := currentRow + offset ; Passa alla prossima colonna aggiungendo l'offset
       }
      XlObj.Range(rangeStr).Select()
    }
    

    In questo caso “rangeStr” contiene tutte le celle che voglio selezionare in questo modo:

    rangeStr: “H2,H5,H8,H11, …” ; Quindi LetteraNumero,LetteraNumero. È un'intera stringa contenente le celle suddivise da una virgola

    Quando provo ad eseguire lo script e ad utilizzarlo in Excel si presenta questo errore:

    Error: (0x800401E3) Operazione non disponibile.
        146: }
        152: {
    ?    153: XlObj := ComObjActive("Excel.Application")
        154: column := "H"
        155: startRow := 2
    Call stack:
    C:\Users\vince\Desktop\Random Date.ahk (153) : [ComObjActive] XlObj := ComObjActive("Excel.Application")
    C:\Users\vince\Desktop\Random Date.ahk (153) : [<Hotkey>] XlObj := ComObjActive("Excel.Application")
    > Alt

    Stranamente non mi indica più errore sulla funzione Range() ma su “ComObjActive”.

  • Re: Problema con AutoHotKey ed Excel

    Ma Excel è installato?

  • Re: Problema con AutoHotKey ed Excel

    Ovviamente… ho provato lo script AHK con un file Excel. Ho notato che riprovando con un file diverso il problema torna sul metodo Range():

    Error: (0x800A03EC)
    Specifically: Range
        163: currentRow := currentRow + offset
        164: }
    ?    166: XlObj.Range(rangeStr).Select()
        167: }
        168: Exit
    Call stack:
    C:\Users\vince\Desktop\Random Date.ahk (153) : [<Hotkey>] XlObj := ComObjActive("Excel.Application")
    > Alt
  • Re: Problema con AutoHotKey ed Excel

    Puoi nostrane qui il contenuto di rangeStr prima che venga passara alla Range?

    Non quello che pensi che ci sia ma effettivamente quello che contiene.

  • Re: Problema con AutoHotKey ed Excel

    Dopo il ciclo while, il contenuto di rangeStr è questo:

Devi accedere o registrarti per scrivere nel forum
9 risposte