Ein Makro in Visual Basic für Excel erstellen
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181276
Url: https://administrator.de/forum/ein-makro-in-visual-basic-fuer-excel-erstellen-181276.html
Ausgedruckt am: 23.12.2024 um 08:12 Uhr
38 Kommentare
Neuester Kommentar
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
Weil der zuletzt erst wieder ausgegraben worden war: Schau mal, ob in diesem Beitrag etwas für Dich dabei ist ...
Grüße
bastla
Hallo Alex-IT02 ,
ein bisschen Helfen möchte ich auch
Du müßtest deine Zeilen nur ändern in ungefähr so:
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:
damit hast du dann auch gleich alle Werte nebeneinander
Probier mal weiter und melde dich dann wieder
Gruss
Tsuki
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:
for i = 1 to 206
Workbooks.Open Filename:="C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\" & i & ".xls"
' deine weiteren Code-Blöcke
Workbooks "C:\Users\it02\Desktop\4500044164 PRÜFPROTOKOLLE\" & i & ".xls".Close SaveChanges:=False
next
'....
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:
Range("R10,F9,U28,M28,E28,M29").Select
Selection.Copy
' hier dann deinen Code einfuegen (also erst wieder dein anderes Excelsheet //aktivieren// , in die Zeile gehen, ab wo es weitergeht und dann
ActiveSheet.Paste
'....
Probier mal weiter und melde dich dann wieder
Gruss
Tsuki
also wenn deine Exceldateien alle Right(1) bis Right(n) heissen, dann passt du den Pfad so an:
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
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!er markiert alle gleichzeitig, kopiert diese in die zwischenablage, danach den Code:
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
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):
Grüße
bastla
Wenn's doch ohnehin nur um ein paar Werte (und nicht auch deren Formate) geht, würde ich das eher so versuchen (ungetestet):
Sub Zellen_importieren()
Zeile = Range("A500").End(xlUp).Row
For i = 1 To 206
Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls"
Sheets("Tabelle1").Select
V = Array([R10], [F9], [U28], [M28], [E28], [M29])
Workbooks("Right (" & i & ").xls").Close SaveChanges:=False
Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V
Zeile = Zeile + 1
Next i
End Sub
bastla
Hallo Alex-IT02!
Ich habe das oben etwas zu weit abgekürzt - daher hier die ausführliche Fassung meines Vorschlages:
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
ersetzen ...
Grüße
bastla
Ich habe das oben etwas zu weit abgekürzt - daher hier die ausführliche Fassung meines Vorschlages:
Sub Zellen_importieren()
Zeile = Range("A500").End(xlUp).Row + 2 'Leerzeile einfügen, wenn die alten Daten schon nicht gelöscht werden sollen
For i = 1 To 206
Set Q = Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls"
With Q.Sheets("Tabelle1")
V = Array(.Range("R10").Value, .Range("F9").Value, .Range("U28").Value, .Range("M28").Value, .Range("E28").Value, .Range("M29").Value)
End With
Q.Close SaveChanges:=False
Cells(Zeile, "A").Resize(1, UBound(V) + 1) = V
Zeile = Zeile + 1
Next i
End Sub
Wenn das Blatt übrigens immer vorweg geleert werden soll, könntest Du die Zeile 2 durch zB
Cells.Clear 'oder Cells.ClearContents
Zeile = 1
Grüße
bastla
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 "
Grüße
bastla
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
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
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
@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
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
Hallo Alex-IT02!
Ändere das
nach
Und vergiss Copy/Paste, wenn Du eh nur die Werte haben willst
Gruß Dieter
Ändere das
Set Q = Workbooks.Open Filename:="C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (" & i & ").xls"
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
Hallo @all!
Grüße
bastla
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
Hallo Alex-IT02!
Versuchs mal hiermit:
Gruß Dieter
[edit] Codezeile 17 geändert [/edit]
Versuchs mal hiermit:
Option Explicit
Const Path = "C:\Users\IT02\Desktop\4500044164 PRÜFPROTOKOLLE\Right (%1).xls"
Const ZellAdressen = "R10,F9,U28,M28,E28,M29"
Const StartZeile = 2 'Werte ab Zeile ? eintragen
Sub Zellen_Import()
Dim Fso As Object, Wks As Worksheet, Zellen As Variant
Dim File As String, NextLine As Long, i As Integer, c As Integer
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Wks = ThisWorkbook.Sheets(1)
Zellen = Split(Replace(ZellAdressen, " ", ""), ",")
NextLine = StartZeile
For i = 1 To 5
File = Replace(Path, "%1", i)
If Fso.FileExists(File) Then
With Workbooks.Open(File)
For c = 0 To UBound(Zellen)
.Sheets(1).Range(Zellen(c)).Copy
Wks.Cells(NextLine, "A").Offset(0, c).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Next
.Close False
End With
NextLine = NextLine + 1
Else
MsgBox "Datei nicht gefunden:" & vbCr & vbCr & File
End If
Next
End Sub
Gruß Dieter
[edit] Codezeile 17 geändert [/edit]
Hallo Alex-IT02!
Grüße
bastla
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, istUBound(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
Hallo Alex,
bastla wird's sicher noch besser erklären können, aber eines vorneweg:
Es handelt sich hierbei um ein Array - da bitte mal selber googeln, was das ist! - und alle Arrays
fangen mit 0 an. Kleines Beispiel:
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:
Sicherlich mehr dazu wird dir bastla noch erklären.
Gruss
Tsuki
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:
a = Array("0","1","2")
for i = 0 to Ubound(a)
msgbox a(i)
next
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:
Dateianzahl:
Sicherlich mehr dazu wird dir bastla noch erklären.
Gruss
Tsuki
Hallo Alex und Tsuki!
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:
- oder Du beginnst einfach bei A65536 ...
Grüße
bastla
1 für die Höhe, also Größe beibehalten, Faktor 1:1 vlt?
1 = neuer Bereich ist umfasst 1 ZeileUBound()
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:
Do
y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,") ' Anzahl der Sheets die Zusammengeführt werden sollen
If Not IsNumeric(y) Then MsgBox("keine gültige Zahl")
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
Die Anzahl der Sheets is nie genau 206
Deswegen die Frage, ob nicht einfach alle Dateien des Ordners verarbeitet werden sollen ...Grüße
bastla
@ Alex,
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
nehm ich einmal an dass die Zeile 11 auch mit "weiter" genügt
Fast! Die Doppelpunkte wären noch wichtig! Alsoweiter:
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
Hallo Alex
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:
Gruss
Tsuki
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:
a = Array("0","1","2")
for i = 0 to Ubound(a)
msgbox a(i)
next
msgbox ubound(a)
Gruss
Tsuki
Hallo Alex!
Grüße
bastla
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:Do
y = InputBox("Bitte geben Sie die Anzahl der Right-Dateien an,") ' Anzahl der Sheets die Zusammengeführt werden sollen
If y <> "" And Not IsNumeric(y) Then MsgBox ("keine gültige Zahl")
Loop Until IsNumeric(y) Or y = ""
If y = "" Then
MsgBox "Na gut, dann nicht ..."
Exit Sub
End If
bastla
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
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