Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Code als Makro oder Schaltfläche

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Code als Makro oder Schaltfläche (1583 mal gelesen)
Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 29. Nov. 2007 18:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wenn ich folgenden Code, der auf einer Befehlsschaltfläche liegt ausführe, bekomme ich beim Range( "A2") die Meldung:
      Laufzeitfehler '1004' -- Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden

Code:
Private Sub ReadFile_Click()

    Sheets("InputData").Range("A2:T6500").ClearContents

    Workbooks.OpenText Filename:= _
        "C:\grfor.txt", Origin:=932, StartRow:=1, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
    Range("A2:T1884").Copy
   
    Windows("Merging.xls").Activate
    Sheets("InputData").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub


Wenn ich denselben Code als Makro laufen lasse, funktioniert es  . Wo liegt mein Fehler ?

Axel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Grebe
Mitglied



Sehen Sie sich das Profil von Grebe an!   Senden Sie eine Private Message an Grebe  Schreiben Sie einen Gästebucheintrag für Grebe

Beiträge: 536
Registriert: 16.12.2002

erstellt am: 29. Nov. 2007 18:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Ich vermute mal, dass dann dein Arbeitsblatt nicht aktiv ist. Setz doch mal noch (wie beim Löschen auch)
Sheets("InputData").
davor. Oder ganz am Anfang einmal
Sheets("InputData").Select
Mathias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 29. Nov. 2007 19:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Hi Axel,

versuche es mit folgendem Code

Private Sub ReadFile_Click()
    With ThisWorkbook.Sheets("InputData")
        .Range("A2:T6500").ClearContents
        Workbooks.OpenText Filename:= _
            "C:\grfor.txt", Origin:=932, StartRow:=1, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
        Range("A2:T1884").Copy
        .Range("A2").PasteSpecial Paste:=xlPasteValues
    End With
End Sub

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 30. Nov. 2007 12:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@Karin,

das funktioniert nicht, da wird dann die Daten aus der Tabelle reingeschrieben, in der der Befehlsknopf ist.

Ich konnte es durch ein "ActiveSheet.Range("A2").Select" lösen.

Axel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bst
Mitglied



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

.

erstellt am: 30. Nov. 2007 14:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Auch Hallo,

Im Klassenmodul einer Tabelle beziehen sich Range-Angaben auf Me (das ist die Tabelle die den Code enthält), nicht auf ActiveSheet. Und, nur in ActiveSheet kann/darf man einen Range selektieren.

Wenn Du nun sowas im Klassenmodul der Tabelle1 tust:

Code:
Option Explicit

Sub x()
  Worksheets(2).Activate
  Range("A1").Select
End Sub



ergibt das einen Laufzeitfehler 1004, da:

a) ActiveSheet nach dem Activate eben die Tabelle2 ist, nicht mehr die Tabelle1 und

b) Range("A1") sich auf Me bezieht, d.h. in Tabelle1 liegt, keinesfalls in Tabelle2 !!!

Verzichte generell auf Selects und/oder Activates, dann hast Du dieses Problem einfach nicht.

CUSee You, Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 30. Nov. 2007 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Hi Axel,

du hast nicht geschrieben, in welcher Arbeitsmappe sich der CommandButton befindet, deshalb habe ich angenommen, dass die Werte in die Arbeitsmappe mit dem Button geschrieben werden. Wenn dies jedoch eine andere Arbeitsmappe ist, dann musst du nur anstelle ThisWorkbook den Namen der Arbeitsmappe schreiben, in die kopiert werden soll - also

With Workbooks("Die betreffende Arbeitsmappe.xls").Worksheets("InputData")

Kopiert wird aus der geöffneten Text-Datei nach Tabelle "InputData" in der Arbeitsmappe "Die betreffende Arbeitsmappe.xls" die nicht den CommandButton enthält.

Wie Bernd schon geschrieben hat - in VBA kann zu 99% auf Select und Ativate verzichtet werden.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 30. Nov. 2007 16:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für Eure Antworten, wieder was dazugelernt.

Wenn ich jetzt aber meinen Code anschaue:

Code:
    Workbooks.OpenText Filename:=FilePath + Filename, Origin:=932, StartRow:=1, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
    ActiveSheet.Range("A2:T1884").Copy
   
    Windows("Merging.xls").Activate
    Sheets("InputData").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   
    Sheets("MenuData").PivotTables("Menu_1").PivotCache.Refresh

    Workbooks(Filename).Close SaveChanges:=False


dann komme ich da aber nicht um das Activate rum oder wie müsste das dann aussehen oder gäbe es noch eine bessere Strategie die Textdatei in die bestehende Mappe einzulesen? Die Befehlsschaltfläche liegt in Merging.xls

Noch eine Zusatzfrage:

Durch das Kopieren sind ja Daten in der Zwischenablage und beim Schliessen der Datei wird gefragt, ob man diese Daten behalten will. Wie kann ich diese Abfrage mit "Nein" ausschalten ?

Axel

[Diese Nachricht wurde von Axel.Strasser am 30. Nov. 2007 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 30. Nov. 2007 18:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Hi Axel,

Frage: hast du meinen Code getestet? Wenn ich deinen Code richtig interpretiere: es wird in der Arbeitsmappe mit dem CommandButton die Tabelle "InputData" im Bereich A2:T6500 gelöscht, dann eine Textdatei geöffnet und nach Excel transferiert, der Bereich A2:T1884 dieser transferierten Datei kopiert und in die Tabelle "InputData" der Arbeitsmappe mit dem CommandButton kopiert und in A2 die Werte eingefügt - und genau das macht mein Code und alles ohne Select oder Activate.

Zu deiner anderen Frage: Application.CutCopyMode = False

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 30. Nov. 2007 22:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Karin,

habe Deinen Code noch getestet, er war so nicht lauffähig, musste ihn noch ändern (ActiveSheet):

Code:
    With Workbooks(XlsFileName).Sheets("InputData")
        .Range("A2:T65000").ClearContents
        Workbooks.OpenText Filename:=TxtFilePath + TxtFilename, _
            Origin:=932, StartRow:=1, DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
        ActiveSheet.Range("A2:T1884").Copy
        .Range("A2").PasteSpecial Paste:=xlPasteValues
    End With

    Workbooks(XlsFileName).Sheets("MenuData").PivotTables("Menu_1").PivotCache.Refresh

    Application.CutCopyMode = False
    Workbooks(TxtFilename).Close 'SaveChanges:=False


Der Hinweis mit dem CutCopyMode hat mich noch weitergebracht, aber erst nachdem ich geschnallt habe, das der Befehl den Zwischenspeicher leer.

Axel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 01. Dez. 2007 07:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Hi Axel,

da muss ich dir widersprechen - der Code läuft auch ohne "Activesheet" richtig, denn in dem Augenblick, wenn eine Datei geöffnet wird ist sie automatisch aktiv. Du musst nur beachten, dass in dieser Code-Zeile kein Punkt vor Range stehen darf.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Axel.Strasser
Ehrenmitglied V.I.P. h.c.
Selbstständig im Bereich PLM/CAx



Sehen Sie sich das Profil von Axel.Strasser an!   Senden Sie eine Private Message an Axel.Strasser  Schreiben Sie einen Gästebucheintrag für Axel.Strasser

Beiträge: 4107
Registriert: 12.03.2001

Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!

erstellt am: 01. Dez. 2007 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Karin,

es tut mir leid aber es braucht bei mir das ActiveSheet, ohne das geht es nicht und wenn ich den Beitrag von Bernd oben lese, ist es klar:

Zitat:
Im Klassenmodul einer Tabelle beziehen sich Range-Angaben auf Me (das ist die Tabelle die den Code enthält), nicht auf ActiveSheet.

Axel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bst
Mitglied



Sehen Sie sich das Profil von bst an!   Senden Sie eine Private Message an bst  Schreiben Sie einen Gästebucheintrag für bst

Beiträge: 192
Registriert: 31.08.2004

.

erstellt am: 03. Dez. 2007 09:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Axel.Strasser 10 Unities + Antwort hilfreich

Morgen,

Zitat:
es tut mir leid aber es braucht bei mir das ActiveSheet ...

Das sehe ich auch so. Ohne dem ActiveSheet würde sich der Range auf Me beziehen, da der Code ja im Klassenmodul einer Tabelle steht.

Übrigens, wenn Du nur die Werte 'umkopieren' möchtest könntest Du anstatt Copy und Paste und Application.CutCopyMode diese auch einfach zuweisen. Falls der Button in der Zieltabelle liegen sollte, z.B. so, wobei Du Me. auch weglassen könntest.

Code:
Me.Range("A2:T1884").Value = ActiveSheet.Range("A2:T1884").Value

Oder mit einem vorhergehenden With eben via:

Code:
.Range("A2:T1884").Value = ActiveSheet.Range("A2:T1884").Value

CUSee You, Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz