View Single Post
Old 24-07-2020, 13:24   #2000
fracarro
Senior Member
 
L'Avatar di fracarro
 
Iscritto dal: Jul 2002
Messaggi: 869
Ciao a tutti,

ho un problema con una macro Excel che ho scritto scopiazzando su internet (non sono un esperto di vba). La macro serve per copiare il contenuto della clipboard nel foglio excel (a partire dalla cella selezionata) dividendo tale contentuo per colonne utilizzando Tab e Spazi come separatori.
La macro ha sempre funzionato bene ma da quando ho preso un nuovo mac, alla prima invocazione della macro compare la finestra di errore: "Errore di runtime 445. Azione non valida per l'oggetto".

Chiusa la finestra di errore, la macro funziona correttamente fino a quando non chiudo excel.

Qualcuno di voi ha idea del perchè la prima invocazione della macro genera quell'errore? Ho un mac con Catalina e uso office 2019. La macro è stata copiata nel modulo Personal.xlbx.

Vi riporto di seguito il codice della macro.

Codice:
Sub incollaPerTABeSPAZI()
'
' incollaPerTABeSPAZI Macro
' incolla il testo formattato in base ai TAB e agli spazi
'
' Scelta rapida da tastiera: Opzione+Cmd+v
'
    Dim objData As New MSForms.DataObject
    Dim strText As String
    Dim text_string As String
    Dim stringaRipulita As String
    Dim WrdMatrix As Variant
    Dim myCell As Range

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    objData.GetFromClipboard
    strText = objData.GetText()

    stringaRipulita = CleanString(strText)

    WrdMatrix = SplitSplit(stringaRipulita)

    DumpAry WrdMatrix

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.Calculate

End Sub


Public Function SplitSplit(ByRef Delimited As String) As Variant
    Dim Rows() As String
    Dim AryOfArys As Variant
    Dim I As Long

    Rows = Split(Delimited, vbNewLine)
    ReDim AryOfArys(UBound(Rows))
    For I = 0 To UBound(Rows)
        AryOfArys(I) = Split(Rows(I), " ")
    Next
    SplitSplit = AryOfArys
End Function

Public Function CleanString(strSource As String) As String
    On Error GoTo CleanStringErr

    ' convert tabs to spaces first
    strSource = Replace(strSource, vbTab, " ")

    ' convert all CRLFs to spaces
    ' strSource = Replace(strSource, vbCrLf, " ")

    ' Find and replace any occurences of multiple spaces
    Do While (InStr(strSource, "  "))
        ' if true, the string still contains double spaces,
        ' replace with single space
        strSource = Replace(strSource, "  ", " ")
    Loop

    ' Remove any leading or training spaces and return
    ' result
    CleanString = Trim(strSource)
    Exit Function

CleanStringErr:
    ' Insert error-handling code here
End Function


Public Sub DumpAry(ByRef AryOfArys As Variant)
    Dim Row As Long, Col As Long
    Dim strg As String
    Dim myCell As Range
    Dim counter As Long

    Set myCell = ActiveCell
    Col = 0
    For Row = 0 To UBound(AryOfArys)
        For Col = 0 To UBound(AryOfArys(Row))
          ' strg = strg & " - " & AryOfArys(Row)(Col)
         myCell(Row + 1, Col + 1) = AryOfArys(Row)(Col)
        Next
        ' Debug.Print strg
        ' strg = ""
    Next

errHandler:
  Application.ScreenUpdating = True

End Sub
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014)

Ultima modifica di fracarro : 24-07-2020 alle 13:26.
fracarro è offline   Rispondi citando il messaggio o parte di esso