Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

TXT-Datei einlesen, nächste Zeile einblenden und Teile der TXT-Datei in Zellen kopieren

Frage Entwicklung VB for Applications

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

20.08.2008, aktualisiert 08.09.2008, 6180 Aufrufe, 27 Kommentare

Hallo,

ich habe folgendes Problem. Ich kenne mich mit VBA mal gar nicht aus.

ich will per Excell teile einer TXT-Datei einlesen
die TXT-Datei sieht so aus:

01.
P42  
02.
2008-08-14;33;513;140                                                             
03.
PO5  
04.
2008-08-14;33;3637;186                                                            
05.
PO3  
06.
2008-08-14;33;2145;179                                                            
07.
PONP  
08.
2008-08-11;33;429;151                                                             
09.
PONDP  
10.
2008-08-11;33;195;12                                                              
11.
REPOP  
12.
2008-08-11;33;2.09;.59                                                            
13.
COG  
14.
2008-08-11;33;5.41;.47                                                           
das datum ist hier egal mich interessiert nur das was danach kommt KW;GB;GB free und natürlich vorweg das System (P42 oder PO5 ect...)

die Exceldatei sieht so aus:
in Spalte A stehen die KalenderWochen (KW) ausgeblendet sind (ganze zeilen) die KW´s doch erst noch kommen.
in Spalte B GB
in Spalte C GB free
(usw.. fangen wir erst mal nur mit spalte B und C an)

steht in der TXT-Datei also
PONP
2008-08-11;33;429;151 soll er die noch ausgeblendete nächste Zeile in Excel in der die aktuelle KW 33 (spalte A) steht einblenden (die anderen die ausgeblendet sind nicht, die wären dann nächste KW an der reihe stück für stück) und anschliessend Spalte B mit dem Wert (hinter der KW (33)) 429 und Spalte C mit dem Wert dahinter füllen also 151.



hat jemand eine idee ?
PS: id ewerte ändern sich von woche zu woche...
27 Antworten
Mitglied: bastla
20.08.2008 um 22:55 Uhr
Hallo Landstreicher!

Was mir noch nicht klar ist: Gibt es für jedes System aus der Textdatei eine eigene Zeile für jede KW (sodass also sowohl nach KW als auch nach System zu suchen wäre), oder gibt es für jedes System ein eigenes Blatt?

Außerdem: Wenn für jede KW eine Zeile existiert, sollte sich deren Zeilennummer (ohne in Spalte A suchen zu müssen) ja eigentlich berechnen lassen (etwa KW 1 in Zeile 4 --> KW 33 in Zeile 36) ...

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
21.08.2008 um 09:35 Uhr
Moin bastla,

also es gibt für jedes System aus meiner TXT-Datei eine eigene Spalte ausser für die ersten 3 Systeme, die haben dummer weise jeweils ein eigenes Blatt.
PONP: Spalte B; Spalte C
PONDP: Spalte G; Spalte H
REPOP: Spalte L; Spalte M
COG : Spalte Q; Spalte R

in der Excel Datei ist es so, das die 1 KW diesen jahres in Zeile 55 beginnt. Die letzte eingeblendete Zeile ist die letzte KW 33 in Zeile 87. Wenn das natürlich so fortgeführt wird, sollte sich das wirklich berechnen lassen können ... sofern man weiss wie

ich schlage vor, wir kümmern uns erst mal um diese 4 Systeme und dann der Rest, oder ?

gruß Landstreicher
Bitte warten ..
Mitglied: bastla
21.08.2008 um 21:14 Uhr
Hallo Landstreicher!

also es gibt für jedes System aus meiner TXT-Datei eine eigene Spalte ausser für die ersten 3 Systeme, die haben dummer weise jeweils ein eigenes Blatt.
Einen Kommentar zu dieser "Struktur" erspare ich uns beiden ...

Hier was zum Testen:
01.
Sub EintragenUndEinblenden() 
02.
Const Liste As String = "D:\Liste.txt" 
03.
Tabelle = "Tabelle1" 
04.
ZeileAb = 55 'Hier beginnen die Zeilen für die Kalenderwochen 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Lines = Split(fso.OpenTextFile(Liste).ReadAll, vbCrLf) 'alle Zeilen der Textdatei in Array "Lines" einlesen 
08.
 
09.
U = UBound(Lines) 
10.
For i = 0 To U Step 2 'je Datensatz gibt es 2 Zeilen 
11.
    System = Trim(Lines(i)) 
12.
    If i < U Then 'noch eine Datenzeile vorhanden 
13.
        Daten = Split(Trim(Lines(i + 1)), ";") 'Datensatz anhand des Trennzeichens ";" aufteilen 
14.
        KW = CInt(Daten(1)) 'KW als Zahl 
15.
        GB = Daten(2) 
16.
        GBfree = Daten(3) 
17.
         
18.
 
19.
        Zeile = ZeileAb 'ab hier könnte die KW in Spalte A stehen 
20.
        Do 
21.
            If Worksheets(Tabelle).Cells(Zeile, "A").Value = KW Then 
22.
                ZeileKW = Zeile 'Zeile gefunden 
23.
            Else 
24.
                Zeile = Zeile + 1 'in nächster Zeile suchen 
25.
            End If 
26.
        Loop Until Zeile > 65536 Or ZeileKW > 0 
27.
     
28.
        If ZeileKW > 0 Then 'Zeile der KW wurde gefunden, ... 
29.
            Select Case System '... jetzt Spalte festlegen 
30.
                Case "PONP": Spalte = "B" 
31.
                Case "PONDP": Spalte = "G" 
32.
                Case "REPOP": Spalte = "L" 
33.
                Case "COG": Spalte = "Q" 
34.
                Case Else: Spalte = "" 
35.
            End Select 
36.
         
37.
            If Spalte <> "" Then 'Spalte wurde gefunden -> Daten eintragen ... 
38.
                Worksheets(Tabelle).Cells(ZeileKW, Spalte).Value = GB 
39.
                Worksheets(Tabelle).Cells(ZeileKW, Spalte).Offset(0, 1).Value = GBfree 
40.
                Worksheets(Tabelle).Rows(ZeileKW).Hidden = False '... und Zeile einblenden 
41.
            End If 
42.
        Else 
43.
            MsgBox "Zeile der KW " & KW & " (für System """ & System & """) wurde nicht gefunden!", vbCritical 
44.
        End If 
45.
    Else 
46.
        MsgBox "Keine Daten für System """ & System & """ vorhanden!", vbCritical 
47.
    End If 
48.
Next 
49.
MsgBox "Fertig." 
50.
End Sub
Es ist ja nun nicht so, dass ich an der Berechnung der Zeile für die KW gescheitert wäre , aber da ich vorhabe, ein paar möglicherweise auftretende Fehler abzufangen, wird die entsprechende Zeile auf Basis des Eintrages in Spalte A gesucht. Ich habe dazu unterstellt, dass in dieser Spalte jeweils nur die Nummer der KW (und daher eine Zahl) steht.

Die passende Spalte für jedes System ließe sich vermutlich anhand einer Überschriftenzeile finden - da Du aber dazu keine Angaben gemacht hast, stehen die jeweiligen Spalten hart codiert in einem "Select Case"-Block.

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
28.08.2008 um 11:51 Uhr
Hallo bastla,

sorry hatte die letzte zeit keine zeit hier rein zu schauen und zu antworten, aber besten dank schon mal vorab für alles.
ich teste das nun mal und melde mich dann wieder hier zu worte

gruß landstreicher
Bitte warten ..
Mitglied: Landstreicher
28.08.2008 um 14:12 Uhr
Hallo bastla,

also ich habe mal folgendes getan:

neues Modul erstellt und dort deinen code eingefügt.
Statt Tabelle = "Tabelle1" habe ich Tabelle = "Tabelle34" gesetzt, da es sich um Tabelle 34 handelt.

leider fliegt er immer an der selben stelle raus.

01.
If Worksheets(Tabelle34).Cells(Zeile, "A").Value = KW Then
hast du ne idee was ich falsch mache, oder liegt es am code ?

grüße Landstreicher
Bitte warten ..
Mitglied: bastla
28.08.2008 um 14:43 Uhr
Hallo Landstreicher!

So sollte es gehen:
01.
If Worksheets("Tabelle34").Cells(Zeile, "A").Value = KW Then
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
29.08.2008 um 09:16 Uhr
Hallo Bsatla,

leider brachte auch das keinen Erfolg.

was habe ich getan.
1) neues Modul angelegt und deinen Code eingefügt.
2) 2 Zeilen geändert
01.
Tabelle = "Tabelle34"  
02.
und 
03.
If Worksheets("Tabelle").Cells(Zeile, "A").Value = KW Then
wenn ich das richtig verstanden habe musss ich nur oben "TABELLE" ändern da hier ja die 34 gesetzt wird.
aber ich hab natürlich alle versionen getestet, leider ohne erfolg.

gruß landstreicher
Bitte warten ..
Mitglied: Biber
29.08.2008 um 11:17 Uhr
Moin Landstreicher,

wenn in der Variablen Tabelle der Wert "Tabelle34" steht, dann würde funktionieren:
01.
If Worksheets(Tabelle).Cells(Zeile, "A").Value = KW Then
-oder-
01.
If Worksheets("Tabelle34").Cells(Zeile, "A").Value = KW Then
Eine Variable zu verwenden hat übrigens nur dann Sinn, wenn diese Variable mehr als einmal verwendet wird ODER wenn Du aus Wartungsgründen alle Werte, die sich jemals ändern konnten an wiederfindbaren Codestellen griffbereit halten.

Grüßr
Biber
Bitte warten ..
Mitglied: Landstreicher
29.08.2008 um 13:12 Uhr
Hallo Biber,

komisch, bei mir Debuggt er immer an der selben Stelle immer bei
01.
If Worksheets(Tabelle).Cells(Zeile, "A").Value = KW Then
als meldung kommt :

"Laufzeitfehler '9'

Index aussserhalb des gültigen Bereichs"

benutzt ihr eine andere Version des VB ? meine ist 6.5

grüße Landstreicher
Bitte warten ..
Mitglied: bastla
29.08.2008 um 13:40 Uhr
Hallo Landstreicher!

Die Fehlermeldung kann eigentlich nur darauf zurückzuführen sein, dass es keine Tabelle mit dem Namen "Tabelle34" (in der aktuellen MAppe) gibt - mit der VB-Version hat das sicher nix zu tun ...

Versuchst Du ev, von einer anderen Mappe aus auf die Tabelle zuzugreifen?

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
29.08.2008 um 14:37 Uhr
Hallo Leute,

gibt es eine Möglichkeit, einen Hardcopy hochzuladen ?
da könnte ich euch zeigen was ich wie wo eingetragen habe.

momentan stehe ich wie der ochs vorm berg

also nochmal:
ich habe in dem Excelblatt in dem ich auch die Werte brauche ein neues Modul angelegt und dort den Code eingetragen.
Auf Reiter/Blatt 34 ist meine Tabelle die ich befüllen will.
auf meiner Platte liegt unter D:\ auch das besagte File.

gruß landstreicher


...moment ,..... ich habe etwas gefunden
Bitte warten ..
Mitglied: Landstreicher
29.08.2008 um 14:49 Uhr
Ok ich bin darauf reingefallen das er in VBA die tabelle "DKS-PRO7 DB-Größe Werte" Tabelle34 nennt.

also habe ich ihm folgendes gesagt

01.
If Worksheets("DKS-PRO7 DB-Größe Werte").Cells(Zeile, "A").Value = KW Then
und nun fliegt er schon mal nicht mehr an dieser Stelle raus, sondern an einer anderen

01.
 KW = CInt(Daten(1)) 'KW als Zahl
ich habe keine Ahnung was er da genau macht bzw was dort gesetzt wird.
bastla, haste ne idee ... oder Biber ich will dich ja nicht ausschließen *g*

gruß Landstreicher
Bitte warten ..
Mitglied: bastla
29.08.2008 um 15:08 Uhr
Hallo Landstreicher!

Mit Fehlermeldung ginge es ev leichter ...

Kurz zu den Zeilen ab 9:
U = UBound(Lines)
Die Textdatei wurde vorher in ein Array "Lines" eingelesen - hier wird festgehalten, welches die höchste Zeilennummer ist (da die Zählung bei 0 beginnt, siehe nächste Anweisung, ist dies Zeilenanzahl-1)
For i = 0 To U Step 2 'je Datensatz gibt es 2 Zeilen
Schleife, um paarweise die Zeilen verarbeiten zu können
System = Trim(Lines(i)) 'Systemname (ohne ev davor oder dahinter befindliche Leerzeilen)
If i < U Then 'noch eine Datenzeile vorhanden
Wenn der Systemname nicht in der (oben ermittelten) letzten eingelesenen Zeile steht ...
Daten = Split(Trim(Lines(i + 1)), ";") 'Datensatz anhand des Trennzeichens ";" aufteilen
... sollten auch noch Daten gelesen worden sein - diese werden in ein neues Array "Daten" zerlegt, sodass folgende Felder entstehen (sollten, wenn die Struktur der Zeile ok ist):
Daten(0) Datum
Daten(1) KW
Daten(2) GB
Daten(3) GBfree

In den nächsten Zeilen werden diese Teile dann noch einzelnen Variablen zugewiesen, wobei die Kalenderwoche, welche ja als Suchkriterium dienen soll, explizit in eine Zahl umgewandelt wird, da in der Tabelle als KW (vermutlich) ebenfalls eine Zahl steht:
KW = CInt(Daten(1)) 'KW als Zahl
GB = Daten(2)
GBfree = Daten(3)

Du kannst zum Nachvollziehen mit Strg-G das "Direktfenster" einblenden und mit
01.
Debug.Print Line & "_" & Line(i+1)
als neue (eingefügte) Zeile 13 die gelesenen Zeilen im Format "System_Daten" jeweils in einer Zeile anzeigen lassen.

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
01.09.2008 um 11:08 Uhr
Moin bastla,

fehler gefunden ...
Er sagte immer "index ausserhalb des gültigen Bereichs". Das Problem war, das in der Datei ein Wert doppelt geliefert wurde. Als ich diesen Rausgelöscht habe, funktioniert es einwandfrei.

ich teste nun noch ein wenig alles durch und melde mich dann wieder .

wie immer besten dank
Landstreicher
Bitte warten ..
Mitglied: Landstreicher
01.09.2008 um 14:05 Uhr
Hallo Bastla,

kleines Problemchen noch.

In der TXT - Datei sind hinter jeder Zeile, wo die Werte stehen 58 leerzeichen.
Kennst du eine schnelle Lösung diese zu entfernen, denn diese sorgen am ende deines für mich geschrieben Scripts dazu bei, das die Fehlermeldung ""Keine Daten für System """ & System & """ vorhanden!"" kommt.

also entweder wir fangen es in deinem Script ab, oder schon vorher per Batch.
ich habe hier im Forum mal etwas gefunden wie das in einer Batch gemacht werden könnte, leider weiss ich im moment nicht ganz wie ich das umsetzen könnte bei mir.

01.
set "var1=   das ist eine variable     "  
02.
echo Vorher:  #%var1%#  
03.
:loop1  
04.
if "%var1:~0,1%"==" " set "var1=%var1:~1%" & goto :loop1  
05.
:loop2  
06.
if "%var1:~-1%"==" " set "var1=%var1:~0,-1%" & goto :loop2  
07.
echo Nachher: #%var1%#
Gruß Landstreicher
Bitte warten ..
Mitglied: bastla
01.09.2008 um 14:21 Uhr
Hallo Landstreicher!

In der TXT - Datei sind hinter jeder Zeile, wo die Werte stehen 58 leerzeichen. Kennst du eine schnelle Lösung diese zu entfernen ...
Einfach die Zeilen 11 und 13 so lassen, wie sie immer schon waren (Trim() erfüllt genau diesen Zweck).

... denn diese sorgen am ende deines für mich geschrieben Scripts dazu bei, das die Fehlermeldung ""Keine Daten für System """ & System & """ vorhanden!"" kommt.
Eher liegt es an einer Leerzeile am Ende der Datei - dagegen sollte folgende neue Zeile 12 helfen:
01.
If System <> "" Then
Vor das "Next" (derzeit noch Zeile 48) muss dann noch eine weitere Zeile mit
01.
End If
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
01.09.2008 um 16:34 Uhr
Hallo bastla,

das END If meckert er sofort an ... das wäre zu viel.

und auch Änderung 1 ergibt keinen erfolg.

wenn ich nun die Leerzeile in der TXT-DAtei entferne läuft alles OK durch, allerdings auch wenn Daten nicht zur Verfügung stehen.

ne Idee ?

Gruß Landstreicher
Bitte warten ..
Mitglied: bastla
01.09.2008 um 16:38 Uhr
Hallo Landstreicher!

Die beiden Änderungen gehören zusammen - bei der ersten Zeile beginnt ein neuer "If"-Block, und die zweite Zeile schließt ihn ab.

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
03.09.2008 um 09:44 Uhr
Hallo bastla,

sorry hatte die vergangen Tage keine Zeit. Hab nun mal einige Sachen durchgetestet und bin zu folgedendem Ergebnis gekommen.

Ändert man in der TXT-Datei nur einen Wert für die KW also bsp so:
01.
PONP 
02.
2008-08-25;40;429;150 
03.
PONDP 
04.
2008-08-25;40;195;7 
05.
REPOP 
06.
2008-08-25;40;2.09;.59 
07.
COG 
08.
2008-08-25;41;5.41;.43
So blendet er Zeile 41 ein und füllt dort alle Datein rein.
Ursprünglich dachte ich er würde dann 2 Zeilen einblenden (40 & 41) in KW40 dann die Werte für PONP POND und REPOP einfügen und in KW41 dann nur für die COG und anschliessend meckern das ihm Daten für KW40 und 41 fehlen.

momentan sieht der code so aus:

01.
 
02.
Sub EintragenUndEinblenden_pro7() 
03.
 
04.
Const Liste As String = "D:\SLA_DB_Groessen\space.txt" 
05.
 
06.
Tabelle = "DKS-PRO7 DB-Größe Werte" 'Hier wird das Tabellenblatt angegeben 
07.
 
08.
ZeileAb = 55 'Hier beginnen die Zeilen für die Kalenderwochen 
09.
 
10.
  
11.
 
12.
Set fso = CreateObject("Scripting.FileSystemObject") 
13.
 
14.
Lines = Split(fso.OpenTextFile(Liste).ReadAll, vbCrLf) 'alle Zeilen der Textdatei in Array "Lines" einlesen 
15.
 
16.
  
17.
 
18.
U = UBound(Lines) 
19.
 
20.
For i = 0 To U Step 2 'je Datensatz gibt es 2 Zeilen 
21.
 
22.
    System = Trim(Lines(i)) 
23.
    If System <> "" Then 
24.
    If i < U Then 'noch eine Datenzeile vorhanden 
25.
 
26.
        Daten = Split(Trim(Lines(i + 1)), ";") 'Datensatz anhand des Trennzeichens ";" aufteilen 
27.
 
28.
        KW = CInt(Daten(1)) 'KW als Zahl 
29.
  
30.
        GB = Daten(2) 
31.
 
32.
        GBfree = Daten(3) 
33.
 
34.
          
35.
 
36.
  
37.
 
38.
        Zeile = ZeileAb 'ab hier könnte die KW in Spalte A stehen 
39.
  
40.
        Do 
41.
 
42.
            If Worksheets("DKS-PRO7 DB-Größe Werte").Cells(Zeile, "A").Value = KW Then 
43.
 
44.
                ZeileKW = Zeile 'Zeile gefunden 
45.
 
46.
            Else 
47.
 
48.
                Zeile = Zeile + 1 'in nächster Zeile suchen 
49.
  
50.
            End If 
51.
 
52.
        Loop Until Zeile > 65536 Or ZeileKW > 0 
53.
 
54.
      
55.
 
56.
        If ZeileKW > 0 Then 'Zeile der KW wurde gefunden, ... 
57.
 
58.
            Select Case System '... jetzt Spalte festlegen 
59.
 
60.
                Case "PONP": Spalte = "B" 
61.
 
62.
                Case "PONDP": Spalte = "G" 
63.
 
64.
                Case "REPOP": Spalte = "L" 
65.
 
66.
                Case "COG": Spalte = "Q" 
67.
 
68.
                Case Else: Spalte = "" 
69.
  
70.
            End Select 
71.
 
72.
          
73.
 
74.
            If Spalte <> "" Then 'Spalte wurde gefunden -> Daten eintragen ... 
75.
  
76.
                Worksheets(Tabelle).Cells(ZeileKW, Spalte).Value = GB 
77.
 
78.
                Worksheets(Tabelle).Cells(ZeileKW, Spalte).Offset(0, 1).Value = GBfree 
79.
  
80.
                Worksheets(Tabelle).Rows(ZeileKW).Hidden = False '... und Zeile einblenden 
81.
 
82.
            End If 
83.
 
84.
        Else 
85.
  
86.
            MsgBox "Zeile der KW " & KW & " (für System """ & System & """) wurde nicht gefunden!", vbCritical 
87.
 
88.
        End If 
89.
 
90.
    Else 
91.
 
92.
        MsgBox "Keine Daten für Pro7 """ & System & """ vorhanden!", vbCritical 
93.
 
94.
    End If 
95.
    End If 
96.
Next 
97.
End Sub
gruß Landstreicher
Bitte warten ..
Mitglied: bastla
03.09.2008 um 22:14 Uhr
Hallo Landstreicher!

... sorry hatte die vergangen Tage keine Zeit.
Warum sollte es auch nur mir so gehen ...
Da Du vorausschauend schon jede Menge Leerzeilen in Deinen Code integriert hast , kannst Du gleich die Zeile 39 mit folgendem Inhalt füllen:
01.
        ZeileKW = 0
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
04.09.2008 um 10:45 Uhr
Hallo Bastla,

japp so funktioniert es schon

jetzt wäre noch etwas offen ... wie bekomme ich es hin, das ich das einlesen der daten zb mit str s hinbekomme ?

Gruß Landstreicher
Bitte warten ..
Mitglied: bastla
04.09.2008 um 11:31 Uhr
Hallo Landstreicher!

... das einlesen der daten zb mit str s ...
Willst Du wirklich einen Standard-Shortcut "verbiegen"? Anyhow, unter Excel 2003 zB so: "Extras / Makro / Makros... / EintragenUndEinblenden_pro7 / Optionen..."

Alternativ dazu könntest Du zB auch eine beliebige Grafik (AutoForm, Clipart, ...) auf dem Blatt platzieren und über das Kontextmenü "Makro zuweisen..." eine "Schaltfläche" daraus machen.

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
04.09.2008 um 14:14 Uhr
Hallo Bastla,

nö verbiegen will ich lieber nichts aber ich brauche eine Startmöglichkeit und ein Button kommt nicht in Frage, da diese am ende beim erstellen einer PDF mit zu sehen ist.

was wäre denn so frei mit STRG ? Ö Ä Ü ?

gruß Landstreicher
Bitte warten ..
Mitglied: bastla
04.09.2008 um 16:06 Uhr
Hallo Landstreicher!

ein Button kommt nicht in Frage, da diese am ende beim erstellen einer PDF mit zu sehen ist.
Dem muss nicht so sein - wenn Du etwa eine AutoForm verwendest, kannst Du über das Kontextmenü "AutoForm formatieren...", Register Eigenschaften, die Option "Objekt drucken" ausschalten (Excel 2003).

was wäre denn so frei mit STRG ? Ö Ä Ü ?
Abgesehen davon, dass sich das ja verhältnismäßig leicht testen lässt, könntest Du durch die Verwendung von Großbuchstaben (also zB "S" statt "s") auch die Umschalt-Taste ins Spiel bringen ...

Rein mnemotechnisch würde sich für "erfassen" aber eigentlich Strg-e anbieten ...

Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
05.09.2008 um 09:15 Uhr
Moin Bastla,

na dann mach ich es doch mit Button

jetzt habe ich heute den fall gehabt, das für 1 system doppelte werte angelefiert wurden bsp:

01.
  
02.
PONP   
03.
2008-08-11;33;429;151 
04.
2008-08-11;33;410;140
ist dies der fall wird sofort debuggt. Kann man das abfangen, so dass eine Meldung erscheint, bsp "Quelldatei enthällt mehr Daten für System XY als erwartet. Bitte prüfen sie die Quelldatei!" ?

Viele meiner Kollegen, sind da sehr ähm komisch die kommen dann damit nicht mehr klar.

gruß Landstreicher
Bitte warten ..
Mitglied: bastla
05.09.2008 um 22:41 Uhr
Hallo Landstreicher!

Ich frage gleich gar nicht, woher derartige Daten stammen ...

Soferne Du nicht noch mehr Überraschungen parat hast, sollte die in der folgenden Version vorgenommene formale Überprüfung der Textzeilen ausreichen, um den Benutzer vorweg auf nicht korrekte Zeilen der Textdatei aufmerksam machen zu können.
01.
Sub EintragenUndEinblenden_pro7() 
02.
 
03.
Const Liste As String = "D:\SLA_DB_Groessen\space.txt" 
04.
tabelle = "DKS-PRO7 DB-Größe Werte" 'Hier wird das Tabellenblatt angegeben 
05.
ZeileAb = 55 'Hier beginnen die Zeilen für die Kalenderwochen 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
Lines = Split(fso.OpenTextFile(Liste).ReadAll, vbCrLf) 'alle Zeilen der Textdatei in Array "Lines" einlesen 
09.
 
10.
U = UBound(Lines) 
11.
Fehler = "" 
12.
For i = 0 To U Step 2 'je Datensatz gibt es 2 Zeilen 
13.
    If Fehler = "" Then 'noch kein Fehler gefunden 
14.
        System = Trim(Lines(i)) 
15.
        If System <> "" Then 'System gefunden 
16.
            S = Split(System, ";") 
17.
            If UBound(S) > 0 Then 'Zeile mit Trennzeichen 
18.
                Fehler = Fehler & "Zeile " & i + 1 & " enthält kein gültiges ""System""" & vbCrLf 
19.
            End If 'Zeile mit Trennzeichen 
20.
 
21.
            If i < U And Fehler = "" Then 'noch eine Datenzeile vorhanden 
22.
                Daten = Split(Trim(Lines(i + 1)), ";") 
23.
                If UBound(Daten) < 3 Then 'zu wenige Felder in Datenzeile 
24.
                    Fehler = Fehler & "Zeile " & i + 2 & " enthält keine gültigen Daten" & vbCrLf 
25.
                End If 'zu wenige Felder in Datenzeile 
26.
            End If 'noch eine Datenzeile vorhanden 
27.
        Else 'System nicht gefunden 
28.
            If i <> U Then 'Nicht letzte Zeile? 
29.
                Fehler = Fehler & "Zeile " & i + 1 & " enthält kein ""System""" & vbCrLf 
30.
            End If 'Nicht letzte Zeile? 
31.
        End If 'System gefunden 
32.
    End If 'noch kein Fehler gefunden 
33.
Next 
34.
 
35.
If Fehler = "" Then 'Daten OK 
36.
    For i = 0 To U Step 2 'je Datensatz gibt es 2 Zeilen 
37.
        System = Trim(Lines(i)) 
38.
        If System <> "" Then 
39.
            Daten = Split(Trim(Lines(i + 1)), ";") 'Datensatz anhand des Trennzeichens ";" aufteilen 
40.
            KW = CInt(Daten(1)) 'KW als Zahl 
41.
            GB = Daten(2) 
42.
            GBfree = Daten(3) 
43.
         
44.
            Zeile = ZeileAb 'ab hier könnte die KW in Spalte A stehen 
45.
            ZeileKW = 0 
46.
            Do 
47.
                If Worksheets("DKS-PRO7 DB-Größe Werte").Cells(Zeile, "A").Value = KW Then 
48.
                    ZeileKW = Zeile 'Zeile gefunden 
49.
                Else 
50.
                    Zeile = Zeile + 1 'in nächster Zeile suchen 
51.
                End If 
52.
            Loop Until Zeile > 65536 Or ZeileKW > 0 
53.
 
54.
            If ZeileKW > 0 Then 'Zeile der KW wurde gefunden, ... 
55.
                Select Case System '... jetzt Spalte festlegen 
56.
                    Case "PONP": Spalte = "B" 
57.
                    Case "PONDP": Spalte = "G" 
58.
                    Case "REPOP": Spalte = "L" 
59.
                    Case "COG": Spalte = "Q" 
60.
                    Case Else: Spalte = "" 
61.
                End Select 
62.
 
63.
                If Spalte <> "" Then 'Spalte wurde gefunden -> Daten eintragen ... 
64.
                    Worksheets(tabelle).Cells(ZeileKW, Spalte).Value = GB 
65.
                    Worksheets(tabelle).Cells(ZeileKW, Spalte).Offset(0, 1).Value = GBfree 
66.
                    Worksheets(tabelle).Rows(ZeileKW).Hidden = False '... und Zeile einblenden 
67.
                End If 'Spalte wurde gefunden 
68.
            Else 'Zeile der KW nicht gefunden 
69.
                MsgBox "Zeile der KW " & KW & " (für System """ & System & """) wurde in der Tabelle nicht gefunden!", vbCritical 
70.
            End If 'Zeile der KW 
71.
        End If 'System nicht leer 
72.
    Next 
73.
Else 'Daten nicht OK 
74.
    MsgBox Fehler, vbCritical, "Fehler gefunden!" 
75.
End If 'Daten OK 
76.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: Landstreicher
08.09.2008 um 15:33 Uhr
Hallo Bastla,

ja das mit den Daten ist so ne Sache, würd ich es dir verraten, müsste ich dich ...

besten Dank, das haut alles hin was du mir da gebastelt hast .

Gruß Landstreicher
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...