Quellcode-Fehler und zwei andere Fragen

stephanl

Mitglied
Hi,

ich habe ein kleines Problem mit meinem Quellcode: Er soll eigenldich den Text zwischen der zeichenkombination "Symbol:" und dem Absatz nehmen und in eine Variable packen, doch bei dem Code

Code:
                  Dim Suchbegriff As String
                  Dim Start As Long 
                  Dim Ende As Long
                  Dim Ergebnis As String
                  Suchbegriff = "Symbol:"
                  Start = InStr(1, Text, Suchbegriff)
                  Ende = InStr(Start, Text, vbNewLine)
                  Ergebnis = Mid(Text, Start + Len(Suchbegriff), Ende - Start - Len(Suchbegriff))
                  oSymbol = Trim(Ergebnis)

sagt er mir


Laufzeitfehler '5':

Ungültiger Prozeduraufruf oder ungültiges Argument



und zeigt beim debuggen auf

Ergebnis = Mid(Text, Start + Len(Suchbegriff), Ende - Start - Len(Suchbegriff))

Hierbei ist in der Variable Text schon eine Textdatei, die zuvor geladen wurde.

Wo ist der fehler?


Und noch zwei Fragen :D

1) Wie kann ich zu einem Frame eine Scroll bar hinzufügen, wenn der Inhalt des Frames die Höhe von diesem überschreitet?
2) Wie kann ich einen ControlButton ganz 2D machen?


Vielen Dank schon mal :D


Stephan
 
Zeig doch bitte mal die Stelle wo du "Text" deklarierst und einliest. Wenn ich die als String per Hand setze funktionierts.

Für Frames zum Scrollen gibts viele Tutorials => Suchfunktion
Buttons 2D:
Schau dir mal die Eigenschaften Style und so an, da kannst sowas einstellen.
 
Hi,

also das ist die Stelle:

Code:
                Dim fs As Object, a As Object
                Dim Text As String
                  Set fs = CreateObject("Scripting.FileSystemObject")
                  Set a = fs.OpenTextFile(oFile)
                  Text = a.ReadAll
                  a.Close

und die deklaration von oFile:

Code:
' nur .TXT-Dateien in einer ListBox anzeigen
Dim oFolder As Folder
Dim oFile As File
  
' Ausgangsverzeichnis
Set oFolder = oFSO.GetFolder("Data\")
  
' alle Dateien durchlaufen
    For Each oFile In oFolder.Files
     
     ' nur .txt Dateien!
        If LCase$(oFSO.GetExtensionName(oFile)) = "txt" Then
 
Zuletzt bearbeitet:
Code:
Start = InStr(1, Text, Suchbegriff)
Ende = InStr(Start, Text, vbNewLine)
Ergebnis = Mid(Text, Start + Len(Suchbegriff), Ende
Das hier kann nur gehen wenn das Programm auch tatsächlich den gesuchten String findet, ist eine Datei dabei in der dieser String nicht vor kommt hat Start einen ungültigen Wert.
 
Hi,

ich habe jetzt das eingebaut:

Code:
MsgBox Ende - Start - Len(Suchbegriff)
Ergebnis = Mid(Text, Start + Len(Suchbegriff), Ende - Start - Len(Suchbegriff))

Er sagt mir jetzt in der MSGBox "1" und nachdem ich OK gedrückt habe, kommt der fehler...

Was ist denn da falsch?
 
:D Das geht jetzt, es lag an der Pfadangabe. Jetzt habe ich ein Problem mit der Deklaration einer Variable. Sie soll zuerst eine Operation ausführen und dann einem Button ein Bild zuweisen. Das geht aber nicht, wenn ich es mit

Code:
Dim oSymbol As String

deklariere. Dann kommt nämlich bei diesem Code:

Code:
oSymbol = Trim(Ergebnis)
oSymbol = "\Data\Pictures\" & oSymbol & ".bmp"
[...]
.Picture = oSymbol

der Compile-Error: Type mismatch...

Als was muss ich die Variable festlegen?

Danke schon mal



Stephan
 
Dein Code funktioniert bei mir falls alle Txt-Dateien den Suchbegriff enthalten.
Ist eine Datei dabei die den gesuchten Begriff nicht enthält gibts einen Fehler beim InStr() für Ende da Start einen ungültigen Wert hat.

Hab aus deinen Code-Fetzen mal eine funktionsfähige Sub zusammengestellt inkl. Handling für Dateien die den Suchbegriff nicht enthalten:
Code:
Sub test()

Dim fso         As Object
Dim a           As Object
Dim Text        As String

Dim oFolder     As Object
Dim oFile       As Object

Dim Suchbegriff As String
Dim Start       As Long
Dim Ende        As Long
Dim Ergebnis    As String

Set fso = CreateObject("Scripting.FileSystemObject")

Set oFolder = fso.GetFolder("D:\test\")

For Each oFile In oFolder.Files
    If LCase(fso.GetExtensionName(oFile)) = "txt" Then
        Set a = fso.opentextfile(oFile)
        Text = a.ReadAll
        a.Close
        
        Suchbegriff = "Symbol:"
        Start = InStr(1, Text, Suchbegriff)
        If Start <> 0 Then
            Ende = InStr(Start, Text, vbNewLine)
            Ergebnis = Mid(Text, Start + Len(Suchbegriff), Ende - Start - Len(Suchbegriff))
            MsgBox Trim(Ergebnis)
        End If
    End If
Next
End Sub
 
Original geschrieben von stephanl
Code:
.Picture = oSymbol
Ein Blick in die Hilfe und du siehst das du der Picture-Eigenschaft keinen String zuweisen kannst.

Du musst das Bild erst Laden und dann zuweisen, Beispiel:
Code:
Me.Image1.Picture = LoadPicture("d:\test\test.bmp")
Anstatt dem festen String kannst du hier auch eine String-Variable verwenden.
 
:D Super, danke es geht :D

Aber ich finde nichts, wo beschrieben wird, wie ich eine Scrollbar hinzufüge, wenn der Inhalt die Höhe überschreitet, sie aber vorher nicht sichtbar ist...

Ich finde eigendlich überhaupt gar kein Tutorial, in dem beschrieben ist, wie man eine Scrollbar hinzufügt...

Ich habe mich jetzt auch über Style informiert, aber bei Appereance gibt es ja nur 0 - Flat und 1 - 3D. Wenn ich 0 - Flat einstelle ändert sich nichts. Bei Style habe ich ja Graphical...

Kannst Du mir das bitte erklären, ich habe echt keine Ahnung :(

Vielen Dank schon mal :D

Stephan
 
Auf vb-fun.de gibts ein Tutorial für Scrollbars, kannst ja an deine Wünsche anpassen.
Welches Steuerelement willst du denn 2D haben? Meinst du den CommandButton?
Schau dir zu einem Steuerelement mal die Eigenschaften an, in der Hilfe sind die mit ihrer Wirkung beschrieben. Kann jetzt leider nicht nachschauen weil ich VB gerade nicht da hab und in VBA das etwas anders ist.
 
Zurück