PDA

Vollständige Version anzeigen : Nummerierung mit VBA


t_bern
12.03.2009, 08:14
moin zusammen,

über vba lasse ich mir den inhalt eines ordners in excel auflisten.
(code hab ich nicht selbst geschrieben)

Private Sub Workbook_Open()

Dim icount As Integer
Dim i As Integer, j As Integer
Worksheets(1).Range("a2:b50").Clear

With Application.FileSearch
.NewSearch
.LookIn = "d:\formulare"
.Filename = "*.*"
.SearchSubFolders = False
.Execute
icount = .FoundFiles.Count
For i = 1 To icount
Worksheets(1).Hyperlinks.Add anchor:=Worksheets(1).Cells(i + 1, 1), Address:=.FoundFiles(i)
For j = Len(Cells(i + 1, 1)) To 1 Step -1
If Cells(i + 1, 1).Characters(j, 1).Text = "\" Then
Cells(i + 1, 1) = Right(Cells(i + 1, 1), Len(Cells(i + 1, 1)) - j)
Exit For
End If
Next j
Next i
End With

End Sub

wenn es geht, hätte ich gerne die einträge nummeriert, so das ich weiß, wieviel formulare im ordner gefunden wurden.
in der spalte a hätte ich gerne die nummerierung (1 bis ...), in der spalte b den eintrag (link).

könnt ihr mir helfen ?

Backowe
12.03.2009, 08:23
Hi,

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_Open()
<span class="TOKEN">Dim</span> icount <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> i <span class="TOKEN">As</span> Integer, j <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
Worksheets(1).Range(&quot;a2:b50&quot;).Clear
&nbsp;
<span class="TOKEN">With</span> Application.FileSearch
.NewSearch
.LookIn = &quot;d:\formulare&quot;
.Filename = &quot;*.*&quot;
.SearchSubFolders = <span class="TOKEN">False</span>
.Execute
icount = .FoundFiles.Count
<span class="TOKEN">For</span> i = 1 <span class="TOKEN">To</span> icount
Worksheets(1).Hyperlinks.Add anchor:=Worksheets(1).Cells(i + 1, &quot;B&quot;), Address:=.FoundFiles(i)
<span class="TOKEN">For</span> j = Len(Cells(i + 1, &quot;B&quot;)) <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
<span class="TOKEN">If</span> Cells(i + 1, &quot;B&quot;).Characters(j, 1).Text = &quot;\&quot; <span class="TOKEN">Then</span>
Cells(i + 1, &quot;B&quot;) = Right(Cells(i + 1, &quot;B&quot;), Len(Cells(i + 1, &quot;B&quot;)) - j)
Cells(i + 1, &quot;A&quot;) = i
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> j
<span class="TOKEN">Next</span> i
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

t_bern
12.03.2009, 08:43
super, danke !

einen hätte ich aber noch :p

ein formular ist bei uns folgendermaße aufgebaut.

z.B. FM001-Schutzschalter.xls

in der spalte a hätte ich gerne die nummerierung (funktioniert ja super)
in der spalte b welche formblattnummer (z.b. FM001)
in der spalte c den formblattnamen als link (z.b. schutzschalter)



kannst du mir bitte nochmal helfen.
hab mal ein beispiel angehängt.

danke !

Backowe
12.03.2009, 09:57
Hi,

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_Open()
<span class="TOKEN">Dim</span> icount <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> i <span class="TOKEN">As</span> Integer, j <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
Worksheets(1).Range(&quot;a2:c50&quot;).Clear
&nbsp;
<span class="TOKEN">With</span> Application.FileSearch
.NewSearch
.LookIn = &quot;d:\formulare&quot;
.Filename = &quot;*.*&quot;
.SearchSubFolders = <span class="TOKEN">False</span>
.Execute
icount = .FoundFiles.Count
<span class="TOKEN">For</span> i = 1 <span class="TOKEN">To</span> icount
Worksheets(1).Hyperlinks.Add anchor:=Worksheets(1).Cells(i + 1, &quot;C&quot;), Address:=.FoundFiles(i)
<span class="TOKEN">For</span> j = Len(Cells(i + 1, &quot;C&quot;)) <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
<span class="TOKEN">If</span> Cells(i + 1, &quot;C&quot;).Characters(j, 1).Text = &quot;\&quot; <span class="TOKEN">Then</span>
Cells(i + 1, &quot;A&quot;) = i
Cells(i + 1, &quot;B&quot;) = Left(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), InStr(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;) - 1)
Cells(i + 1, &quot;C&quot;) = Left(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;)), _
Len(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;))) - 4)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> j
<span class="TOKEN">Next</span> i
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

t_bern
12.03.2009, 10:53
ich muss nochmal nerven :eek:

ich habe die excelmappe mit dem code von dir, in den ordner d:\formulare gespeichert. (wo alle formulare liegen)
beim ausführen bekomme ich einen laufzeitfehler

Laufzeitfehler 5 : Ungültiger prozeduraufruf oder ungültiges argument

Cells(i + 1, "B") = Left(Right(Cells(i + 1, "C"), Len(Cells(i + 1, "C")) - j), InStr(Right(Cells(i + 1, "C"), _
Len(Cells(i + 1, "C")) - j), "-") - 1)

wenn ich die excelmappe auf den desktop speicher funktioniert es.


:entsetzt: help

Backowe
12.03.2009, 10:58
Hi,

das kann damit zusammenhängen, daß bspw. im Dateinamen kein "-" vorhanden ist. Wie sehen denn die Dateinamen aus, wenn jeder in mehr oder weniger verschieden ist, könnte das in einer Programmierorgie ausarten! ;o)

t_bern
16.03.2009, 07:51
hi
besten dank nochmal, es funktioniert echt super.

ich möcht den code gerne verstehne den du geschrieben hast.
könntest du es mir bitte erklären ?

Backowe
16.03.2009, 15:40
Hi,

der Versuch einer Erklärung:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_Open()
<span class="TOKEN">Dim</span> icount <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> i <span class="TOKEN">As</span> Integer, j <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
Worksheets(1).Range(&quot;a2:c50&quot;).Clear <span class="REM">'Loesche in A2:C50 alles!</span>
&nbsp;
<span class="TOKEN">With</span> Application.FileSearch
.NewSearch <span class="REM">'Neue Suche</span>
.LookIn = &quot;d:\formulare&quot; <span class="REM">'Suche in Verzeichnis</span>
.Filename = &quot;*.*&quot; <span class="REM">'Nach allen Dateien</span>
.SearchSubFolders = <span class="TOKEN">False</span> <span class="REM">'Unterverzeichnisse werden nicht durchsucht!</span>
.Execute <span class="REM">'Ausfuehrung</span>
icount = .FoundFiles.Count
<span class="TOKEN">For</span> i = 1 <span class="TOKEN">To</span> icount
Worksheets(1).Hyperlinks.Add anchor:=Worksheets(1).Cells(i + 1, &quot;C&quot;), Address:=.FoundFiles(i)
<span class="REM"> 'Dateiname = &quot;D:\Formulare\FM001-Schutzschalter.xls</span>
<span class="TOKEN">For</span> j = Len(Cells(i + 1, &quot;C&quot;)) <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
<span class="TOKEN">If</span> Cells(i + 1, &quot;C&quot;).Characters(j, 1).Text = &quot;\&quot; <span class="TOKEN">Then</span> <span class="REM">'String wird bis zum letzten Backslash abgetrennt</span>
<span class="REM"> 'es bleibt &quot;FM001-Schutzschalter.xls&quot; stehen</span>
Cells(i + 1, &quot;A&quot;) = i
<span class="REM"> 'FM001 wird abgetrennt und in die Spalte B geschrieben.!</span>
Cells(i + 1, &quot;B&quot;) = Left(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), InStr(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;) - 1)
<span class="REM"> 'im letzten Schritt das wird von &quot;Schutzschalter.xls&quot; noch das &quot;.xls&quot; abgetrennt und der String in Spalte C geschrieben.</span>
Cells(i + 1, &quot;C&quot;) = Left(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;)), _
Len(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;))) - 4)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> j
<span class="TOKEN">Next</span> i
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingef?gt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

t_bern
16.03.2009, 19:46
hi,

so ganz versteh ich es zwar immer noch nicht, aber besser als vorher ..... aber ich fang ja auch erst an mit vba :D
trotzdem danke !

so langsam ist es mir peinlich, aber ich frag dich trotzdem.
vielleicht hilfst du mir nochmal.

ich habe die dokumentenbezeichnung nochmal änder müssen.

z.B. FM001-Schutzschalter_01_01.12.08
FM001 = Formularnummer (1)
Schutzschalter = Formularname
01 = Index
01.12.08 = ersellt am

Fortlaufende Nummer hätte ich gerne in Spalte A
Formularnummer in der Spalte B
Formularname (als Link) in Spalte C
Index in D
erstelle am in Spalte E

bis zur Spalte C würde es ja fast passen.

kannst du mir nochmal helfen ?

gebe auch ein bier aus :grins:

Backowe
16.03.2009, 20:50
Hi,

wie kann ich mir als Anfänger ein nicht ganz einfaches Thema Stringzerlegung aussuchen. *kopfschüttel* :grins: Aber nur an solchen Themen, die eigentlich zu hoch für einen sind, nur daran kann man wachsen. :mrcool:

Hoffe, daß ich Dir etwas weiterhelfen konnte, auch wenn meine Erklärung nicht gerade die beste war! :)



<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Workbook_Open()
<span class="TOKEN">Dim</span> icount%
<span class="TOKEN">Dim</span> i%, j%, x%
<span class="TOKEN">Dim</span> Ergebnis <span class="TOKEN">As</span> Variant
Worksheets(1).Range(&quot;a2:c50&quot;).Clear
&nbsp;
<span class="TOKEN">With</span> Application.FileSearch
.NewSearch
.LookIn = &quot;D:\Formulare&quot;
.Filename = &quot;*.*&quot;
.SearchSubFolders = <span class="TOKEN">False</span>
.Execute
icount = .FoundFiles.Count
<span class="TOKEN">For</span> i = 1 <span class="TOKEN">To</span> icount
Worksheets(1).Hyperlinks.Add anchor:=Worksheets(1).Cells(i + 1, &quot;C&quot;), Address:=.FoundFiles(i)
<span class="TOKEN">For</span> j = Len(Cells(i + 1, &quot;C&quot;)) <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
<span class="TOKEN">If</span> Cells(i + 1, &quot;C&quot;).Characters(j, 1).Text = &quot;\&quot; <span class="TOKEN">Then</span>
Cells(i + 1, &quot;A&quot;) = i
Cells(i + 1, &quot;B&quot;) = Left(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), InStr(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;) - 1)
Cells(i + 1, &quot;C&quot;) = Left(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;)), _
Len(Right(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), Len(Right(Cells(i + 1, &quot;C&quot;), _
Len(Cells(i + 1, &quot;C&quot;)) - j)) - InStrRev(Right(Cells(i + 1, &quot;C&quot;), Len(Cells(i + 1, &quot;C&quot;)) - j), &quot;-&quot;))) - 4)
Ergebnis = Split(Cells(i + 1, &quot;C&quot;), &quot;_&quot;)
<span class="TOKEN">For</span> x = 1 <span class="TOKEN">To</span> <span class="TOKEN">UBound</span>(Ergebnis)
Cells(i + 1, x + 3) = Ergebnis(x)
<span class="TOKEN">Next</span>
Cells(i + 1, &quot;C&quot;) = Left(Cells(i + 1, &quot;C&quot;), InStr(Cells(i + 1, &quot;C&quot;), &quot;_&quot;) - 1)
<span class="TOKEN">Exit For</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> j
<span class="TOKEN">Next</span> i
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

t_bern
17.03.2009, 08:00
moin,

ich bekomme einen Laufzeitfehler 5 :eek:

Unzulässiger Prozeduraufruf oder ungültiges Argument (Fehler 5)

hab es schon dreimal versucht, ist immer der gleiche fehler.

gruß

Backowe
17.03.2009, 08:31
Hi,

mit welcher Excelversion arbeitest Du denn?

t_bern
17.03.2009, 08:38
hi,

excel 2003.

gruß

Backowe
17.03.2009, 08:41
Hi,

und an welcher Position kommt der Laufzeitfehler?

t_bern
17.03.2009, 08:43
bei
.Execute

t_bern
17.03.2009, 08:47
habs,

sorry war mein fehler.

hatte in einer formualrbezeichnung einen schreibfehler