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

Ein Makro in Visual Basic für Excel erstellen

Frage Entwicklung Visual Studio

Mitglied: Alex-IT02

Alex-IT02 (Level 1) - Jetzt verbinden

01.03.2012, aktualisiert 18.10.2012, 6347 Aufrufe, 38 Kommentare

Es handelt sich um 250 verschiedene .xlsx, und aus jedem sollen 5 Werte ausgelesen werden und in eine Extra - Datei eingefügt werden. Der Aufbau aller Blätter ist ident.

Hallo und guten Tag =)

Ich hätte da mal wieder eine Frage an euch. Meine VisualBasic Kentnisse sind, wie soll ich sagen, schlecht bis gar nicht vorhanden.


Es geht um folgendes:
Es gibt 250 verschiedene Excel-Dateien. Diese sind von der Feldzuordnung her ident, weil diese Dateien von einer Maschine automatisch erzeugt werden. Aus diesen Excel-Dateien, welche jeweils immer nur 1 Tabelle beinhaltet (Tabelle 1), sollen jetzt 5 Werte in eine andere, neue Excel-Datei geschrieben werden.

Ich habe bereits alle Excel – Dateien markiert und mittels F2 in Right (1), Right (2) …. Right (250) umbenannt.
Den Wert wollte ich mir ursprünglich direkt herholen und irgendeine Möglichkeit finden die Zahl in der Klammer zu ändern:

=('[Right (1).xls]Tabelle1'!$R$10)

Egal wie ichs versuche, es funktioniert nicht, ganz klar, wir brauchen ein Makro.


Meine letzte Lösung wäre das mittels eines Makros abzuwickeln, per Visual Basic. Ich kenne mich mit Visual Basic aber leider nicht aus.

Könnt ihr mir bitte helfen? Wenn man es kann ist es sicher Watschneinfach und nur ein script das über vlt 10 Zeilen geht?

Ich will die jeweils 5 Werte aus den Zellen (die sind ja bei allen 250 Blättern gleich):

Wert Wert Wert Wert Wert Wert
R10 F9 U28 M28 E28 M29
R10 F9 U28 M28 E28 M29
R10 F9 U28 M28 E28 M29
R10 F9 U28 M28 E28 M29

In ein Arbeitsblatt einfügen lassen, und dass für alle 250 Arbeitsblätter und ich möchte nicht 250 mal von Hand 5 Werte aus/einlesen.
Es handelt sich um Excel 2010

Ich bedanke mich jetzt schon recht herzlich und hoffe auf Hilfe.

Lg Alex
38 Antworten
Mitglied: bastla
01.03.2012, aktualisiert 18.10.2012
Hallo Alex-IT02!

Weil der zuletzt erst wieder ausgegraben worden war: Schau mal, ob in diesem Beitrag etwas für Dich dabei ist ...

Grüße
bastla
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 11:05 Uhr
Hallo Bastla =)

jetzt is mir schwindlig xD
Soviele Fremdbegriffe hmm

Ich werde mich einfach einmal spielen und hoffen dass ich etwas alleine schaff, sollte es nicht funktionieren hörst du sicher wieder von mir =)

(also heut abend =P)

Lg
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 12:33 Uhr
Hey, me again =)

01.
 
02.
Sub Zellen_importieren() 
03.
 
04.
 
05.
Dim i As Integer 
06.
For i = 1 To 206 
07.
  
08.
 
09.
 Workbooks.Open Filename:="'C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\[Right"( & i & )".xls]"             \\ ich schaffs nicht dass er mein "i" als Variable erkennt?! 
10.
 Sheets("Tabelle1").Select 
11.
  
12.
 Range("R10").Select 
13.
 Application.CutCopyMode = False 
14.
 Selection.Copy 
15.
Windows("_right all.xlsm").Activate 
16.
 Sheets("Tabelle1").Select 
17.
 zeile = Range("a500").End(xlUp).Row 
18.
 Rows(zeile + 1).Select 
19.
 ActiveSheet.Paste 
20.
 
21.
 Range("F9").Select 
22.
 Application.CutCopyMode = False 
23.
 Selection.Copy 
24.
Windows("_right all.xlsm").Activate 
25.
 Sheets("Tabelle1").Select 
26.
 zeile = Range("b500").End(xlUp).Row 
27.
 Rows(zeile + 1).Select 
28.
 ActiveSheet.Paste 
29.
 
30.
 Range("U28").Select 
31.
 Application.CutCopyMode = False 
32.
 Selection.Copy 
33.
Windows("_right all.xlsm").Activate 
34.
 Sheets("Tabelle1").Select 
35.
 zeile = Range("c500").End(xlUp).Row 
36.
 Rows(zeile + 1).Select 
37.
 ActiveSheet.Paste 
38.
 
39.
 Range("M28").Select 
40.
 Application.CutCopyMode = False 
41.
 Selection.Copy 
42.
Windows("_right all.xlsm").Activate 
43.
 Sheets("Tabelle1").Select 
44.
 zeile = Range("d500").End(xlUp).Row 
45.
 Rows(zeile + 1).Select 
46.
 ActiveSheet.Paste 
47.
 
48.
 Range("E28").Select 
49.
 Application.CutCopyMode = False 
50.
 Selection.Copy 
51.
 Windows("_right all.xlsm").Activate 
52.
 Sheets("Tabelle1").Select 
53.
 zeile = Range("e500").End(xlUp).Row 
54.
 Rows(zeile + 1).Select 
55.
 ActiveSheet.Paste 
56.
 
57.
 Range("M29").Select 
58.
 Application.CutCopyMode = False 
59.
 Selection.Copy 
60.
 Windows("_right all.xlsm").Activate 
61.
 Sheets("Tabelle1").Select 
62.
 zeile = Range("f500").End(xlUp).Row 
63.
 Rows(zeile + 1).Select 
64.
 ActiveSheet.Paste 
65.
Workbooks("Right"( & i & )".xls").Close SaveChanges:=False 
66.
 
67.
 
68.
 Next i 
69.
End Sub
Ich dachte mir sowas in der Art? =/
bitte nicht schimpfen wenn es kompletter Blödsinn is xD

Und das jetzt iwie in einen Loop versetzen und i raufzählen lassen bis 206??

Wie setze ich folgende 2 Dinge richtig ein? Die 6 Werte sollen ja nebeneinander stehen, je Datei.

b500 steht für, springe in die letzte beschriebene Zelle in B, checke maximal 500 ab?
und Zeile plus 1 bedeutet, spring noch eine Zelle runter --> also in die Freie?

01.
zeile = Range("b500").End(xlUp).Row 
02.
 Rows(zeile + 1).Select
Diese besagen ja, wenn ich mich nicht Irre, dass er die nächste freie Zeile auswählen soll, also er schreibt in die nächste freie Zelle und kann somit nichts überschreiben was schon im "right all-xlsm" steht, richtig?
Bitte warten ..
Mitglied: TsukiSan
01.03.2012 um 14:05 Uhr
Hallo Alex-IT02 ,

ein bisschen Helfen möchte ich auch
Workbooks.Open Filename:="'C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\[Right"( & i & )".xls]" \\ ich schaffs nicht dass er mein "i" als Variable erkennt?!
bis zu dieser Zeile und auch danach erkennt das Programm dein i als Variable.
Du müßtest deine Zeilen nur ändern in ungefähr so:
01.
for i = 1 to 206 
02.
       Workbooks.Open Filename:="C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\" & i & ".xls" 
03.
 
04.
' deine weiteren Code-Blöcke 
05.
 
06.
      Workbooks "C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\" & i & ".xls".Close SaveChanges:=False  
07.
next 
08.
'....
deine anderen " ;Blöcke" sollten schon mal vom Prinzip machen, was du vorhast. Eventuell hilft dir aber etwas Vereinfachung, um hier weiterzukommen. Du kannst immer deine 5 Spalten direkt in einem Ruck selektieren
circa so:
01.
Range("R10,F9,U28,M28,E28,M29").Select 
02.
          Selection.Copy 
03.
' hier dann deinen Code einfuegen (also erst wieder dein anderes Excelsheet //aktivieren// , in die Zeile gehen, ab wo es weitergeht und dann 
04.
          ActiveSheet.Paste 
05.
'....
damit hast du dann auch gleich alle Werte nebeneinander

Probier mal weiter und melde dich dann wieder

Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 14:17 Uhr
Hallo Tsuki,

danke erstmal für deine Hilfsbereitschaft =)

bei Zeile 2 von Code 1 fehlt aber doch noch der Dokumentenname selbst? Right(1), Right(2), Right(3)....
und ja ich war irgendwie zu blöd und konnte ihn nicht richtig einfügen ohne dass ein Kompilierfehler kommt =/

Bei Zeile 3 Code 2 meinst du

er markiert alle gleichzeitig, kopiert diese in die zwischenablage, danach den Code:
01.
 Windows("_right all.xlsm").Activate 
02.
 Sheets("Tabelle1").Select 
03.
 zeile = Range("A500").End(xlUp).Row 
04.
 Rows(zeile + 1).Select  
05.
 ActiveSheet.Paste
dieser aktiviert die Sammeltabelle, wählt das Tabellenblatt 1 aus und dann?
dann nimmt er doch nur die letzte unbeschriebene Zelle von A oder? Wo sag ich ihm was er wo einfügen soll?

und stimmt meine erklärung für
01.
zeile = Range("A500").End(xlUp).Row 
02.
Rows(zeile + 1).Select 
Bitte warten ..
Mitglied: TsukiSan
01.03.2012 um 14:31 Uhr
also wenn deine Exceldateien alle Right(1) bis Right(n) heissen, dann passt du den Pfad so an:
Workbooks.Open Filename:="C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\Right(" & i & ").xls"
Achte auf die Gänsefüsschen !

Bei Zeile 3 Code 2 meinst du
er markiert alle gleichzeitig, kopiert diese in die zwischenablage, danach den Code:
Richtig!
1) die For-Schleife
2) ExcelDatei öffnen
3) Die 5 Spalten/Zeilen selektieren (in einem Ruck)
4) Dann wieder deine Sammeltabelle aktivieren
5) und jetzt kommt's -> wenn du da zum Beispiel B1 markierst und .paste durchführst,
werden die Werte automatisch in B1,C1,D1,E1, F1 und G1 eingetragen. Immer nach der Reihenfolge von
> Range("R10,F9,U28,M28,E28,M29").Select

und zu deiner letzten Frage:
mit .End(xlDown) sucht er die letzte Zelle, die Werte enthält, bzw hüpft dorthin. Und wenn du dann richtigerweise noch Zeile+1 hinzufügst, steht es in der nächsten Leeren Zeile.
schau dir hierzu mal unter deiner Excel-Hilfe die End-Eigenschaft an!

Generell kann ich empfehlen, neue Codes erst einmal zu testen und damit zu spielen


Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 15:08 Uhr
Danke vorerst =)

Hab jetzt mal dieses "Programm" laufen lassen xD Er springt von einem Sheet zum nächsten und das 206 mal =) also das funktioniert schon einmal Prima, aber irgendwie "pastet" er nichts. Das Blatt "right all" ist nachwievor leer hmm

Folgenden Code habe ich jetzt laufen lassen:


01.
Sub Zellen_importieren() 
02.
 
03.
 
04.
Dim i As Integer 
05.
For i = 1 To 206 
06.
  
07.
  
08.
 
09.
 Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls" 
10.
 Sheets("Tabelle1").Select 
11.
 
12.
 Range("R10").Select 
13.
 Application.CutCopyMode = False 
14.
 Selection.Copy 
15.
 Windows("_right all.xlsm").Activate 
16.
 Sheets("Tabelle1").Select 
17.
 zeile = Range("A500").End(xlUp).Row 
18.
 Rows(zeile + 1).Select 
19.
 ActiveSheet.Paste 
20.
  
21.
 Range("F9").Select 
22.
 Application.CutCopyMode = False 
23.
 Selection.Copy 
24.
 Windows("_right all.xlsm").Activate 
25.
 Sheets("Tabelle1").Select 
26.
 zeile = Range("B500").End(xlUp).Row 
27.
 Rows(zeile + 1).Select 
28.
 ActiveSheet.Paste 
29.
  
30.
 Range("U28").Select 
31.
 Application.CutCopyMode = False 
32.
 Selection.Copy 
33.
 Windows("_right all.xlsm").Activate 
34.
 Sheets("Tabelle1").Select 
35.
 zeile = Range("C500").End(xlUp).Row 
36.
  Rows(zeile + 1).Select 
37.
 ActiveSheet.Paste 
38.
  
39.
 Range("M28").Select 
40.
 Application.CutCopyMode = False 
41.
 Selection.Copy 
42.
 Windows("_right all.xlsm").Activate 
43.
 Sheets("Tabelle1").Select 
44.
 zeile = Range("D500").End(xlUp).Row 
45.
 Rows(zeile + 1).Select 
46.
 ActiveSheet.Paste 
47.
  
48.
 Range("E28").Select 
49.
 Application.CutCopyMode = False 
50.
 Selection.Copy 
51.
 Windows("_right all.xlsm").Activate 
52.
 Sheets("Tabelle1").Select 
53.
 zeile = Range("E500").End(xlUp).Row 
54.
 Rows(zeile + 1).Select 
55.
 ActiveSheet.Paste 
56.
  
57.
 Range("M29").Select 
58.
 Application.CutCopyMode = False 
59.
 Selection.Copy 
60.
 Windows("_right all.xlsm").Activate 
61.
 Sheets("Tabelle1").Select 
62.
 zeile = Range("F500").End(xlUp).Row 
63.
 Rows(zeile + 1).Select 
64.
 ActiveSheet.Paste 
65.
  
66.
  
67.
 Workbooks("Right (" & i & ").xls").Close SaveChanges:=False 
68.
  
69.
 Next i 
70.
End Sub

muss ich ihm die gewünschte Zelle in welcher er springen soll auch noch markieren? Das macht doch bereits
01.
 Rows(zeile + 1).Select
die Kurzform funktioniert nicht, da kommt der Fehler: Dieser Befehl (selection.copy) kann bei nicht angrenzenden Zellen nicht verwendet werden.
Leider


Lg Alex
Bitte warten ..
Mitglied: bastla
01.03.2012 um 15:31 Uhr
Hallo Alex-IT02 und Tsuki!

Wenn's doch ohnehin nur um ein paar Werte (und nicht auch deren Formate) geht, würde ich das eher so versuchen (ungetestet):
01.
Sub Zellen_importieren() 
02.
Zeile = Range("A500").End(xlUp).Row 
03.
For i = 1 To 206 
04.
    Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls" 
05.
    Sheets("Tabelle1").Select 
06.
    V = Array([R10], [F9], [U28], [M28], [E28], [M29]) 
07.
    Workbooks("Right (" & i & ").xls").Close SaveChanges:=False 
08.
    Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V 
09.
    Zeile = Zeile + 1 
10.
Next i 
11.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 15:36 Uhr
Ihr seits echt schnell und spitze =) musste mal gesagt werden.
Immerhin hilft mir der bastla schon zum 2ten mal =)

Zum ungetesteten Code:


Er bringt leider bei:

Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V

einen objektdefinierten Fehler. Da ich mich bei diesem Code noch weniger auskenn kann ich mir diesen leider überhaupt nicht erklären =/

Liebe Grüße
Alex
Bitte warten ..
Mitglied: Alex-IT02
01.03.2012 um 16:02 Uhr
Hey Leute =)

ich habe jetzt mal von meinen "Blöcken" die letzten 5 entfernt und "i" auf 1 to 5 gesetzt.

Was nun passiert ist wunderlich. Er holt sich den richtigen Wert, R10 und holt sich auch gleichzeitig seine Formatierung.
Sie werden auch brav untereinander geschrieben.
Wenn ich aber alle Blöcke lasse, kommt überhaupt nichts ? =(


mein nächster Gedanke war, er springt ja nicht nach dem kopieren zum anderen Sheet ud dem anderen Wert zurück, deshalb hab ich ein weiteres Windows().activate hinzugefügt vor jedem Block.

Was er aber jetzt bringt ist noch verwunderlicher...


=MAX('C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\[right (1).xls]Tabelle2'!#BEZUG!)

das Tabelle2 verwundert mich am meisten, hab ich doch extra ein sheets.select beigefügt

Das bekomm ich 8152 mal nach rechts in jede Zelle.
Komisch...
Ebenso wäre interessant was ich machen muss dass er nur den Wert mitnimmt und nicht die Formatierung auch.

Hier der aktuelle Code:

01.
Sub Zellen_importieren() 
02.
 
03.
 
04.
Dim i As Integer 
05.
For i = 1 To 1 
06.
  
07.
  
08.
 
09.
 Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls" 
10.
 Sheets("Tabelle1").Select 
11.
  
12.
 Range("R10").Select 
13.
 Application.CutCopyMode = False 
14.
 Selection.Copy 
15.
 Windows("_right all.xlsm").Activate 
16.
 Sheets("Tabelle1").Select 
17.
 Zeile = Range("A210").End(xlUp).Row 
18.
 Rows(Zeile + 1).Select 
19.
 ActiveSheet.Paste 
20.
 
21.
 Windows("Right (" & i & ").xls").Activate 
22.
 Sheets("Tabelle1").Select 
23.
 Range("F9").Select 
24.
 Application.CutCopyMode = False 
25.
 Selection.Copy 
26.
 Windows("_right all.xlsm").Activate 
27.
 Sheets("Tabelle1").Select 
28.
 Zeile = Range("K500").End(xlUp).Row 
29.
 Rows(Zeile + 1).Select 
30.
 ActiveSheet.Paste 
31.
  
32.
 Windows("Right (" & i & ").xls").Activate 
33.
 Sheets("Tabelle1").Select 
34.
 Range("U28").Select 
35.
 Application.CutCopyMode = False 
36.
 Selection.Copy 
37.
 Windows("_right all.xlsm").Activate 
38.
 Sheets("Tabelle1").Select 
39.
 Zeile = Range("Q500").End(xlUp).Row 
40.
 Rows(Zeile + 1).Select 
41.
 ActiveSheet.Paste 
42.
  
43.
 Windows("Right (" & i & ").xls").Activate 
44.
 Sheets("Tabelle1").Select 
45.
 Range("M28").Select 
46.
 Application.CutCopyMode = False 
47.
 Selection.Copy 
48.
 Windows("_right all.xlsm").Activate 
49.
 Sheets("Tabelle1").Select 
50.
 Zeile = Range("D500").End(xlUp).Row 
51.
 Rows(Zeile + 1).Select 
52.
 ActiveSheet.Paste 
53.
  
54.
 Windows("Right (" & i & ").xls").Activate 
55.
 Sheets("Tabelle1").Select 
56.
 Range("E28").Select 
57.
 Application.CutCopyMode = False 
58.
 Selection.Copy 
59.
 Windows("_right all.xlsm").Activate 
60.
 Sheets("Tabelle1").Select 
61.
 Zeile = Range("E500").End(xlUp).Row 
62.
 Rows(Zeile + 1).Select 
63.
 ActiveSheet.Paste 
64.
  
65.
 Windows("Right (" & i & ").xls").Activate 
66.
 Sheets("Tabelle1").Select 
67.
 Range("M29").Select 
68.
 Application.CutCopyMode = False 
69.
 Selection.Copy 
70.
 Windows("_right all.xlsm").Activate 
71.
 Sheets("Tabelle1").Select 
72.
 Zeile = Range("F500").End(xlUp).Row 
73.
 Rows(Zeile + 1).Select 
74.
 ActiveSheet.Paste 
75.
  
76.
  
77.
 Workbooks("Right (" & i & ").xls").Close SaveChanges:=False 
78.
  
79.
 Next i 
80.
End Sub

Ganz liebe Grüße
Alex
Bitte warten ..
Mitglied: bastla
01.03.2012 um 20:26 Uhr
Hallo Alex-IT02!

Ich habe das oben etwas zu weit abgekürzt - daher hier die ausführliche Fassung meines Vorschlages:
01.
Sub Zellen_importieren() 
02.
Zeile = Range("A500").End(xlUp).Row + 2 'Leerzeile einfügen, wenn die alten Daten schon nicht gelöscht werden sollen 
03.
For i = 1 To 206 
04.
    Set Q = Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls" 
05.
    With Q.Sheets("Tabelle1") 
06.
        V = Array(.Range("R10").Value, .Range("F9").Value, .Range("U28").Value, .Range("M28").Value, .Range("E28").Value, .Range("M29").Value) 
07.
    End With 
08.
    Q.Close SaveChanges:=False 
09.
    Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V 
10.
    Zeile = Zeile + 1 
11.
Next i 
12.
End Sub
Wären mehr als 6 Zellen gefragt, würde ich das Array per Schleife aufbauen - so scheint es mir noch überschaubar ...

Wenn das Blatt übrigens immer vorweg geleert werden soll, könntest Du die Zeile 2 durch zB
01.
Cells.Clear 'oder Cells.ClearContents 
02.
Zeile = 1
ersetzen ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
01.03.2012 um 20:33 Uhr
Hallo Alex-IT02!

Der Makrorecorder ist ein gutes Hilfsmittel, um an die benötigten Objekte, Methoden und Eigenschaften zu kommen, arbeitet aber mit sehr vielen unnötigen "Select" etc - daher mag ich Deinen Code auch nicht wirklich genauer ansehen oder überarbeiten ...
Ebenso wäre interessant was ich machen muss dass er nur den Wert mitnimmt und nicht die Formatierung auch.
Wenn es nicht per direkten Zugriff auf den Zellwert (wie in meinem Ansatz oben) sein soll, sieh Dir dazu "PasteSpecial" (und dort "PasteType") an.

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
01.03.2012 um 22:57 Uhr
Hallo Alex-IT02!

bastla hat es schon erwähnt. Zum Testen deines Vorhabens nimm den Makrorekorder
und versuch mal folgendes weil ich würde es etwas anders angehen; es gibt für deine Frage viele Lösungswege
1) öffne dein Excel mit der Sammeltabelle
2) starte den Makrorekorder und bename dein Makro nach einem Namen deiner Wahl
3) öffne aus deiner Sammelmappe die erste deiner Right(n)-Dateien
4) makiere den Wert, den tu benötigst aus Right(n) und füge ihn in die Samelmappe ein, wo er hingehört
5) das machst du mit deinen 6 Werten aus Right(n)
6) dann schliesst du die erste Datei Right(n) und öffnest die nächste Right(n)
7) makierst dort wieder den Wert, den du kopieren möchtest und jetzt gehst du in deiner Sammelmappe
mit End + UP/DOWN/RIGHT oder LEFT an die Stelle, wo du hin möchtest.
8) jetzt kannst du eigentlich wieder aufhören, den Makrorekorder laufen zu lassen.
9) nun öffnest - bearbeiten - du dein neu angelegtes Makro und hast jedemenge passenden Code
10) dann muss da nur noch eine Schleife drum , sodass alle 206 Exceldateien auf diese Art und Weise
automatisch ausgelesen werden können.

Im Anschluss daran - wenn das einmal funktioniert - sollten wir den Code dann vereinfachen.

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
01.03.2012, aktualisiert 18.10.2012
... oder gib doch meinem adaptierten Ansatz eine Chance ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
01.03.2012 um 23:10 Uhr
@bastla,

vollkommen richtig!
Ich denke mir nur, dass es für den TO Spass macht, dabei zu zulernen. Einfach mal die vielen Mögichkeiten
aufzeigen, die es geben könnte und was machen, wenn ich einige Befehle nicht weiss in diesem Fall in Excels VBA
Ich würde dann für mich so erst einmal vorgehen. Der Rekorder spuckt mir die richtige Syntax erst einmal raus.

Abgesehen von dem ganzen sollte unser TO auch wissen, wenn er dann mal sein Programmchen fertig hat: dann nach Möglichkeit vor dem Mittagessen rödeln lassen. Das viele Öffnen und Schliessen von mehreren Exceldateien ist nicht gerade performant und kann schon etwas Zeit in Anspruch nehmen

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
01.03.2012 um 23:17 Uhr
Hallo Tsuki!

Eigentlich wäre ich davon ausgegangen, dass die Versuche des TO bereits aus der Verwendung des Makrorecorders stammen (und diesen Code möchte ich nicht wirklich "verbessern") - ansonsten hast Du aber natürlich Recht ...

Grüße
bastla
Bitte warten ..
Mitglied: Alex-IT02
02.03.2012 um 08:00 Uhr
Guten Morgen =)

ja Bastla du hast, ohne den Makrorekorder wäre ich wahrscheinlich gar nicht soweit gekommen *gg*. Ebenso habe ich gestern, also bereits vor euren Antworten mit der Formatierung, versucht alles bezüglich pastespecial herauszufinden.
Aber keiner der Befehle lässt sich ohne Problemmeldungen kompilieren, deshalb wollte ich euch nochmal fragen.

und blöde Frage hehe aber was bedeutet TO? xD

Lg Alex
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 08:11 Uhr
und blöde Frage hehe aber was bedeutet TO? xD
das ist keine blöde Frage!

TO steht für ThreadOpener -> also jemand, der ein Thema aufmacht, eine Frage in einem Forum stellt.

Wo klemmt's denn in deinem Makro noch?

Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
02.03.2012 um 08:29 Uhr
Okay, dann bin ich in dieser Hinsicht auch schon mal etwas klüger =)

Bei Bastlas Makro kommt bei:

01.
Set Q = Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls"
Die Fehlermeldung: erwartetes Anweisungsende. Nur zur Information, was möchte er mir hier sagen? das der Befehl nicht weiter kompiliert werden kann weil er glaubt hier endet dieser?

Bei meinem Code, die lange Wurst also xD, bin ich auf etwas gestoßen.
Ich habe gestern ja gemeint: ich zitiere

Was er aber jetzt bringt ist noch verwunderlicher...
=MAX('C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\[right (1).xls]Tabelle2'!#BEZUG!)
das Tabelle2 verwundert mich am meisten, hab ich doch extra ein sheets.select beigefügt
Das bekomm ich 8152 mal nach rechts in jede Zelle.


warum er Max und die Tabelle 2 nimmt liegt daran, dass es in der Formel so drinnen steht, und die Formel in der Zeile. Also brauche ich umso mehr nur den Wert.
Das habe ich jetzt geschafft mit:

01.
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Jetzt setze ich i auf 1 zu 1.

Mir ist aber nicht klar warum er jetzt für den 1 Schritt (=5 Werte in 5 Zellen in 1 Zeile) auf einmal 2 Zeilen macht mit 8152 Werten nebeneinander?
Auch die Formatierung für die einzelnen Werte muss ich mir jetzt noch raussuchen, damit ein Datum auch ja ein Datum is =)

Grüße Alex
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 09:02 Uhr
Hallo Alex,

zu deiner 1ten Frage:
das Set Q = ist meines erachtens zu viel. Eventuell sind da Zeilen zusammengerutscht?

Die anderen Sachen muss ich mir erst mal ansehen.

Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
02.03.2012 um 09:13 Uhr
Hey,

die Frage mit der Übernahme der richtigen Formatierung habe ich mir bereits selbst beantwortet:

01.
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
02.
        xlNone, SkipBlanks:=False, Transpose:=False


Jetzt muss ich nur noch auf das Problem dieser komischen Übername kommen und den Code dann noche etwas hübsch machen. Liegt es vlt an

01.
Zeile = Range("A210").End(xlUp).Row 
02.
 Rows(Zeile + 1).Select
dass er so einen Blödsinn einfügt? was anderes könnte es gar nicht sein denk ich.

Ich hab auch bereits ein
01.
Application.ScreenUpdating = False 'am Anfang 
02.
Application.ScreenUpdating = True 'am Ende
hinzugefügt =)

VB is echt ein geiler Sch =)

Sollt ich wieder auf etwas draufkommen meld ich mich natürlich sofort,
möchte ja keine Extra-Arbeit verursachen.

Lg
Bitte warten ..
Mitglied: 76109
02.03.2012 um 09:30 Uhr
Hallo Alex-IT02!

Ändere das
01.
Set Q = Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls"
nach
01.
Set Q = Workbooks.Open("C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls")
Und vergiss Copy/Paste, wenn Du eh nur die Werte haben willst

Gruß Dieter
Bitte warten ..
Mitglied: bastla
02.03.2012 um 09:35 Uhr
Hallo @All!
Und vergiss Copy/Paste
Das hätte ich (hinsichtlich der fehlerhaften Zeile) auch (zumindest partiell) tun sollen (ich hatte zwar getestet, aber nicht die gesamte Ordnerstruktur nachgebaut und daher einen anderen Pfad und beim Posten dann die "Original"-Zeile von oben kopiert) ...

Grüße
bastla
Bitte warten ..
Mitglied: Alex-IT02
02.03.2012 um 09:40 Uhr
Hey Dieter,

vielen Dank für deine Nachricht, ich hab es probiert und es hat mit testweise 5 Sheets funktioniert, bis auf die Formatierung.
Die Werte sollten nur die Wertformatierung mitnehmen, nicht die Zeilenformatierung. Also sprich wie bei:

01.
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Ganz verstehen "tu" ich den Code aber leider nicht, ist mir wies aussieht zu fortgeschritten xD

01.
Zeile = Range("A500").End(xlUp).Row + 2             'fügt 2 Leerzeichen nach der letzten beschriebenen Zelle ein 
02.
 
03.
For i = 1 To 5                                                                                                                                  'die Anzahl der Loops 
04.
 
05.
    Set Q = Workbooks.Open("C:\Users\IT02\Desktop\4500044164 _ 
06.
        PRÜFPROTOKOLLE\Right (" & i & ").xls")                                                                       'öffnet die Datei und deklariert die Datei als Q? 
07.
    With Q.Sheets("Tabelle1")                                                                                                     'ab hier nur mehr Bahnhof =( Arrays? Felder?  
08.
    V = Array(.Range("R10").Value, .Range("F9").Value, .Range("U28").Value, _ 
09.
    .Range("M28").Value, .Range("E28").Value, .Range("M29").Value) 
10.
    End With 
11.
    Q.Close SaveChanges:=False                                                                                                'nicht speichern beim schließen, aber UBound?, was macht Resize? 
12.
    Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V 
13.
    Zeile = Zeile + 1 
14.
 
Lg Alex
Bitte warten ..
Mitglied: 76109
02.03.2012 um 10:23 Uhr
Hallo Alex-IT02!

Versuchs mal hiermit:
01.
Option Explicit 
02.
 
03.
Const Path = "C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (%1).xls" 
04.
 
05.
Const ZellAdressen = "R10,F9,U28,M28,E28,M29" 
06.
 
07.
Const StartZeile = 2                    'Werte ab Zeile ? eintragen 
08.
 
09.
Sub Zellen_Import() 
10.
    Dim Fso As Object, Wks As Worksheet, Zellen As Variant 
11.
    Dim File As String, NextLine As Long, i As Integer, c As Integer 
12.
     
13.
    Set Fso = CreateObject("Scripting.FileSystemObject") 
14.
     
15.
    Set Wks = ThisWorkbook.Sheets(1) 
16.
     
17.
    Zellen = Split(Replace(ZellAdressen, " ", ""), ",") 
18.
     
19.
    NextLine = StartZeile 
20.
     
21.
    For i = 1 To 5 
22.
        File = Replace(Path, "%1", i) 
23.
         
24.
        If Fso.FileExists(File) Then 
25.
            With Workbooks.Open(File) 
26.
                For c = 0 To UBound(Zellen) 
27.
                   .Sheets(1).Range(Zellen(c)).Copy 
28.
                    Wks.Cells(NextLine, "A").Offset(0, c).PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
29.
                Next 
30.
               .Close False 
31.
            End With 
32.
            NextLine = NextLine + 1 
33.
        Else 
34.
            MsgBox "Datei nicht gefunden:" & vbCr & vbCr & File 
35.
        End If 
36.
    Next 
37.
End Sub
Gruß Dieter

[edit] Codezeile 17 geändert [/edit]
Bitte warten ..
Mitglied: Alex-IT02
02.03.2012 um 11:06 Uhr
Alsooo meine allerliebsten Helfer =)

Ihr seits Spitze, vielen Dank für die Hilfe.
Ich habe mich jetzt für die Version von Bastla entschieden, ich versteh sie leider nur dezent und perfektioniert ist sie auch noch nicht (wegen meinen Inbox-things),
aber es erfüllt seinen Zweck.

Ihr habt auch meine Lust angekurbelt mich mehr mit VB auseinanderzusetzen, einfach geil =)

Hier das Endresultat unserer Arbeit.

01.
Sub Zellen_importieren() 
02.
 
03.
MsgBox "Bitte stellen Sie sicher dass sich der Ordner Prüfprotokolle auf dem Desktop befindet und keine Unterordner beinhaltet," & vbCrLf & _ 
04.
"Die Dateien selbst müssen 'Right' heißen und eine fortlaufende Nummer haben!" 
05.
 
06.
Dim x As String 
07.
Dim y As Integer 
08.
 
09.
 
10.
x = InputBox("Bitte geben Sie Ihren Benutzernamen ein", "Anzahl der ExcelDateien", Environ("USERNAME"))  ' Benutzernamen für richtigen Desktoppfad 
11.
'If myValue Is not  Then myValue = DefaultValue 
12.
 
13.
y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,")   ' Anzahl der Sheets die Zusammengeführt werden sollen 
14.
 
15.
  
16.
  
17.
Zeile = Range("A500").End(xlUp).Row + 2 
18.
 
19.
For i = 1 To y 
20.
 
21.
    Application.ScreenUpdating = False 
22.
     
23.
    Set Q = Workbooks.Open("C:\Users\" & x & "\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls") 
24.
 
25.
 
26.
    With Q.Sheets("Tabelle1") 
27.
    V = Array(.Range("R10").Value, .Range("F9").Value, .Range("U28").Value, .Range("M28").Value, .Range("E28").Value, .Range("M29").Value) 
28.
    End With 
29.
    Q.Close SaveChanges:=False 
30.
    Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V 
31.
    Zeile = Zeile + 1 
32.
 
33.
Next i 
34.
 
35.
Cells.Select 
36.
    Cells.EntireColumn.AutoFit 
37.
    Cells.EntireRow.AutoFit 
38.
 
39.
Application.ScreenUpdating = True 
40.
     
41.
MsgBox "Daten wurden Übertragen" 
42.
 
43.
End Sub 
44.
 
Lg Alex und wir hören uns sowieso fix wieder hehe
Bitte warten ..
Mitglied: bastla
02.03.2012 um 15:16 Uhr
Hallo Alex-IT02!
ich versteh sie leider nur dezent
Da sollte sich doch etwas machen lassen:
  • Zunächst wird mit "Set Q =" die Quelldatei in eine Objektvariable übernommen - dadurch wird sie in weiterer Folge direkt ansprechbar.
  • Der "With"-Block entspricht einem mathematischen "Herausheben" - anstatt "Q.Sheets("Tabelle1").Range("R10").Value" schreiben zu müssen, wird die (für alle gleiche) Tabellenangabe nur einmal benötigt.
  • In V wird ein Array von Werten (weil ein solches Array in einem Arbeitsgang geschrieben werden kann - siehe Zeile 30) zusammengestellt - das ist der am wenigsten elegante und übersichtliche Teil (wie eine Lösung per Schleife - würde ich für eine größere Anzahl von Zellen auf jeden Fall empfehlen - aussehen kann, hat Dieter gezeigt).
  • Damit das Array beim Eintragen "passt", wird nach der Angabe der Startzelle die Größe des Bereiches per "Resize" festgelegt - es bleibt bei der "Höhe" von einer Zeile, während für die Ermittlung der "Breite" die Größe des Arrays festgestellt werden muss (ok, dass es 6 Zellen sind, wissen wir zwar, aber flexibler wird es per "Automatik"), und da die Elemente im Array mit 0 beginnend nummeriert sind, ist UBound(V) + 1" erforderlich.
perfektioniert ist sie auch noch nicht
Auch da könnte ich vielleicht ein wenig beitragen ...
  • Zunächst einmal die Frage, warum die Anzahl der Dateien eingegeben werden muss - sollen denn nicht alle entsprechend benannten Dateien verwendet werden?
  • Außerdem: Wird das Script von einem Admin ausgeführt (da ansonsten kein Zugriff auf den Profilordner eines anderen Benutzers möglich sein sollte)?
  • Variablendeklarationen per "Dim" sind besonders dann sinnvoll, wenn Du sie konsequent für alle Variablen vornimmst und mit einem "Option Explicit" vorweg kombinierst - das Festlegen der Variablen "y" ist allerdings nur als "Absichtserklärung" zu werten - wenn als Anzahl ein nicht-numerischer Wert (oder garnix) eingegeben wird, nützt das "As Integer" nicht nur nicht, sondern das Script läuft in einen "Type mismatch"-Error - daher besser die Eingabe als String (oder Variant) "entgegennehmen" und dann zB mit "If IsNumeric()" prüfen.
  • Da es offensichtlich eine größere Anzahl von Zeilen geben kann (und nach derzeitigem Stand auch keine alten Werte überschrieben werden sollen), würde ich den Zeilenwert "500" in Zeile 17 überdenken ...
  • Zeile 35 ist unnötig.

Grüße
bastla
Bitte warten ..
Mitglied: Alex-IT02
07.03.2012 um 12:32 Uhr
Hallo Bastla und Hallo alle Mitleser =)

Danke für die Erklärung.

Also bedeutet "1,UBound(V)"
1 für die Höhe, also Größe beibehalten, Faktor 1:1 vlt?
und UBound für die Breitenautomatik, wobei er die Breite automatisch an die Variable V (=die Arrays) anpasst. und das "+ 1 steht" dann für? um 1 weiter nach rechts?

Zum Verschönern:

Die Anzahl der Sheets is nie genau 206. Sie wird immer variieren, deshalb wollte ich die Möglichkeit geben es individuell eingeben zu können?! gibt es ne schönere Variante? =)

Das Script wird von einem Benutzer ausgeführt der keine höheren Rechte besitzt. In späterer Folge kann es auch passieren dass das Script auch von jemand anderem ausgeführt wird.
Ich wollte versuchen die Möglichkeit zu schaffen dieses Script ziemlich individuell zu gestalten, Unabhängig vom Benutzer. Auch hier fehlt mir leider die Erfahrung und ich weiß deshalb nicht was alles möglich wäre.

Was meinst du mit Variablen per "Option Explicit" kombinieren? "option explicit" ist dies wie eine Bedingung? sodass wenn ich option explicit on schreibe, dann aber eine Variable nicht richtig und eindeutig deklariert ist,
ich eine Fehlermeldung bekomm beim Kompilieren?

Der Ansatz mit If is Numeric gefällt mir sehr gut. Würde dann folgendes passen?

01.
goto Dateianzahl 
02.
 
03.
y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,")   ' Anzahl der Sheets die Zusammengeführt werden sollen  
04.
 
05.
            If (IsNumeric(x) Then 
06.
               goto: weiter 
07.
            Else 
08.
                MsgBox("keine gültige Zahl") 
09.
            goto: Dateianzahl 
10.
            End If 
11.
goto weiter
mit den "500" hast du natürlich recht. Kann man hier eventuell auch eine Art Autorange Variante verwenden? Existiert so etwas?

Lg Alex
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 13:35 Uhr
Hallo Alex,

bastla wird's sicher noch besser erklären können, aber eines vorneweg:
Also bedeutet "1,UBound(V)"
Nein!
Es handelt sich hierbei um ein Array - da bitte mal selber googeln, was das ist! - und alle Arrays
fangen mit 0 an. Kleines Beispiel:
01.
a = Array("0","1","2") 
02.
for i = 0 to Ubound(a) 
03.
     msgbox a(i) 
04.
next
das heisst, dass a(0) = 0 ; a(1) = 1 und a(2) = 2
Ubound gibt dir nur den höchsten möglichen Feldindexwert eines Arrays zurück - das ist eine Integerzahl und in unserem Beispiel wäre diese 2

2) bei deinem Codeschnipsel stört nur die erste Zeile. Die müßte heissen:
01.
Dateianzahl:
Sicherlich mehr dazu wird dir bastla noch erklären.

Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
07.03.2012 um 14:43 Uhr
Hey Tsuki,

danke für die Erklärung. Array hab ich bereits gegoogelt und bin bissl schlauer worden =)
Zum Codeschnipsel:

wenn bei "goto Dateianzahl" das goto zuviel ist, nehm ich einmal an dass die Zeile 11 auch mit "weiter" genügt?

Lg Alex
Bitte warten ..
Mitglied: bastla
07.03.2012 um 14:49 Uhr
Hallo Alex und Tsuki!
1 für die Höhe, also Größe beibehalten, Faktor 1:1 vlt?
1 = neuer Bereich ist umfasst 1 Zeile
UBound() hat Tsuki ohnehin schon (ausführlicher als ich oben) erklärt ...
Was meinst du mit Variablen per "Option Explicit" kombinieren? "option explicit" ist dies wie eine Bedingung? sodass wenn ich option explicit on schreibe, dann aber eine Variable nicht richtig und eindeutig deklariert ist,
ich eine Fehlermeldung bekomm beim Kompilieren?
Genau das ist der Plan - damit fallen Dir Schreibfehler in Variablennamen leichter auf ...
Hinsichtlich der Zahleneingabe:
Wenn Du den Benutzer ohnehin dazu zwingen willst, eine Zahl einzugeben, kannst Du das ja gleich so lösen:
01.
Do 
02.
    y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,")   ' Anzahl der Sheets die Zusammengeführt werden sollen 
03.
    If Not IsNumeric(y) Then MsgBox("keine gültige Zahl") 
04.
Loop Until IsNumeric(y)
eine Art Autorange Variante
könnte mit einem Sprung von oben nach unten realisiert werden:
Zeile = Range("A2").End(xlDown).Row + 2
- oder Du beginnst einfach bei A65536 ...
Die Anzahl der Sheets is nie genau 206
Deswegen die Frage, ob nicht einfach alle Dateien des Ordners verarbeitet werden sollen ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 14:57 Uhr
@ Alex,

nehm ich einmal an dass die Zeile 11 auch mit "weiter" genügt
Fast! Die Doppelpunkte wären noch wichtig! Also
01.
weiter:
Die Doppelpunkte sind für eine Sprungmarke wichtig. Ansonsten hast du Recht!
Nur einmal GOTO, nämlich wenn du von einer bestimmten Stelle an eine bestimmte Sprungmarke springen möchtest.

@bastla
ich wollte dir nicht zuvorkommen! Du kannst die Materie eh besser erklären, als ich. Da kann man(n) sehr viel lernen!

Danke und Gruss
Tsuki
Bitte warten ..
Mitglied: Alex-IT02
07.03.2012 um 15:14 Uhr
Hey ihr beiden,

ihr seits beide der Wahnsinn. Und das Ganze macht auch noch richtig Spaß. Ebenso werden mir nicht die Lösungen vorgegeben sondern ich werd zum Selberdenken angeregt.
Find ich verdammt gut.

durch diese Do-Schleife muss jetzt auch dieses " option explicit" verwendet werden kann das sein?
Ich hab bereits Typen vergeben, aber wsl unnötige und falsche. Wie was deklariert werden soll werd ich mir durch Eigenstudium zur Gemüte führen.

01.
Dim x As String 
02.
Dim y As Integer 
03.
Dim Zeile As String 
04.
Dim i As Integer 
05.
Dim Q As Object 
06.
Dim V As String
das war mal mein Anfang. Er schreit jedoch dennnoch noch dass ihm das Ubound nicht passt.

"UBound erwartet Datenfeld"

Alternative: alle Dims weglassen und das option explicit?

Kann ich auch generell auf "Errors" reagieren? Indem ich zum Beispiel:

01.
On Error GoTo ende                             'das setz ich nach der letzten Inputbox hin?! oder gleich nach dem Sub? 
02.
ende:                                                        'steht ganz am Ende des Makros, 
03.
msg("Konnte nicht korrekt ausgeführt werden") 
04.
End Sub
Dieser Code funktioniert iwie nicht so wie ich es gerne hätte.


Und durch dieses Loop komme ich gar nicht mehr raus aus der Schleife? weder durch das X noch sonst wie?
Muss ich hier wieder extra ein IF hinzufügen damit ich das Skript abbrechen kann und die Error-Meldung ausgegeben wird?

Lg Alex
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 15:27 Uhr
Hallo Alex

Kann ich auch generell auf "Errors" reagieren? Indem ich zum Beispiel:
Ja, kannst du. Hat aber den faden Beigeschmack, dass du dann nicht weisst, warum er nach ende: gesprungen ist.
Besser ist es bei Abfragen genau auf die Eingaben einzugehen.

Wenn ein Ubound nicht passt, dann gibt es einige Möglichkeiten dafür. Was du auf keinen Fall machen solltest, ist dieses zu deklarieren. Also nicht auf direktem Wege
Das Ubound ergibt sich! Siehe mein vorhergehendes Beispiel.
Wenn wir's noch um eine weitere Messagbox ergänzen, dann sähe
es so aus:
01.
a = Array("0","1","2") 
02.
for i = 0 to Ubound(a) 
03.
     msgbox a(i) 
04.
next 
05.
msgbox ubound(a)
Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
07.03.2012 um 15:46 Uhr
Hallo Tsuki!
Ja, kannst du. Hat aber den faden Beigeschmack, dass du dann nicht weisst, warum er nach ende: gesprungen ist.
Naja, Du kannst zumindest Err.Number auswerten ...
Das Array V kann vorweg As Variant deklariert werden.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
07.03.2012 um 15:56 Uhr
Hallo Alex!
Und durch dieses Loop komme ich gar nicht mehr raus aus der Schleife? weder durch das X noch sonst wie?
Wenn die InputBox abgebrochen oder einfache keine Eingabe vorgenommen wird, enthält y danach "", was Du natürlich abfragen kannst:
01.
Do 
02.
    y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,")   ' Anzahl der Sheets die Zusammengeführt werden sollen 
03.
    If y <> "" And Not IsNumeric(y) Then MsgBox ("keine gültige Zahl") 
04.
Loop Until IsNumeric(y) Or y = "" 
05.
If y = "" Then 
06.
    MsgBox "Na gut, dann nicht ..." 
07.
    Exit Sub 
08.
End If
Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
07.03.2012 um 16:00 Uhr
Hallo bastla,

das ist mit Sicherheit die Möglichkeit, um etwaige Fehler einzugrenzen. Bin ich gar nicht gleich drauf gekommen.
Man muss halt nur für die gewissen Sachen die Fehlercodes, bzw. -nummern wissen. Aber dann ist es eine super Lösung!

Bei der Deklaration des Arrays stimme ich dir vollendst zu! Danke!

Viele Grüße

Tsuki
Bitte warten ..
Mitglied: Alex-IT02
07.03.2012 um 16:05 Uhr
Hey bastla, hey Tsuki

vielen vielen Dank, ihr wart mir mehr als eine riesen Hilfe.
ich wünsch euch noch ne schöne Woche,

Lg Alex
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Visual Studio
Mit Visual Basic auf Shopware 5 API zugreifen (9)

Frage von SmogKiel zum Thema Visual Studio ...

Visual Studio
gelöst Pastebin auslesen mit Visual Basic? (2)

Frage von UltraZz zum Thema Visual Studio ...

Basic
gelöst Mit Visual Basic Batch Datei öffnen (26)

Frage von Flodsche zum Thema Basic ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...