J'essaie d'écrire une valeur dans la cellule "A1", mais j'obtiens l'erreur suivante:
Erreur '1004' définie par l'application ou par l'objet
J'ai essayé beaucoup de solutions sur le net, mais aucune ne fonctionne. J'utilise Excel 2007 et le fichier extensiton est .xlsm.
Mon code est le suivant:
Sub varchanger()
On Error GoTo Whoa
Dim TxtRng As Range
Worksheets("Game").Activate
ActiveSheet.Unprotect
Set TxtRng = ActiveWorkbook.Sheets("Game").Cells(1, 1)
TxtRng.Value = "SubTotal"
'Worksheets("Game").Range("A1") = "Asdf"
LetsContinue:
Exit Sub
Whoa:
MsgBox Err.number
Resume LetsContinue
End Sub
Edit: après avoir obtenu une erreur si je clique sur l'icône d'avertissement, puis sélectionnez Afficher les étapes de calcul pour qu'il fonctionne correctement
Je pense que vous êtes peut-être en train de trébucher sur la protection de la feuille. J'ai un peu rationalisé votre code et je définis explicitement des références aux objets classeur et feuille de calcul. Dans votre exemple, vous faites explicitement référence au classeur et à la feuille lorsque vous définissez l'objet TxtRng, mais pas lorsque vous retirez la protection de la feuille.
Essaye ça:
Sub varchanger()
Dim wb As Workbook
Dim ws As Worksheet
Dim TxtRng As Range
Set wb = ActiveWorkbook
Set ws = wb.Sheets("Sheet1")
'or ws.Unprotect Password:="yourpass"
ws.Unprotect
Set TxtRng = ws.Range("A1")
TxtRng.Value = "SubTotal"
'http://stackoverflow.com/questions/8253776/worksheet-protection-set-using-ws-protect-but-doesnt-unprotect-using-the-menu
' or ws.Protect Password:="yourpass"
ws.Protect
End Sub
Si j'exécute le sous-script avec ws.Unprotect
commenté, j'obtiens une erreur d'exécution 1004. (En supposant que j'ai protégé la feuille et que la plage est verrouillée.) La mise en commentaire de la ligne permet au code de fonctionner correctement.
REMARQUES:
Cells(1, 1)
peut causer une énorme quantité de chagrin. Soyez prudent en l'utilisant. Range("A1")
est beaucoup plus facile à analyser pour les humains et a tendance à éviter les erreurs de frappe au front.remplacer Range ("A1") = "Asdf" avec Range ("A1"). value = "Asdf"
J'ai eu quelques vodkas aux canneberges ce soir donc il me manque peut-être quelque chose ... Est-il nécessaire de régler la plage? Pourquoi ne pas utiliser:
Activeworkbook.Sheets("Game").Range("A1").value = "Subtotal"
Est-ce que cela échoue aussi?
On dirait que vous avez essayé quelque chose de similaire:
'Worksheets("Game").Range("A1") = "Asdf"
Cependant, les feuilles de calcul étant une collection, vous ne pouvez pas faire référence à "Jeu". Je pense que vous devez utiliser l'objet Sheets à la place.
essayez ceci à la place
Set TxtRng = ActiveWorkbook.Sheets("Game").Range("A1")
ADDITION
Peut-être que le fichier est corrompu - cela m'est déjà arrivé plusieurs fois et la seule solution consiste à tout copier dans un nouveau fichier.
S'il vous plaît pouvez-vous essayer ce qui suit:
Est-ce que ça marche?
Sub varchanger()
With Excel.Application
.ScreenUpdating = True
.Calculation = Excel.xlCalculationAutomatic
.EnableEvents = True
End With
On Error GoTo Whoa:
Dim myBook As Excel.Workbook
Dim mySheet As Excel.Worksheet
Dim Rng As Excel.Range
Set myBook = Excel.Workbooks("MyFullyQualified.xlsm")
Set mySheet = myBook.Worksheets("mySheet")
Set Rng = mySheet.Range("A1")
'ActiveSheet.Unprotect
Rng.Value = "SubTotal"
Excel.Workbooks("MyFullyQualified.xlsm").Worksheets("mySheet").Range("A1").Value = "Asdf"
LetsContinue:
Exit Sub
Whoa:
MsgBox Err.Number
GoTo LetsContinue
End Sub