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

Schriftartennamen auslesen aus Verzeichnis2

Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 09:35:33
Lars
Hi, die erste Frage von gestern ist für mich leider nicht mehr editierbar bzw beantwortbar.
Christian hatte geantwortet aber das Makro bricht bei mir nur ab.
Die Frage war auch den Namen der Schriftart auszulesen - nicht den Dateinamen.
Ich hätte gerne eine Liste meiner Schriftarten aus einem bestimten Verzeichnis, bzw. Unterverzeichenissen die ich noch nicht installiert habe. Das Verzeichnis wäre D:/fonts
Wenn jemand weiß wie man Unterverzeichnisse in die Suche aufnimmt wäre das genial.
Gruß Lars

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 09:56:24
Hoffi
Hallo Lars,
versuchs mal so:

Private Sub Fonts_lesen()
Dim i As Integer
With Application.FileSearch
.LookIn = "D:\fonts"
.SearchSubFolders = True
.Filename = "*.TTF"
.Execute
For i = 1 To .FoundFiles.Count
Cells(i + 1, 1).Value = Dir(.FoundFiles(i))
Next i
End With
End Sub

Grüße
Hoffi
P.S. Rückmeldung wäre nett...
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 12:43:37
Lars
Hallo Hoffi,
bei mir macht das Makro gar nichts! Warum weiß ich nicht aber in dem Verzeichnis sind ttf-dateien.
gruß lars
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 13:17:23
Hoffi
Hallo Lars,
Komisch, bei mir funktioniert der Code einwandfrei...
Hast Du den Pfad richtig?
Grüße
Hoffi
Anzeige
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 14:29:29
Lars
Haööo Hoffi,
danke in einem anderen Verzeichnis mit nur ein paar Dateien geht es - steigt wohl irgendwie aus bei meinen 9000 Fonts und dann bringt er nichts.
Er listet ja auch nur den Dateinamen, nicht den Schriftarnamen. Im Makro von Sepp liest er auch den Schriftarten-Namen - steigt aber auch aus.
Vielen Dank
Gruß Lars
AW: Schriftartennamen auslesen aus Verzeichnis2
14.09.2006 13:30:15
Hoffi
Hallo Lars,
versteh ich nicht, bei mir listet er NUR den Schriftartnamen auf...
das mit den 9000 kann am INTEGER liegen, definier mal i AS Long, vielleicht hauts dann hin...
Grüße
Hoffi
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 11:50:46
Josef
Hallo Lars!
Probier mal.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function CreateScalableFontResource Lib "gdi32" _
  Alias "CreateScalableFontResourceA" (ByVal fHidden As Long, _
  ByVal lpszResourceFile As String, ByVal lpszFontFile As String, _
  ByVal lpszCurrentPath As String) As Long

Public Function TTFontName(FileName As String) As String
'Source=http://www.aboutvb.de/khw/artikel/khwttfontname.htm
Dim nFNr As Integer
Dim nContents As String
Dim nTempFile As String
Dim nPos As Long

nTempFile = Environ("TEMP") & "\temp.fot"

If CreateScalableFontResource(1, nTempFile, FileName, _
  vbNullString) Then
  nFNr = FreeFile
  On Error GoTo TTFontName_Error
  Open nTempFile For Binary Access Read As #nFNr
  nContents = Space(LOF(nFNr))
  Get #nFNr, , nContents
  Close #nFNr
  Kill nTempFile
  nPos = InStr(nContents, "FONTRES:") + 8
  If nPos Then
    TTFontName = Mid(nContents, nPos, InStr(nPos, nContents, _
      vbNullChar) - nPos)
  End If
End If
Exit Function

TTFontName_Error:
Resume
End Function



Sub getFontName()
Dim objFS As FileSearch
Dim objSh As Worksheet
Dim strPath As String
Dim intIndex As Integer

strPath = "C:\windows\fonts" 'Pfad anpassen

Set objFS = Application.FileSearch

With objFS
  .NewSearch
  .LookIn = strPath
  .FileName = "*.ttf"
  .SearchSubFolders = True
  
  If .Execute > 0 Then
    
    Set objSh = ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Sheets(Sheets.Count))
    For intIndex = 1 To .FoundFiles.Count
      
      objSh.Cells(intIndex, 1) = Dir(.FoundFiles(intIndex))
      objSh.Cells(intIndex, 2) = TTFontName(.FoundFiles(intIndex))
      
    Next
    objSh.Columns.AutoFit
    Set objSh = Nothing
  End If
  
End With

Set objFS = Nothing

End Sub


Gruß Sepp

Anzeige
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 12:51:31
Lars
Hallo Sepp,
Hut ab das funktioniert wie verrückt - aber leider nur in dem Windows-Verzeichnis.
Sobald ich das Verzeichnis anpasse bringt er gar nichts.
Gruß Lars
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 13:11:01
Josef
Hallo Lars!
Also bei mir funktioniert der Code auch bei jedem anderen Verzeichnis, egal ob die Schrift registriert ist oder nicht.
Gruß Sepp

AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 14:27:00
Lars
Hallo Sepp, ich habe es jetzt mal Testweise versucht - es geht auch bei mir.
Aber: er steigt aus weil ich wohl auch irgendwelche Dateien dabei habe die dem Makro nicht passen. Von 20 ttf-Files bekomme ich 5 Antworten. Muß wohl an der Fehlersteuerung liegen?
Ich habe ein Verzeichnis da sind 9000 Fonts drin aber er bringt mir nichts - weil er wohl sofort aussteigt.
Er müßte nur die nehmen wo er auch was findet.
Hast Du eine Idee?
Gruß Lars
Anzeige
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 14:52:54
Lars
Hallo Sepp, ich habe es jetzt mal Testweise versucht - es geht auch bei mir.
Aber: er steigt aus weil ich wohl auch irgendwelche Dateien dabei habe die dem Makro nicht passen. Von 20 ttf-Files bekomme ich 5 Antworten. Muß wohl an der Fehlersteuerung liegen?
Ich habe ein Verzeichnis da sind 9000 Fonts drin aber er bringt mir nichts - weil er wohl sofort aussteigt.
Er müßte nur die nehmen wo er auch was findet.
Hast Du eine Idee?
Gruß Lars
AW: Schriftartennamen auslesen aus Verzeichnis2
13.09.2006 15:47:44
Josef
Hallo Lars!
Dann mal mit Fehlerbehandlung.
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit



Private Declare Function CreateScalableFontResource Lib "gdi32" _
  Alias "CreateScalableFontResourceA" (ByVal fHidden As Long, _
  ByVal lpszResourceFile As String, ByVal lpszFontFile As String, _
  ByVal lpszCurrentPath As String) As Long

Public Function TTFontName(FileName As String) As String
'Source=http://www.aboutvb.de/khw/artikel/khwttfontname.htm
Dim nFNr As Integer
Dim nContents As String
Dim nTempFile As String
Dim nPos As Long

nTempFile = Environ("TEMP") & "\temp.fot"

If CreateScalableFontResource(1, nTempFile, FileName, _
  vbNullString) Then
  nFNr = FreeFile
  On Error GoTo TTFontName_Error
  Open nTempFile For Binary Access Read As #nFNr
  nContents = Space(LOF(nFNr))
  Get #nFNr, , nContents
  Close #nFNr
  Kill nTempFile
  nPos = InStr(nContents, "FONTRES:") + 8
  If nPos Then
    TTFontName = Mid(nContents, nPos, InStr(nPos, nContents, _
      vbNullChar) - nPos)
  End If
Else
  TTFontName = "File Error! Can´t Read Fontname"
  Err.Clear
End If

Exit Function

TTFontName_Error:
TTFontName = "File Error! Can´t Read Fontname"

Resume
End Function




Sub getFontName()
Dim objFS As FileSearch
Dim objSh As Worksheet
Dim strPath As String
Dim intIndex As Integer

On Error GoTo ErrExit
GetMoreSpeed

strPath = "F:\" 'Pfad anpassen

Set objFS = Application.FileSearch

With objFS
  .NewSearch
  .LookIn = strPath
  .FileName = "*.ttf"
  .SearchSubFolders = True
  
  If .Execute > 0 Then
    
    Set objSh = ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Sheets(Sheets.Count))
    For intIndex = 1 To .FoundFiles.Count
      
      objSh.Cells(intIndex, 1) = Dir(.FoundFiles(intIndex))
      objSh.Cells(intIndex, 2) = TTFontName(.FoundFiles(intIndex))
      
    Next
    
    objSh.Columns.AutoFit
    Set objSh = Nothing
    
  End If
  
End With

ErrExit:
GetMoreSpeed 0
Set objFS = Nothing

End Sub


Private Sub GetMoreSpeed(Optional ByVal Modus As Integer = 1)
Static lngCalc As Long

With Application
  If Modus = 1 Then
    lngCalc = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
    .Calculation = -4135
    .Cursor = xlWait
  Else
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True
    .Calculation = IIf(lngCalc <> 0, lngCalc, -4105)
    .Cursor = xlDefault
  End If
End With

End Sub


Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige