08. marts 2007 - 23:27Der er
2 kommentarer og 1 løsning
Auto_Open - gem som makro
Hejsa
Nu har jeg problemer igen.
Jeg har denne makro:
Private Sub Workbook_Open() Dim ck As Boolean If newName = "" Then str1 = "Enter New File Name Here" Else str1 = newName End If ck = Application.Dialogs(xlDialogSaveAs).Show(str1) If ck = True Then newName = ActiveWorkbook.Name End If End Sub
Det jeg egentlig vil er at placere den i en skabelon jeg har og så skal denne funktionen auto-åbne. Men hvis man har gemt arket en gang som skal makroen ikke kører næste gang man åbner dokumentet.
Kan jeg desuden definere hvilket bibliotek filen skal placeres i og måske en foruddefineret tekst ?
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
Private Sub Workbook_Open() Dim ck As Boolean If Right(ThisWorkbook.Name, 3) = "xlt" Then If newName = "" Then str1 = "Enter New File Name Here" Else str1 = newName End If ck = Application.Dialogs(xlDialogSaveAs).Show(str1) If ck = True Then newName = ActiveWorkbook.Name End If End If End Sub
Rem Version 5 Rem ========= Const AarsTalSti = "C:\Documents and Settings\pb\Skrivebord\0903MicRastad\Aarstal.xls" 'tilpasses Const gemSomSti = "C:\Documents and Settings\pb\Skrivebord\0903MicRastad\Kunder\" 'tilpasses Const KunderSti = "C:\Documents and Settings\pb\Skrivebord\0903MicRastad\Kunder.xls" 'tilpasses Const UnderMap1 = "\Regnskaber\" 'UnderMap2 = årsTal
Dim ÅrXLS As Object, kXLS As Object, passFlag As Boolean Private Sub CommandButton1_Click() 'Gem If Me.f_kundeNavn <> "" And Me.f_årsTal <> "" Then udførGem Else MsgBox ("Kundenr. eller årstal ikke udfyldt") End If End Sub Private Sub udførGem() Dim sti As String, gemMappe As String, uMappe As String
Rem check drev On Error GoTo sti_Fejl
sti = gemSomSti If Right(sti, 1) <> "\" Then sti = sti + "\" End If
Rem Check om "GemMappe" i GemSomStien gemMappe = findGemMappe(sti, Me.f_kundeNr) If gemMappe = "" Then GoTo kundeMappeFindesIkke End If
Rem Check om "underMap1" findes til kundeMappen gemMappe = gemMappe + UnderMap1 On Error GoTo opretUnderMappe ChDir sti + gemMappe
Rem Check om "underMap2" (årstal) findes til underMap1 gemMappe = gemMappe + Me.f_årsTal On Error GoTo opretUnderMappe ChDir sti + gemMappe
Rem KundeMappe Ok - gem filen On Error GoTo fejlGemSti ActiveWorkbook.SaveAs sti + gemMappe + "\" + Me.f_kundeNr + " Regnskab " + Me.f_årsTal + ".xls"
Rem Luk userform CommandButton2_Click 'kan fjernes, hvis lukning ikke ønskes Exit Sub
opretUnderMappe: MkDir sti + gemMappe Resume Next
fejlGemSti: MsgBox ("Fejl i GemSti - sandsynligvis illegalt tegn i årstal") Exit Sub
kundeMappeFindesIkke: MsgBox ("KundeMappe findes ikke") Exit Sub
sti_Fejl: MsgBox ("Fejl i en sti-angivelse") End Sub Private Sub CommandButton2_Click() 'Annuller Unload UserForm1 End Sub Private Sub f_kundeNr_Enter() Me.f_kundeNavn = "" End Sub Private Sub f_kundeNr_Exit(ByVal Cancel As MSForms.ReturnBoolean) If passFlag = False Then passFlag = True If Me.f_kundeNr <> "" And IsNumeric(Me.f_kundeNr) = True Then Me.f_kundeNavn = søgKunde(Val(Me.f_kundeNr)) If Me.f_kundeNavn <> "" Then Me.f_årsTal.SetFocus End If
kXLS.Quit Set kXLS = Nothing End If passFlag = False End If End Sub Private Sub f_årsTal_Exit(ByVal Cancel As MSForms.ReturnBoolean) Rem Evt. "/" erstattes af "-" - illegalt tegn
If Me.f_årsTal <> "" Then p = InStr(Me.f_årsTal, "/") If p > 0 Then Me.f_årsTal = Left(Me.f_årsTal, p - 1) + "-" + Mid(Me.f_årsTal, p + 1) End If End If End Sub Private Function søgKunde(kNr) Set kXLS = CreateObject("Excel.application") With kXLS .Workbooks.Open KunderSti .Sheets(1).Activate Max = .ActiveCell.SpecialCells(xlLastCell).Row For r = 1 To Max If .Cells(r, 1) = kNr Then søgKunde = .Cells(r, 2) Exit Function End If Next r End With søgKunde = "" MsgBox ("Det indtastede kundenr. kunne ikke findes") End Function Private Function findGemMappe(sti, kNr) Rem Søger efter mappe med navnet: Kundenr+BLANK i begyndelsen af MappeNavnet Dim fs, f, f1, fc, s, xKnr kNr = CStr(Val(kNr)) 'fjerner foranstillede nuller
Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(sti) Set fc = f.SubFolders For Each f1 In fc If InStr(f1.Name, kNr + " ") = 1 Or InStr(f1.Name, kNr) = 1 Then findGemMappe = f1.Name 'Fulde mappeNavn returneres.. Exit Function End If Next findGemMappe = "" End Function Private Sub UserForm_activate() indlæsÅrstal
Me.f_kundeNr.SetFocus End Sub Private Sub indlæsÅrstal() 'årstal forventes i kolonne 1 On Error GoTo fejlÅrstalSti
Set ÅrXLS = CreateObject("Excel.application") With ÅrXLS .Workbooks.Open AarsTalSti .Sheets(1).Activate Max = .ActiveCell.SpecialCells(xlLastCell).Row For r = 1 To Max Me.f_årsTal.AddItem .Cells(r, 1) Next r End With
ÅrXLS.Quit Set ÅrXLS = Nothing Exit Sub
fejlÅrstalSti: MsgBox ("Fejl i sti t/Årstal.xls") End Sub
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.