Makro anpassen

Hallo Profis,
habe eine Frage, die für euch vielleicht bescheuert klingt, stelle sie aber trotzdem!

Habe eine Excel-Datei und eine TXT_Datei. Habe in Excel ein Makro aufgezeichnet, wo die TXT_Datei über Excel geöffnet wird, die Werte dann nach Excel rübernimmt, also in die entspechende Datei, ein neues Blatt einfügt und dort die Infos einfügt. Dies funktioniert aber nur auf meinem Rechner. Soll aber auch für die anderen Mitstreiter zur Vereinfachung dienen.
An welcher Stelle und wie muss ich die VBA umstellen, so dass dies auf jedem Rechner funktioniert? Die beiden Dateien bekommen die MA nat. auch von mir.

Hier meine Aufzeichnung:

Sub öffneneinfügen()

Workbooks.OpenText Filename:= _
„C:\Users\Charly\Desktop\Textdatei-Wochenmeldung.txt“, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:=False _
, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
Sheets(„Textdatei-Wochenmeldung“).Move After:=Workbooks( _
„Wochenmeldung-Berechnung.xls“).Sheets(2)
Application.Left = 94
Application.Top = -3.5
ActiveWindow.ScrollRow = 338
Range(„A346“).Select
ActiveCell.FormulaR1C1 = „Name, Vorname“
Range(„B4800“).Select
Selection.ClearContents
Range(„C346:I346“).Select
Selection.Cut Destination:=Range(„B346:H346“)
Range(„B345“).Select
End Sub

Der Pfad C; (siehe oben) ist eben nur für meinen Rechner bestimmt.Soll aber allgemein abgefragt werden.
Bin gespannt auf eure Infos!

Hallo,

Sub öffneneinfügen()

Workbooks.OpenText Filename:= _
„C:\Users\ Charly\Desktop \Textdatei-Wochenmeldung.txt“,

Nutze doch die Umgebungsvariablen, denn so funktioniert dieser Code nur unter dem Benutzerprofil Charly , auch müssen die Sachen immer auf dem Desktop liegen!

Hier Hilfe:

Start -> Ausführen -> „cmd“ ohne „“, bestätigen -> „set“ eintippen ohne „“ -> [ENTER]

-> http://de.wikipedia.org/wiki/Umgebungsvariable#Windows

Besser ist es aber immer das Verzeichnis zu verwenden, wo gerade das Script gestartet wurde:

-> http://www.ozgrid.com/VBA/WorkbookPath.htm

Feedback bitte :wink:

Grüße Roman

An welcher Stelle und wie muss ich die VBA umstellen, so dass
dies auf jedem Rechner funktioniert? Die beiden Dateien
bekommen die MA nat. auch von mir.

Hallo TS,

sag ihnen sie sollen beide Dateien in den gleichen Ordner stellen.

Sub öffneneinfügen()
Workbooks.OpenText Filename:= _
„C:\Users\Charly\Desktop\Textdatei-Wochenmeldung.txt“,

Der Code -Anfang ist dann:

Sub öffneneinfügen()
Workbooks.OpenText Filename:= _
ThisWorkbook.Path & „\Textdatei-Wochenmeldung.txt“,

Gruß
Reinhard

Hallo Tausendschön,

um ganz flexibel zu sein könntest du vor deinem Code noch folgendes einbauen:

Sub öffneneinfügen()
 Dim pfad as Variant

 pfad = Application.GetOpenFilename( \_
 "Text-Dateien (\*.txt), \*.txt, Alle Dateien (\*.\*), \*.\*", , \_
 "TXT-Datei öffnen", , False)
 If TypeName(pfad) = "Boolean" Then Exit Sub

und dann deinen code ein bisschen ändern:

Workbooks.OpenText Filename:= pfad, _

Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited,
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False,
Comma:=False _
, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1),
Array(2, 1), Array _
(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
Sheets(„Textdatei-Wochenmeldung“).Move After:=Workbooks( _
„Wochenmeldung-Berechnung.xls“).Sheets(2)
Application.Left = 94
Application.Top = -3.5
ActiveWindow.ScrollRow = 338
Range(„A346“).Select
ActiveCell.FormulaR1C1 = „Name, Vorname“
Range(„B4800“).Select
Selection.ClearContents
Range(„C346:I346“).Select
Selection.Cut Destination:=Range(„B346:H346“)
Range(„B345“).Select
End Sub

Ich habs jetzt nicht getestet, aber so sollte es eigentlich laufen.
Dann kann die Datei stehen, wo sie will, man kann sie immer auswählen.

Gruß, Andreas

Hallo Andreas,

erst einmal, du bist klasse!
Habe es soweit angepasst, aber bei

Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited,

bringt er mir;

Fehler beim Kompilieren
Syntaxfehler

Kannst du mir noch einmal helfen?

tausendschön

erst einmal, du bist klasse!
Habe es soweit angepasst, aber bei

Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited,

Fehler beim Kompilieren
Syntaxfehler

Hallo tausendschön,

Tipp, bei reinkopierten Fremdcode aus dem Internet und es treten Fehler auf in Codezeilen die mit Unterstrich auf mehrere Zeilen verteilt sind, entferne die Unterstriche sodaß wieder eine lange einzelne Codezeile da ist.

Dann gehe mit dem Curser Codeuzeilen nach unten, wenn der Deitor die Codezeile ohne Fehlermeldung annimmt, so stimmt sie jetzt von der Syntax.

Jetzt gehe hin und unterteile sie selbst noch mal mit dem Unterstrich.
Bzw. ich trenne immer durch Einfügen an der Trennstelle von

Leerzeichen, Unterstrich, Leerzeichen und Enter drücken.

Wenn die Trennstelle innerhalb eines Strings liegt wie im nachfolgenden Code bei der Zeile:
Pfad = Application.GetOpenFilename…

dann füge erst an der Trennstelle ein:
" & "
Jetzt kannst du wie oben beschrieben direkt vor oder nach dem & trennen.

Wenn wie du geschrieben hast der Name der txt-Datei feststeht so sehe ich aber keinen Grund für GetOpenFilename.

Gruß
Reinhard

Option Explicit

Sub öffneneinfügen()
Dim Pfad As Variant
Pfad = Application.GetOpenFilename("Text-Dateien (\*.txt), \*.txt," & \_
 "Alle Dateien (\*.\*), \*.\*", , "TXT-Datei öffnen", , False)
If TypeName(Pfad) = "Boolean" Then Exit Sub
Workbooks.OpenText Filename:=Pfad, Origin:=xlWindows, StartRow:=1, \_
 DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, \_
 ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:=False \_
 , Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), \_
 Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
Sheets("Textdatei-Wochenmeldung").Move After:=Workbooks( \_
"Wochenmeldung-Berechnung.xls").Sheets(2)
Application.Left = 94
Application.Top = -3.5
ActiveWindow.ScrollRow = 338
Range("A346").Value = "Name, Vorname"
Range("B4800").ClearContents
Range("C346:I346").Cut Destination:=Range("B346")
Range("B345").Select
End Sub

Hallo Reinhard,

danke für deine wertvollen Tipps und habe es auch so ausgeführt. Aber du hast mich auf eine Idee gebracht. Meine TXT-Datei steht fest und hat ja den Namen Textdatei-Wochenmeldung
und der bleibt auch so. Die Datei wird immer wieder nach Beendigung der Aufgabenerledigung geleert und gespeichert (unter den gleichen Namen). Da kann man es doch noch etwas vereinfachen, oder?

Bin gespannt!
tausendschön

Meine
TXT-Datei steht fest und hat ja den Namen
Textdatei-Wochenmeldung
und der bleibt auch so.
Da kann man es doch noch etwas
vereinfachen, oder?

Hallt TS,

klar geht das, gehe zum Optiker, danach schaust du dir deine Beitragsfolge nochmals an, da steht schon mein erster beitrag wo genau das gemacht wird :smile:)

Gruß
Reinhard

Hallo Reinhard,

du dast ja sooooo recht. Danke noch mal für deine Hinweise und Infos.
Danke auch an alle anderen, die mir sehr geholfen haben. Habe viel dazugelernt, mein makro angepasst und es -hurra- funktioniert. Auch auf einem anderem Rechner. Jetzt kann das Wochenende kommen.

Euch allen eine schöne Zeit!

Grüße tausendschön

Mir paßt da was nicht :smile:

Danke auch an alle anderen, die mir sehr geholfen haben. Habe
viel dazugelernt, mein makro angepasst und es -hurra-
funktioniert. Auch auf einem anderem Rechner. Jetzt kann das
Wochenende kommen.

Hallo TS,

und zwar daß du da keine Nachhaltigkeit hast.

Die kann ja in deinem Fall nicht nötig sein aber ich will dich trotzdem darauf aufmerksam machen.

Ich beschreib es mal an einem anderen beispiel. Angenommen du hast da eine Bestandsliste von deinen Artikeln, mit z.B. nur diesen Spaltentiteln in A und B:

Artikel Bestand

So, jetzt kriegste den Lieferschein von neuanlieferung, den nimmste und änderst dementsprechen die Werte in B je nach geliefertem Artikel.
Jetzt stell dir vor du bist grad beim Eingeb also der Werteänderung in B und deine Freundin, dein Freuns, wer auch immer und es geht um etwas wichtiges o.ä.

Weißt du noch nach dem 30 min Telefonat noch welche Artikel in dem
Lieferschein du schon in B beim Bestand geändert hast und welche nicht?

Die Lösung ist einfach. Du hast ein Blatt wo die Bestandsliste ist.
Alle Eingaben machst du aber in einem anderen Blatt „Zugang/Abgang“
Dort ist für jedes datum eine eigene Spalte.

So kannst du auch z.B. nach einer Inventur wo es große Abweichunng gibt/gab, anhand dem Vergleich der Lieferscheine mit dem Blatt „Zugang/Abgang“ nachprüfen ob es da Zahlendreher gab oder Einheitenverwechslung o.ä.

Umgemünzt auf deinen fall, wie gesagt, bei dir kann das ja gar nicht notwendig sein, k.A., aber besser wäre es wenn du die txt die du da verteilst zumindest bei dir fortlaufend abspeicherst als
TextdateiName_Datum.txt

Gruß
Reinhard

Hi,
hatte mir am Angang es auch überlegt. Ist aber nicht erforderlich, weil ich die Daten mir vorher aus SAP gezogen habe und als PDF-Datei abgespeicherz habe. Weil aber Excel die PDF-Datei nicht lesen kann, mußte ich sie als Zwischenschritt erst in eine TXT-Datei umwandeln. Dies kann ich ja nun über Excel öffnen und damit rechnen. Für das Rausziehen der Werte und den nachfolgenden Berechnungen, habe ich mir auch ein Markto geschrieben und es läuft fehlerlos. Also Zahlendreher oder andere Fehler können sich nicht einschleichen. Das einzige was passieren kann, dass ich aus SAP falsche Eingaben geamcht habe und demzufolge falsche Werte erhalte. Wenn mir dass Ergebnis müsteriös vorkommen wurde, könnte ich mir die gezogenen Infos in der PDF-Datei nochmal anschauen und dort den Fehler suchen und finden, denn diese Datei speichere ich ab. Aber trotzdem DANKE für deine lieben Hinweise und tschüß tausendschön.