Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
704to708
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
704to708
704to708
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arbeitsblätter aktivieren

Arbeitsblätter aktivieren
06.12.2005 20:13:44
F Zap
Hallo,
ich öffne durch betätigen eines CommandButtons eine zweite Datei,
lese Werte aus dieser Datei aus, und kopiere sie in die erste
Datei. Das klappt auch.
Es gibt nur ein Problem, wenn schon mehrere Blätter in der ersten
Datei vorhanden sind.
Nun habe ich versucht, im Code den Namen des Blattes auf der der
CommandButton ist auszulesen(dieser ist nicht immer gleich),
und beim kopieren der Werte von Datei zwei, dieses Blatt wieder
anzusprechen durch ersetzen der Zeile: Windows(2).Activate durch
Worksheets("name").Activate.
Da habe ich es mir wohl zu einfach gemacht, denn das funktioniert nicht.
Kann mir jemand sagen wie das geht???
Mit freundlichen Grüßen Frank
Dim var As Variant
Dim sFiles As String
Dim ende As Variant 'letzter wert import sheet
Dim endea As Variant 'letzter wert blanko sheet zeile a
Dim name As String 'name vom blanko Sheet
name = ActiveSheet.name
Cells(1, 15) = name
ChDir ("c:\")
sFiles = "TRA Files (*.TRA), *.,"
var = Application.GetOpenFilename(sFiles) 'var = pfad und Dateiname
If var = False Then
MsgBox "keine Datei angewählt"
Exit Sub
End If
Workbooks.OpenText Filename:=var, Origin:= _
xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, Comma:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
ende = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Sheets(1).Range("a3:b" & ende).Copy
Windows(2).Activate
ActiveSheet.Cells(11, 1).Activate
ActiveSheet.Paste
Cells(1, 1) = var
Windows(2).Activate
Application.CutCopyMode = False
ActiveWindow.Close
endea = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(1).Range("d20200:a" & endea).Delete
Application.ScreenUpdating = True
Range("A3").Select
MsgBox "Werte sind übertragen"
End Sub

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 00:51:02
Reinhard
Hi F Zap,
ohne deinen Code gelesen zu haben, probier mal Application.caller bzw application.caller.name evtl hilft das
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
AW: Arbeitsblätter aktivieren
07.12.2005 06:30:51
F Zap
Hallo Reinhard
Erst einmal Danke für deine Antwort.
application.caller.name habe ich versucht, klappt auch nicht.
Ich formuliere die Frage mal anders, und lege zwei Beispieldateien
auf dem Server ab.
https://www.herber.de/bbs/user/29009.xls

Die Datei https://www.herber.de/bbs/user/29010.txt wurde aus Datenschutzgründen gelöscht

die txt Datei hat eigentlich die Endung .TRA,
das konnte ich aber nicht auf den Server legen.
Problem:
Die eine Exeldatei liegt schreibgeschützt auf dem Server.
Diese Datei wird von den Mitarbeitern geöffnet, und das
Blatt wird in Ihre eigene Datei kopiert, und umbenannt.
Auf diesem Blatt ist ein CommandButton, der bei betätigen
eine andere Datei öffnet, Werte aus ihr kopiert, und in das
erste Blatt einfügt.
Falls dieses erste Blatt sich an der ersten Position in der Datei
befindet, geht das auch, ist es aber an einer anderen Stelle,
so klappt das nicht. Die Werte werden zwar importiert, aber
im ersten Blatt der Datei werden dann die ersten Reihen gelöscht.
Also muss ich wohl beim Blatt aktivieren immer auch den Blattnamen
mit angeben. Aber wie geht das????
Mit freundlichen Grüssen
Frank
Mit freundlichen Grüssen Frank
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 11:38:24
Reinhard
Hi F Zap,
warm da mV als DM formatirt werden ist mir unklar und auch die arrays bei opentext.
Jedenfalls liest mein Code ins aktuelle Blatt, vielleicht nützt er dir ja was.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
Option Explicit
Private Sub CommandButton1_Click()
Dim var As Variant
Dim sFiles As String
Dim ende As Variant 'letzter wert import sheet
Dim endea As Variant 'letzter wert blanko sheet zeile a
Dim name As String 'name vom blanko Sheet
Dim Satz, zei As Long
Application.ScreenUpdating = False
ChDrive "C"
ChDir "c:\download"
sFiles = "TRA Files (*.txt), *.txt"
var = Application.GetOpenFilename(sFiles) 'var = pfad und Dateiname
If var = False Then
MsgBox "keine Datei angewählt"
Exit Sub
End If
Close
Open var For Input As #1
Input #1, Satz
Range("A1:B1") = Split(Satz, Chr(9))
Input #1, Satz
Range("A2:B2") = Split(Satz, Chr(9))
zei = 2
While Not EOF(1)
Input #1, Satz
zei = zei + 1
Cells(zei, 1) = Satz
Input #1, Satz
Cells(zei, 2) = Satz
Wend
Close
endea = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Sheets(1).Range("d20200:a" & endea).Delete
Application.ScreenUpdating = True
Range("A3").Select
MsgBox "Werte sind übertragen"
End Sub
Sub tt()
Dim n
For n = 1 To 16
MsgBox Asc(Mid(Cells(1, 1), n, 1))
Next n
End Sub

Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 12:09:09
Windows(2).Activate
Hallo Reinhard,
das geht gar nicht.
Die CPU Auslastung geht auf 100%, und ich kann das Programm
nur mit dem Task Manager beenden.
Ich lese doch den Blattnamen mit: name = ActiveSheet.name
aus, was auch funktioniert.
Kann man den nicht im Code einzelne Blätter mit ihrem
durch: ????????????
Mit freundlichen Grüssen Frank
AW: Arbeitsblätter aktivieren
07.12.2005 12:43:40
Reinhard
Hi Frank,
ein variablenname "Name" ist unbedingt zu vermeiden, da "name" schon von excel benutzt wird.
Benutz Blattname oder nam oder oder
with worksheets(Blattname)
.Range("A1")="xyz"
end with
Der Punkt ist wichtig.
Oder wenns denn unbedingt Activate sein muss
worksheets(Blattname).activate
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 14:30:04
F Zap
Hallo Reinhard,
das:
with worksheets(nam).Range("A1")="xyz"
end with
und:
worksheets(nam).activate
habe ich probiert, es kommt immer die Fehlermeldung:
Runtime error 9, Subscript out of range.
und zwar, wenn das Programm versucht, nach dem kopieren der Werte wieder zur
import Datei zurückzuspringen.
Mit freundlichen Grüssen Frank
AW: Arbeitsblätter aktivieren
07.12.2005 15:02:49
Reinhard
Hi Frank,
nicht in eine Zeile, with geht so:
with worksheets(Blattname)
.Range("A1")="xyz"
.Range("A2")="abs"
.range("d5").activate
end with
poste ml deinen Gesamtcode
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 15:45:27
F Zap
Hallo Reinhard,
ich hatte das (with.....) nicht in eine Reihe geschrieben, sondern so kopiert, wie es in deiner Antwort war.
Hier ist der Gesamtcode:

Private Sub CommandButton1_Click()
Dim var As Variant
Dim sFiles As String
Dim ende As Variant 'letzter wert import sheet
Dim endea As Variant 'letzter wert blanko sheet zeile a
Dim blatt As String 'name vom blanko Sheet
blatt = ActiveSheet.name
Cells(1, 15) = blatt
ChDir ("c:\")
sFiles = "TRA Files (*.TRA), *.,"
var = Application.GetOpenFilename(sFiles) 'var = pfad und Dateiname
If var = False Then
MsgBox "keine Datei angewählt"
Exit Sub
End If
Workbooks.OpenText Filename:=var, Origin:= _
xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, Comma:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))
ende = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Sheets(1).Range("a3:b" & ende).Copy
Windows(2).Activate
ActiveSheet.Cells(11, 1).Activate
ActiveSheet.Paste
Cells(1, 1) = var
Windows(2).Activate	'hier ist wohl der Fehler, bei mehreren Blätter in der Arbeitsmappe weiß das Prorgramm wohl nicht welches Sheet gemeint ist
Application.CutCopyMode = False
ActiveWindow.Close
endea = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(1).Range("d20200:a" & endea).Delete
Application.ScreenUpdating = True
Range("A3").Select
MsgBox "Werte sind übertragen"
End Sub

Mit freundlichen Grüssen Frank
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 16:48:25
Reinhard
Hi frank,
warum nimmst du nicht meinen Code der funktioniert und liest ein.musst nur txt in tra usw anpassen.
Sheets(1) oder Windows(2) ist sowieso schlecht zu lesen.
Speichern des Blattnamens des aktuellen Blattes:
Blatt=activesheet.name
wieder zurück
worksheets(Blatt).active
aber select und activate braucht man zu 99 % nie.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
AW: Arbeitsblätter aktivieren
07.12.2005 17:41:00
F Zap
Hallo Reinhard,
ich habe es mit deinem code in der orginal Datei versucht,
aber das Programm hängt sich auf.CPU Auslastung 100%.
Kopiere ich den Code in eine neue Datei, mit nur einem CommandButton,
dann funktioniert das.
Es liegt wohl an der größe der Datei.
Ich habe mal versucht die orginal Datei auf dem Server zu legen,
das geht nicht, sie ist zu groß (1,4MB).
Mit freundlichen Grüssen Frank
Anzeige
AW: Arbeitsblätter aktivieren
07.12.2005 20:23:15
Reinhard
Hi Frank,
seltsam, die Textdatei ist doch "nur" 150 KB gross.
Und wenn du das so abänderst:

while not eof(1) and zei<7000 'verschiedene Werte testen

Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
AW: Arbeitsblätter aktivieren
07.12.2005 21:05:29
F Zap
Hallo Reinhard,
die Arbeitsmappe ist so groß, da die importierten
Werte weiter berechnet werden.
Deinen Tip: "while not eof(1)......
werde ich morgen probieren.
Schon einmal Danke für deine Hilfe
Gruß
Frank
AW: Arbeitsblätter aktivieren
07.12.2005 21:11:09
Reinhard
Hi frank,
dann gebe den Formeln kurze Namen und setze die ein, das verkleinert. Oder gleich alles per makros berechnen.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
Anzeige
AW: Arbeitsblätter aktivieren
08.12.2005 13:35:02
F Zap
Hallo Reinhard,
ich habe den Fehler gefunden:
endea = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Sheets(1).Range("d20200:a" & endea).Delete
ich habe jetzt :Sheets(blattname)
eingetragen, und das funktioniert.
zu den Formeln:
in einer Spalte hat die Zelle 11 die Formel: =(($G$13*A11)-$G$11)
in der Spalte daneben die Zelle 11 die Formel: =(ABS((C11-B11)/$I$11)*100)
beide Formeln sind in den Zellen von 11 bis 20000
Die Werte von A11, C11,B11 ändern sich in jeder Reihe von 11 bis 20000
Wie das mit einem Makro geht weiß ich nicht, ich fange gerade erst mit
VBA an.
Hast Du dazu eine Idee?
Für Deine Hilfe vielen Dank
Mit freundlichen Grüssen Frank
Anzeige
AW: Arbeitsblätter aktivieren
09.12.2005 11:04:09
Reinhard
Hi Frank,
dieser Thread ist lang genug, stelle die neue Frage als neuen Beitrag hier rein. Und vielleicht mehr Infos, also Angabe der Zellennamen wo die Formeln drin stehen usw. und ob die 20000 fest sind oder man per vba die letzte beschriebene Zelle einer bestimmten Spaalte ermitteln soll wenns unter 20000 sind.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
AW: Arbeitsblätter aktivieren
09.12.2005 11:51:03
F Zap
Hallo Reinhard,
danke für deine Hilfe.
Mit freundlichen Grüssen Frank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige