1 votes

Macro VBA : erreur d'exécution 91 - Variable d'objet ou variable de bloc non définie

Je continue à obtenir une erreur d'exécution de 91. J'ai fait des recherches et il semble qu'il s'agisse d'un problème de définition/déclaration correcte de mes variables/objets. Je suis presque sûr d'avoir tout référencé correctement, et la même macro fonctionnait auparavant... Mais tout d'un coup, la macro vba s'est cassée. Avez-vous une idée de la raison de ce problème ?

Note : Il y a deux classeurs séparés. Un classeur sert de base de données pour les clients, et l'autre est une feuille modèle dans laquelle je peux rechercher un client, et la feuille modèle se remplit automatiquement.

L'erreur est trouvée lors de l'attribution d'une valeur à la variable LastRow. J'ai essayé d'utiliser Set devant, mais cela ne semble toujours pas fonctionner.

Sub AddNewClient()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim LastRow As Long
    Dim strClient As String
    Dim strEmail As String
    Dim strPhone As String
    Dim ClientDBWB As Excel.Workbook

    Set CurrWkbk = ActiveWorkbook

    ClientDBWB = Workbooks.Open("[SomePath][File Name.xlsx]")

***The Debugger shows the error here*** when assigning LastRow a value.

    LastRow = ClientDBWB.Sheets("ClientDB").Cells(Rows.Count, "A").End(xlUp).Row + 1

    strClient = CurrWkbk.Sheets("House").Range("C11:J11").Cells(1, 1).Value
    strEmail = CurrWkbk.Sheets("House").Range("C12:J12").Cells(1, 1).Value
    strPhone = CurrWkbk.Sheets("House").Range("C13:J13").Cells(1, 1).Value

    With ClientDBWB.Sheets("ClientDB")
        .Cells(LastRow, 1).Value = strClient
        .Cells(LastRow, 2).Value = strPhone
        .Cells(LastRow, 4).Value = strEmail
    End With
    MsgBox "Client is Added to the Database!"
    Application.ScreenUpdating = True

0voto

r2d3 Points 1453

L'erreur se produit lors de l'affectation d'une valeur à la variable LastRow. J'ai essayé d'utiliser Set devant, mais cela ne semble toujours pas fonctionner.

Si vous avez utilisé SET devant LastRow, vous n'avez pas respecté la syntaxe de VBA. Si vous avez déclaré que LastRow est un Long, les affectations ne peuvent être effectuées qu'en utilisant l'opérateur "=".

D'autre part, ClientDBWB est un objet pour lequel vous devez utiliser la commande SET. Utilisez le débogueur pour voir les différents résultats lorsque vous utilisez SET et lorsque vous ne l'utilisez pas.

Utilisez "option explicite" pour vous obliger à réfléchir au type d'objets que vous manipulez car vous devez tout déclarer.

Un autre problème que j'ai vu est que :

strClient = CurrWkbk.Sheets("House").Range("C11:J11").Cells(1, 1).Value

est une façon plus compliquée d'écrire :

strClient = CurrWkbk.Sheets("House").Range("C11").value

ou même

strClient = CurrWkbk.Sheets("House").Range("C11")

0voto

VBasic2008 Points 116

Copie par affectation

Option Explicit

Sub AddNewClient()

    ' Source
    Dim swb As Workbook: Set swb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = swb.Worksheets("House")

    Application.ScreenUpdating = False

    ' Destination
    Dim dwb As Workbook: Set dwb = Workbooks.Open("C:\Test\Test.xlsx")
    Dim dws As Worksheet: Set dws = dwb.Worksheets("ClientDB")
    Dim dRow As Long: dRow = dws.Cells(dws.Rows.Count, "A").End(xlUp).Row + 1
'    ' Or...
'    Dim dRow As Long: dRow = dws.Cells(dws.Rows.Count, 1).End(xlUp).Row + 1
'    Dim dRow As Long: dRow = dws.Range("A" & dws.Rows.Count).End(xlUp).Row + 1

    ' Copy
    dws.Cells(dRow, 1).Value = sws.Range("C11").Value ' Client
    dws.Cells(dRow, 2).Value = sws.Range("C12").Value ' Phone
    dws.Cells(dRow, 4).Value = sws.Range("C13").Value ' Email

    ' Or opting for only 'Range' or only 'Cells':
'    ' Or...
'    dws.Range("A" & dRow).Value = sws.Range("C11").Value ' Client
'    dws.Range("B" & dRow).Value = sws.Range("C12").Value ' Phone
'    dws.Range("D" & dRow).Value = sws.Range("C13").Value ' Email
'    ' Or...
'    dws.Cells(dRow, "A").Value = sws.Cells(11, "C").Value ' Client
'    dws.Cells(dRow, "B").Value = sws.Cells(12, "C").Value ' Phone
'    dws.Cells(dRow, "D").Value = sws.Range(13, "C").Value ' Email
'    ' Or...
'    dws.Cells(dRow, 1).Value = sws.Cells(11, 3).Value ' Client
'    dws.Cells(dRow, 2).Value = sws.Cells(12, 3).Value ' Phone
'    dws.Cells(dRow, 4).Value = sws.Range(13, 3).Value ' Email

    ' Save and Close
    'dwb.Close SaveChanges:=True

    Application.ScreenUpdating = True

    ' Inform
    MsgBox "Client is Added to the Database!"

End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X