wake-up-neo.com

Schreiben einer Zeichenfolge in eine Zelle in Excel

Ich versuche, einen Wert in die Zelle "A1" zu schreiben, erhalte jedoch die folgende Fehlermeldung: 

Anwendungsdefinierter oder objektdefinierter Fehler '1004'

Ich habe viele Lösungen im Netz ausprobiert, aber keine funktionieren. Ich benutze Excel 2007 und die Dateierweiterung ist .xlsm.

Mein Code lautet wie folgt:

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

Bearbeiten: Nachdem ich eine Fehlermeldung erhalten habe, wenn ich auf das Warnsymbol klicke und dann "Berechnungsschritte anzeigen" auswähle, funktioniert es ordnungsgemäß.

9
knightrider

Ich denke, Sie werden vom Blattschutz gestolpert. Ich habe Ihren Code ein wenig rationalisiert und setze explizit Verweise auf die Arbeitsmappen- und Arbeitsblattobjekte. In Ihrem Beispiel verweisen Sie explizit auf die Arbeitsmappe und das Arbeitsblatt, wenn Sie das TxtRng-Objekt festlegen, nicht jedoch, wenn Sie den Arbeitsschutz aufheben.

Versuche dies:

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

Wenn ich das U-Boot mit ws.Unprotect auskommentiert ausführe, erhalte ich einen Laufzeitfehler 1004. (Vorausgesetzt, ich habe das Blatt geschützt und den Bereich gesperrt.) Wenn Sie die Zeile auskommentieren, kann der Code problemlos ausgeführt werden.

ANMERKUNGEN: 

  1. Ich stelle den Blattschutz wieder ein, nachdem ich in den Bereich geschrieben habe. Ich gehe davon aus, dass Sie dies tun möchten, wenn Sie das Blatt überhaupt geschützt haben. Wenn Sie den Schutz später nach der weiteren Verarbeitung neu einstellen, müssen Sie diese Zeile entfernen.
  2. Ich habe den Fehlerhandler entfernt. Die Excel-Fehlermeldung gibt Ihnen viel mehr Details als Err.number. Sie können es wieder einsetzen, sobald Ihr Code funktioniert und angezeigt wird, was immer Sie möchten. Natürlich können Sie auch Err.Description verwenden.
  3. Die Cells(1, 1)-Notation kann sehr viel Trauer verursachen. Seien Sie vorsichtig damit. Range("A1") ist für Menschen viel einfacher zu analysieren und neigt dazu, Fehler auf der Stirn zu schlagen.
13
Jon Crowell

ersetzen Sie Range ("A1") = "Asdf" mit Range ("A1"). Wert = "Asdf"

1
T. I. Troll

Ich hatte heute Nacht ein paar Cranberry-Wodkas, so dass mir etwas fehlen könnte ... Ist die Einstellung des Bereichs notwendig? Warum nicht verwenden:

Activeworkbook.Sheets("Game").Range("A1").value = "Subtotal"

Versagt dies auch?

Sieht aus, als hätten Sie etwas Ähnliches versucht:

'Worksheets("Game").Range("A1") = "Asdf"

Arbeitsblätter sind jedoch eine Sammlung, daher können Sie nicht auf "Spiel" verweisen. Ich denke, Sie müssen stattdessen das Objekt Sheets verwenden. 

1
UberNubIsTrue

versuchen Sie es stattdessen

Set TxtRng = ActiveWorkbook.Sheets("Game").Range("A1")

ADDITION

Möglicherweise ist die Datei beschädigt - das ist mir schon mehrmals passiert und die einzige Lösung ist, alles in eine neue Datei zu kopieren.

Bitte können Sie Folgendes versuchen:

  • Speichern Sie eine neue xlsm-Datei und nennen Sie sie "MyFullyQualified.xlsm"
  • Fügen Sie ein Blatt ohne Schutz hinzu und nennen Sie es "mySheet".
  • Fügen Sie der Arbeitsmappe ein Modul hinzu, und fügen Sie die folgende Prozedur hinzu

Läuft das?

 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
0
whytheq