Just nu i M3-nätverket
Gå till innehåll

VBA låsa? wordmall så att anv. inte kan spara ändringar i mall


Madeleine

Rekommendera Poster

Hej,

 

i en wordmall har jag skapat ett macro som tar bort ett "autonew"-macro när man skickar iväg det som mail.

 

Mitt problem är att användaren får frågan om den vill spara ändringar i dokumentmallen vid stängning av dokumentet och råkar de då svara "ja" så går det inte att använda mallen fler gånger...

Går det på något sätt att kringgå, så att de inte får chansen att svara ja på en sån fråga?

 

 

Länk till kommentar
Dela på andra webbplatser

Vet inte om jag tänker rätt nu, men kan du inte öppna/stänga mallen själv utan att spara? typ

Mall.Close SaveChanges:=wdDoNotSaveChanges (eller 0)

 

Ett helt bakvänt exempel, men jag tror själva öppna/stäng principen borde fungera:

//eforum.idg.se/viewmsg.asp?EntriesId=574995#658296

 

Förmodligen tänker jag helt fel här. Kan inte riktigt greppa hur du gör innan.

 

Länk till kommentar
Dela på andra webbplatser

svårt att förklara. Gör ett försök

 

1. användaren öppnar en mall och makrot autonew aktiveras automatiskt.

 

2. när användaren är klar så aktiverar denne själv makrot "send mail", för att i sin tur sända dokumentet till kund.

 

2. Autonew startas automatiskt och har referenser till en ini.fil. Det gör den även hos kunden, vilket orsakar någon form av körfel eftersom kunden varken skall eller har tillgång till ini-filen.

 

Det är därför som jag vill plocka bort makrot autonew i sendmail makrot och därefter inte spara ändringarna i mallen (som är kvar hos användaren) eftersom den skall användas med makrot autonew även i fortsättningen.

 

Något klarare:-)

 

Länk till kommentar
Dela på andra webbplatser

Lite sent svar, men jag känner mig enbart förvirrad...

 

Öppnar din användare mallen som mall? Inte ett nytt dokument baserat på mallen (arkiv->nytt, som dokument)? Om metod 2 används så följer ju inte makron Autonew med dokumentet som skapas utifrån mallen.

 

Eller använder du ett "vanligt" dokument som förlaga/mall? Då har jag svarat uppåt väggarna.

 

Länk till kommentar
Dela på andra webbplatser

Hej, då är vi två förvirrade :-)

 

Användarna öppnar mallen som ett nytt dokument, via arkiv -> nytt. Det märkliga är att när de sedan stänger dokumentet kommer först frågan om de vill spara dokumentet och sedan om de vill spara ändringarna i mallen...

 

Länk till kommentar
Dela på andra webbplatser

Ok, men det betyder väl att du rensar bort Autonew i din mall istället för i "slutkundsdokumentet", eller?

 

Men om "Autonew" bara finns i mallen så skulle slutkundsdokumentet ha varit rent och du skulle inte ha behövt skapa rensningsmakrot...

 

Svarar nej på min egen fråga. Det kan ju vara en helt annan ändring den vill spara, typ ????

 

Hur pass hemligt är ditt projekt? Blir lite nyfiken på hur du koden för "send mail" ser ut. Dels hur du bestämmer vad som skickas och dels hur själva "Autonew" rensningen ser ut.

 

Annars vet jag inte. Det borde ju finnas en allmän mall-motsvarighet till "fråga om ändringar i normal.dot skall sparas" eller vad det heter.

 

Annars är jag tillbaks till första posten. Dvs att du stänger mallen manuellt utan att spara ändringar när slutkundsdokumentet är skickat.

 

Typ

Mall.Close SaveChanges:=wdDoNotSaveChanges (eller 0)

Där Mall = ActiveDocument.AttachedTemplate (på något sätt)

 

Borde ju gå ganska smidigt.

/M

 

Länk till kommentar
Dela på andra webbplatser

Koden är inte speciellt hemlig... håller precis på att lära mig så den är väl bara inte speciellt snygg...

 

din lösning att autonew bara finns i mallen låter väldigt intressant

 

Prövade ditt förslag med "Mall.Close SaveChanges:=wdDoNotSaveChanges" men fick det inte att fungera

 

här kommer koden:

 

*******************************************

Sub SendDocumentAsAttachment()

Dim bStarted As Boolean

'Dim oOutlookApp As Outlook.Application

'Dim oItem As Outlook.MailItem

 

On Error Resume Next

 

If Len(ActiveDocument.Path) = 0 Then

MsgBox "Dokumentet måste sparas först!"

Exit Sub

End If

 

' *** Tar bort makrot Autonew ***

With ThisDocument.VBProject.VBComponents

.Remove .Item("AutoNew")

End With

 

' *** Gör så att verktygsfältet döljs ***

blnBar = CommandBars("S1").Visible ' = False

On Error Resume Next

If blnBar = True Then

With CommandBars("S1")

.Visible = False

.Position = msoBarTop

End With

End If

 

' *** Sparar

ActiveDocument.Save

 

 

Set oOutlookApp = GetObject(, "Outlook.Application")

If err <> 0 Then

Set oOutlookApp = CreateObject("Outlook.Application")

bStarted = True

End If

 

Set oItem = oOutlookApp.CreateItem(olMailItem)

 

' *** Hämtar kundens E-postadressadress ***

ActiveDocument.Unprotect Password:=""

ActiveWindow.ActivePane.View.SeekView = wdSeekFirstPageHeader

Selection.HomeKey wdStory

Selection.MoveRight wdCell, Count:=33

If txtErepost = "" Then strErepost = " " Else strErepost = txtErepost

If Selection.Text <> Chr(13) Then strErepost = Selection Else strErepost = " "

ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

ActiveDocument.Protect Password:="", NoReset:=True, Type:= _

wdAllowOnlyFormFields

 

With oItem

.To = strErepost

.Subject = "Garanti/Retur av produkt"

.Attachments.Add ActiveDocument.Path & "\" & ActiveDocument.Name

.Display

End With

 

Set oItem = Nothing

Set oOutlookApp = Nothing

 

End Sub

**********************************************

 

 

 

Länk till kommentar
Dela på andra webbplatser

Hej, har inte haft tid att tränga in i din kod riktigt. Men du kan väl spara en kopia av din mall och slänga in lite felsökningskod, typ

 

[log]

Public Sub AutoNew()

MsgBox ("hej hå, AutoNew finns kvar")

End Sub

 

Sub SendDocumentAsAttachment()

 

' *** Tar bort makrot Autonew ***

' Kolla vilket dokument du egentligen tar bort

' autonew ifrån

MsgBox ("Tar bort autonew från " & ThisDocument.Name)

 

' *** Gör så att verktygsfältet döljs ***

'Funderade på om det kan vara den här ändringen som

' sparas i mallen? Vad tror du?

 

MsgBox ("sparar " & ActiveDocument.Name)

' Kolla vilket dokument som är aktivt (det du sparar)

 

Set oOutlookApp = GetObject(, "Outlook.Application")

If Err <> 0 Then

Set oOutlookApp = CreateObject("Outlook.Application")

bStarted = True

End If

 

Set oItem = oOutlookApp.CreateItem(olMailItem)

 

' *** Hämtar kundens E-postadressadress ***

strErepost = "xxx@xxx.xx"

 

With oItem

.To = strErepost

.Subject = "attachar dokument = " & ActiveDocument.Name

.Display

End With

 

Set oItem = Nothing

Set oOutlookApp = Nothing

End Sub

[/log]

 

Om jag fattar det rätt så är ju "ThisDocument" mallen. Dvs du tar bort autonew från mallen, inte dokumentet (som du hittar med ActiveDocument).

 

Jag Tror nästan att du kan strunta i hela autonew rensningen! Den behövs helt enkelt inte. Vet inte hur du fick med den i slutkundsdokumentet. Kan det vara så att problemet bara fanns i tidigare (felaktig) kod? Typ att du skickade mallen istället för dokumentet?

 

Om du inte får till det så kan du avsluta med manuella stäng och spara/spara inte.

 

 

' du måste (tror jag) stänga dokumentet innan du kan stänga mallen.

' Eftersom du sparade dokumentet tidigare så borde det inte behövas

' igen och mallen vill du ju inte spara

 

ActiveDocument.close SaveChanges:=wdDoNotSaveChanges

ThisDocument.close SaveChanges:=wdDoNotSaveChanges

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...