Eseguire macro vba excel da VB6

di il
3 risposte

Eseguire macro vba excel da VB6

Bongiorno a tutto il gruppo.
Come da titolo, non riesco ad eseguire da VB6 una macro che invece funziona benissimo se lanciata direttamente da VBA.
Innanzitutto tengo a precisare che VB6 interagisce benissimo con il file excel.
Questo è il codice che uso all'apertura di VB6:
Private Sub Form_Activate()
Set xlCartella = GetObject("C:\Programmi\Contabilità\Operazioni.xls")
Set MyXL = GetObject(, "Excel.Application")
MyXL.Application.Visible = False
...
e questo è un esempio di codice di interazione VB6/EXCEL che funziona benissimo:
xlCartella.Sheets("Foglio2").Range("G1") = xlCartella.Sheets("Foglio2").Range("C1")
Questa è la macro di excel che funziona benissimo se lanciata direttamente da VBA:
Sub Ordina3()
Sheets("Foglio2").Range("BA1:BD10").Value = Sheets("Foglio2").Range("AW1:AZ10").Value
 Dim ur
 ur = Sheets("Foglio2").Range("BA" & Rows.Count).End(xlUp).Row
    Sheets("Foglio2").Range("BA1:BD" & ur).Sort Key1:=Sheets("Foglio2").Range("BA1"), Order1:=xlAscending, Key2:=Sheets("Foglio2").Range( _
        "BD1"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
        :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
        DataOption2:=xlSortNormal
End Sub
In rete ho trovato qualcosa che sembra dovrebbe funzionare, per cui ho scritto questo codice per attivare la macro "Ordina3" di excel direttamente da VB6:
Private Sub Command1_Click()
Set xlCartella = GetObject("C:\Programmi\Contabilità\Operazioni.xls")
Set MyXL = GetObject(, "Excel.Application")
MyXL.Application.Visible = False 
Dim objxls
Set objxls = createobject("Excel.Application")
objxls.Run "xlCartella!Ordina3"
 
ma non funziona. Esce il seguente messaggio:
Errore di Run-Time 1004:
Impossibile trovare
C:\Users\pinco.pallino\Documents\xlCartella.xlsx.
Controllare l'ortografia del nome del file e verificare che la posizione del file sia corretta
Non riesco nemmeno a capire perchè nel messaggio di errore c'è un percorso diverso del file.
C'è un modo per correggere il codice del Command1?
Grazie

3 Risposte

  • Re: Eseguire macro vba excel da VB6

    Volevo inoltre segnalare che se scrivo il codice direttamente nel pulsante "Command1", tutto funziona alla perfezione. Questo è il codice:
    Private Sub Command1_Click()
    xlCartella.Sheets("Foglio2").Range("BA1") = xlCartella.Sheets("Foglio2").Range("AW1")
    xlCartella.Sheets("Foglio2").Range("BB1") = xlCartella.Sheets("Foglio2").Range("AX1")
    xlCartella.Sheets("Foglio2").Range("BC1") = xlCartella.Sheets("Foglio2").Range("AY1")
    xlCartella.Sheets("Foglio2").Range("BD1") = xlCartella.Sheets("Foglio2").Range("AZ1")
    xlCartella.Sheets("Foglio2").Range("BA2") = xlCartella.Sheets("Foglio2").Range("AW2")
    xlCartella.Sheets("Foglio2").Range("BB2") = xlCartella.Sheets("Foglio2").Range("AX2")
    xlCartella.Sheets("Foglio2").Range("BC2") = xlCartella.Sheets("Foglio2").Range("AY2")
    xlCartella.Sheets("Foglio2").Range("BD2") = xlCartella.Sheets("Foglio2").Range("AZ2")
    xlCartella.Sheets("Foglio2").Range("BA3") = xlCartella.Sheets("Foglio2").Range("AW3")
    xlCartella.Sheets("Foglio2").Range("BB3") = xlCartella.Sheets("Foglio2").Range("AX3")
    xlCartella.Sheets("Foglio2").Range("BC3") = xlCartella.Sheets("Foglio2").Range("AY3")
    xlCartella.Sheets("Foglio2").Range("BD3") = xlCartella.Sheets("Foglio2").Range("AZ3")
     With xlCartella.Sheets("Foglio2").Range("BA1:BD10")
     
    .Sort Key1:=xlCartella.Sheets("Foglio2").Range("BA1"), Order1:=xlAscending, Key2:=xlCartella.Sheets("Foglio2").Range( _
            "BB1"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
            :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
            DataOption2:=xlSortNormal
    End With
    MsgBox "FATTO"
    xlCartella.Save
    End Sub 
  • Re: Eseguire macro vba excel da VB6

    Ma cos'è quel codice?

    Prova con
    
    Dim oXL As Object 
    Set oXL = CreateObject("Excel.Application") 
    oXL.Workbooks.open "C:\Programmi\Contabilità\Operazioni.xls" 
    oXL.Visible = False
    oXL.Application.Run "Operazioni.xls!Ordina3" 
    oXL.Quit 
    Set oXL = Nothing 
    
  • Re: Eseguire macro vba excel da VB6

    Perfetto!
    Lo adatterò alle mie esigenze.
    Grazie!!!
Devi accedere o registrarti per scrivere nel forum
3 risposte