[VBA] Steeds bij wegschrijven error

Status
Niet open voor verdere reacties.

Jan Van Haaren

Gebruiker
Lid geworden
27 okt 2002
Berichten
202
Hoi!

Dit heb ik: (dingen hebben geen goede naam, maar is maar om een beter idee van de situatie te geven)

Private Sub Command1_Click()
Dim resolution As String

If Combo1.Text = "800" Then resolution = "800"
If Combo1.Text = "600" Then resolution = "600"

Open "test.txt" For Output As #1
Print #1, "RESOLUTION =" + Str(resolution)
Close #1

End Sub


Dit werkt, maar ik zou graag ipv 800 en 600 een echte resolutie willen wegschrijven. Dus in de vorm "800x600x32", maar dan krijg ik steeds een error.

Dank bij voorbaat, Jan
 
om te beginnen heb ik je een privebericht gestuurd met de vraag of je in het vervolg als je thread's zijn opgelost ze ook even op opgelost zet en even een berichtje post in de trand van: bedankt, hier lukt het wel mee.

Ik stop ook tijd in jou vraag, dus zou prettig zijn als je dit kon doen.

Nu je vraag:

Om te beginnen gebruik je het Str commando, wat bedoeld is om een nummer (Integer bijv.) om te zetten in een string. Echter resolution is al als String gedeclareerd dus dit is echt niet nodig.

Vervolgens mis ik de end if statement. In ieder geval kan de gebruiker van jouw programma maar 1 keuze maken het is of 800 of 600. Dus 800x600x32 printen aan de hand van wat de gebruiker heeft gekozen zal niet gaan. Je hebt daarvoor meer events nodig of comboboxen.



Dim resolution, resolution2, resolution3, final As String

resolution = combo1.Text
resolution2= combo2.Text
resolution3 = combo3.Text

'800x600x32
final = "RESOLUTION =" + resolution + "x" + resolution2 + "x" + resolution3

Open "c:\test.txt" For Output As #1
Print #1, final
Close #1
 
Bedankt, mijn probleempje is opgelost, maar ik zit nog met iets anders.

Code:
Dim sFile As String


    With dlgCommonDialog
        .DialogTitle = "Choose your adboard"
        .CancelError = False
        .Filter = "Bitmapfiles (.bmp)|*.bmp"
        .ShowOpen
        If Len(.FileName) = 0 Then
            Exit Sub
        End If
        sFile = .FileName
    End With
    
picShow.Picture = LoadPicture(sFile)

Dit zorgt ervoor dat je een BMP file kan selecteren en die wordt dan getoond in een Picture Object. Maar mijn vraag is ofdat ik er ook voor kan zorgen dat in een Textbox de volledige bestandsnaam van die BMP file komt? Dank bij voorbaat!
 
Laatst bewerkt:
Gewoon de waarde sFile aan je Textbox toekennen.

Het hangt er vanaf wat je met URL bedoelt. Als je gewoon
het pad van je locale bestand (op je hardeschijf) en niet
van het web bedoelt, dan plaats je aan het einde van je code
Text.Text = sFile. Zie hieronder.



Dim sFile As String

Code:
With dlgCommonDialog 
    .DialogTitle = "Choose your adboard" 
    .CancelError = False 
    .Filter = "Bitmapfiles (.bmp)|*.bmp" 
    .ShowOpen 
    If Len(.FileName) = 0 Then 
        Exit Sub 
    End If 
    sFile = .FileName 
End With 

picShow.Picture = LoadPicture(sFile) 

Text1.text = sFile 'Dit moet je nog erbij doen.

Groet,

Dennis.
 
Wat aanvulling.

Eigenlijk staat het antwoord al bij je eerdere gestelde vraag
"Bestand openen met 'shell?'" vermeld.
(Eigenlijk zou deze vraag als 'opgelost' kunnen worden beschouwd, al
gaat het om een ietwat andere soort vraag. Maar het feit, dat je nu v.e.
CommonDialog control gebruik maakt, moet dit wel de oplossing van
je vraag geweest zijn)

Hierbij alsnog een stukje van die code:

CommonDialog1.ShowOpen
' Op dit punt is het pad en het
' geselecteerde bestand bekend, ze zitten in
' de variabele "CommonDialog1.FileName"
Shell "C:\WINDOWS\NOTEPAD.EXE" & " " & CommonDialog1.FileName

Met andere woorden, wanneer er reeds een bestaand bestand is
geselecteerd en hierna op de knop OK geklikt wordt,dan bevat
.FileName het pad van dat bestand EN de naam v.h. bestand.

Bij je nieuwe vraag distribueer je dan .FileName in de
variable sFile. Vervolgens ken je de waarde van sFile aan je Textbox
toe.

Dennis.

P.S. Goed, dat je de With-statement hebt gebruikt, Zo hoort het ook.
Behalve dat het overzichtelijk is, scheelt je ook het steeds intypen van de naam v.h. control. Sinds VB4
is dit ingevoerd.
 
Laatst bewerkt:
Bedankt Dennis! Het werkt ;)
Ik bedoelde eigenlijk bestandsnaam, maar dat was precies een typfoutje :o
 
Laatst bewerkt:
Is het ook mogelijk om de BMP file die wordt ingeladen te kopiëren naar de map waaruit mijn programma draait? Dus als ik de BMP c:\foto.bmp selecteer en mijn tool staat in c:\jan\ dat foto.bmp automatisch naar c:\jan\ gekopieerd wordt. Dank bij voorbaat!
 
Geplaatst door Jan Van Haaren
Is het ook mogelijk om de BMP file die wordt ingeladen te kopiëren naar de map waaruit mijn programma draait? Dus als ik de BMP c:\foto.bmp selecteer en mijn tool staat in c:\jan\ dat foto.bmp automatisch naar c:\jan\ gekopieerd wordt. Dank bij voorbaat!

een file copieren gaat simpel met de statement:

FileCopy "c:\foto.bmp", "c:\jan\foto.bmp"

path moet dan wel al bestaan, dus folder jan.

extra info:

bij project > references > toevoegen: "Microsoft Scripting Runtime"

Option Explicit

Private Sub Form_Load()

Dim strPathVan As String
Dim strPathNaar As String
Dim OverWrite As Boolean

strPathVan = "c:\foto.bmp"
strPathNaar = "c:\jan\foto.bmp"
OverWrite = True

Dim fsoWork As New FileSystemObject
If fsoWork.FileExists(strPathVan) _
Then
fsoWork.CopyFile strPathVan, strPathNaar, OverWrite
Else
MsgBox strPathVan & " File Niet Gevonden"
End If

End Sub
 
Laatst bewerkt:
Thanks, dat werkt, maar is niet helemaal mijn bedoeling. Die namen van files waren maar voorbeeldjes. Nu kopieert ie altijd die ene file weg, maar mijn bedoeling is dat hij de file die geopend wordt in picShow1.Picture automatisch kopieert naar de map waarin het programma staat. En de directory waarin het prog staat kan veranderen... Ik apprecieer het dat je je tijd en moeit erin wil steken, bedankt :thumb:
 
dan dus dit:

Dim sFile, eFile As String

Code:
With dlgCommonDialog 
    .DialogTitle = "Choose your adboard" 
    .CancelError = False 
    .Filter = "Bitmapfiles (.bmp)|*.bmp" 
    .ShowOpen 
    If Len(.FileName) = 0 Then 
        Exit Sub 
    End If 
    sFile = .FileName 
End With 

picShow.Picture = LoadPicture(sFile) 

Text1.text = sFile 'Dit moet je nog erbij doen.

eFile = App.path + "\" + sFile  

FileCopy sFile, eFile

App.path staat dus voor de path waar je programma later in komt.
 
wacht even, bedenk me net:

efile bevat nu een absurd lange pathnaam, omdat het het volledige path bevat van de geselecteerde file + de volledige path van waar je programma staat.

Taxi staat voor de deur, dus moet weg. Maak dat straks goed.
 
aangepast:

Dim sFile, eFile, temp As String
Dim i as Integer

Code:
With dlgCommonDialog 
    .DialogTitle = "Choose your adboard" 
    .CancelError = False 
    .Filter = "Bitmapfiles (.bmp)|*.bmp" 
    .ShowOpen 
    If Len(.FileName) = 0 Then 
        Exit Sub 
    End If 
    sFile = .FileName 
End With 

picShow.Picture = LoadPicture(sFile) 

Text1.text = sFile 'Dit moet je nog erbij doen.

temp = sFile

Do While InStr(temp, "\")

i = InStr(temp, "\")
temp = Mid(temp, i + 1)

Loop

eFile = App.path + "\" + temp

FileCopy sFile, eFile
 
Geplaatst door Jan Van Haaren
Ik krijg steeds een error nu:

"Path/file access error"

Alvast bedankt!

bij mij werkt het gewoon, maar

dat komt omdat of ergens het path niet goed is of omdat de file op readonly staat.

even debuggen, dus (F8 programma doorlopen):

Code:
With dlgCommonDialog 
    .DialogTitle = "Choose your adboard" 
    .CancelError = False 
    .Filter = "Bitmapfiles (.bmp)|*.bmp" 
    .ShowOpen 
    If Len(.FileName) = 0 Then 
        Exit Sub 
    End If 
    sFile = .FileName 
End With 

picShow.Picture = LoadPicture(sFile) 

Text1.text = sFile 'Dit moet je nog erbij doen.

temp = sFile

Do While InStr(temp, "\")

i = InStr(temp, "\")
temp = Mid(temp, i + 1)

Loop

eFile = App.path + "\" + temp

msgbox(sFile)
msgbox(eFile)

FileCopy sFile, eFile

staat in de msgbox het goed path ?
staat die bmp file niet op read only ?
waar krijg je de melding ?
 
OK, fantastisch! Het had met de Read-Only te maken van de file! Nog één klein vraagje: is het ook mogelijk om ipv dezelfde naam te behouden bij het kopiëren dat de file steeds dezelfde naam krijgt?

Je opent dus een file, maakt niet uit welke, bijvoorbeeld: bal.bmp of mens.bmp maar bij het kopiëren naar de map van het programma krijgt die automatisch de naam 1.bmp? Dank bij voorbaat!
 
Geplaatst door Jan Van Haaren
OK, fantastisch! Het had met de Read-Only te maken van de file! Nog één klein vraagje: is het ook mogelijk om ipv dezelfde naam te behouden bij het kopiëren dat de file steeds dezelfde naam krijgt?

Je opent dus een file, maakt niet uit welke, bijvoorbeeld: bal.bmp of mens.bmp maar bij het kopiëren naar de map van het programma krijgt die automatisch de naam 1.bmp? Dank bij voorbaat!

jawel, maakt je leven hier een stuk makkelijker. Want nu kunnen we mijn slimme loop weer weg knallen (snik):

global declareren:

dim aantal As Integer

normaal declareren:

Dim sFile, eFile As String

Code:
With dlgCommonDialog 
    .DialogTitle = "Choose your adboard" 
    .CancelError = False 
    .Filter = "Bitmapfiles (.bmp)|*.bmp" 
    .ShowOpen 
    If Len(.FileName) = 0 Then 
        Exit Sub 
    End If 
    sFile = .FileName 
End With 

picShow.Picture = LoadPicture(sFile) 

Text1.text = sFile 'Dit moet je nog erbij doen.

aantal = aantal + 1
eFile = App.Path + "\" + Trim(Str(aantal)) + ".bmp"

FileCopy sFile, eFile
 
Laatst bewerkt:
Bedankt, het werkt allemaal nu!
Nu nog één laatste vraagje, ipv:

eFile = App.Path + "\" + Trim(Str(aantal)) + ".bmp"

kan je daar ook iets zetten zodat ie naar de bovenliggende map van de tool gaat?
 
Geplaatst door Jan Van Haaren
Bedankt, het werkt allemaal nu!
Nu nog één laatste vraagje, ipv:

eFile = App.Path + "\" + Trim(Str(aantal)) + ".bmp"

kan je daar ook iets zetten zodat ie naar de bovenliggende map van de tool gaat?

jawel, maar dan pakken we mijn loop weer terug. We gaan zo wel heen en terug.

Dim aantal, volgendeTeken, laatsteTeken As Integer
Dim temp as String

Code:
aantal = 1

temp = App.Path
volgendeTeken = 1

Do While volgendeTeken > laatsteTeken

laatsteTeken = volgendeTeken
volgendeTeken = InStr(volgendeTeken + 1, temp, "\")

Loop

temp = Left(App.Path, laatsteTeken)

eFile = temp + Trim(Str(aantal)) + ".bmp"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan