Jag har skapat ett enkelt VB macro i Word2000 för att hjälpa min far att automatiskt skapa rapporter med infogade fotografier från en källfolder. Stämmer alla referenser? En felaktig referens kan sabba det mesta. Ja det ska dom göra eftersom det bara är en (den som sätter default sökväg till foldern och den är justerad) och jag har försökt skriva helt generellt istället för att använda tex tablestyle (eftersom att sådant kan diffa) Hmm ... Är ändå inne på referenserna, eftersom jag själv sett så mycket strul med Excel och felaktiga referenser. Jag är som sagt var nybörjare och undrar om det verkligen går att kolla referenserna med med koden du bifogade eftersom jag gjort allt som ett macro och ej VBproject > eftersom jag gjort allt som ett macro och ej VBproject Tack för ditt engagemang i frågan vi får se hur det löser sig till slut. Det största problemet är nog som sagt att man ej är på plats utan försökt fjärrstyra genom farsan. Det är ju alltid synd då man försöker göra något för att underlätta och istället uppstår det problem. Ska testköra koden på flickvännens bärbara i kväll så att man lite erfarenhet att importera till en annan dator vilket jag aldrig gjort förut. Har haft exakt samma fel och jag tror att jag är ganska säker på vad det är du ska göra. Någonstans i koden (lessen, men jag orkade inte läsa igenom hela koden) så anropar du en vanlig VB-funktion - typ left eller något. Be din far säga vad det står på raden med felet, så skall du se att du hittar en sån funktion. Skriv sedan "VBA." framför kommandot, dvs. Tack för förslaget, ett litet problem är dock att eftersom att man får kompileringsfel så vägrar den att felsöka överhuvudtaget. Så man får ingen som helst vägledning. Felet som gör att du måste ange VBA före de "inbyggda" kommandona är troligtvis det fel jag redan nämnt: ett referensfel. Om en referens i filen är fel så vet inte VBA vart den ska peka de kommandon man angett. Den söker efter de trasiga referenserna och konstaterar att den inte hittar där, så kommer felmeddelandet. Tack för all hjälp Låter ju bra att du lärt dig mer. :-) Mindre bra att testkoden inte gav nåt. Jag har som default fem (5) referenser i nyskapade worddokument. Jag lade ett inlägg för drygt ett halvår sen om exakt detta fel. Tack för hjälpen Niklas. Börjar bli tjatigt med mitt tackande men som ny även på forumet här så blir man "förvånad" (glad) över den hjälpsamhet andra deltagare visar. Jag lovar att denna förvåning lagt sig till nästa gång jag frågar något och skall då lägga av med detta lismande tjat :^) . <code> Problem att importera VB macro till word
Problemet är att när jag skickat det till honom och väglett honom att importera det till sin normalmall via VB-editorn så får han bara ett meddelande om kompileringsfel. Detta fel får han också om han infogar koden direkt i ett nyskapat macro. Obs versionerna på Word är dom samma.
Förmodligen är detta ett skitfel men det är svårt att avhjälpa då man sitter på annan plats. Vore tacksam om någon kunde hjälpa en nybörjare.
Tack på förhand / RogerSv: Problem att importera VB macro till word
Sv: Problem att importera VB macro till word
/RogerSv: Problem att importera VB macro till word
Kör koden nedan för att kolla att alla referenser i ditt dokument stämmer på användarens dator. Det kan vara så att det ligger med referenser i dokumentet som du inte känner till och inte ens använder, som ändå är felaktiga. Felaktiga referenser kan slå ut de inbyggda kommandona på de mest besynnerliga sätt.
<code>
Dim strFoo As String
Dim i As Integer
Dim n As Integer
'
' Kontrollerar om referens någon
' referens är trasig.
On Error Resume Next
n = ThisDocument.VBProject.References.Count
For i = 1 To n
If ThisDocument.VBProject.References.Item(i).IsBroken = True Then
strFoo = "Referensen " & ThisDocument.VBProject.References.Item(i).Name & _
vbNewLine & "Sökvägen som angetts är " & _
ThisDocument.VBProject.References.Item(1).FullPath & vbNewLine & _
"Kontrollera denna."
strFoo = MsgBox(strFoo, vbCritical + vbOKOnly, "Referensfel:")
End If
Next i
</code>
/EESv: Problem att importera VB macro till word
Jag bifogar koden här nedan (den är inte allt för lång), som du ser är det inga direkta konstigheter. /Roger
<code>
Sub Fotoinfogare_allm()
'
' Fotoinfogare Macro
' Macro recorded 2002-01-04 by Roger
'************ FORMATERAR SIDAN ************************
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientPortrait
.TopMargin = CentimetersToPoints(2)
.BottomMargin = CentimetersToPoints(1.5)
.LeftMargin = CentimetersToPoints(2)
.RightMargin = CentimetersToPoints(1.5)
.HeaderDistance = CentimetersToPoints(1.2)
.FooterDistance = CentimetersToPoints(0.7)
End With
'******* SÄTTER IN SID HUVUD & SIDFOT *****************
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
With Selection.Tables(1)
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
'Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
Selection.Font.Size = 9
Selection.Font.Color = wdColorGray50
Selection.Copy
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=Date
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
If Selection.HeaderFooter.IsHeader = True Then
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Else
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
End If
Selection.Paste 'AndFormat (wdPasteDefault)
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.TypeText Text:="- FÖRETAG -"
Selection.TypeParagraph
Selection.TypeText Text:="NAMN"
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Size = Selection.Font.Size - 1
Selection.Font.Italic = wdToggle
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
Selection.TypeText Text:="()"
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldNumPages
Selection.EndKey Unit:=wdLine
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Color = wdColorGray50
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeParagraph
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
'***********************************************************************
'*********** FRÅGAR EFTER FOLDERN MED BILDERNA *************************
Dim Message, Title, Default, MyValue
Message = "Skriv in sökvägen till projekt foldern" ' Set prompt.
Title = "FOTOINFOGARE" ' Set title.
Default = "C:\windows\Desktop\FotoDokument" ' Standard foldern.
' Visar message, title, and default value.
MyValue = InputBox(Message, Title, Default)
If MyValue = "" Then
Exit Sub
End If
'******* SÖKER EFTER BILDER I FOLDERN INFOGAR OCH ÄNDRAR STORLEKEN PÅ DESSA ********
Set fq = Application.FileSearch
With fq
.LookIn = MyValue
.FileName = "*.jpg"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
e = .FoundFiles(i) 'för att få in variabeln senare
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:= _
2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed
Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderRight).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
Selection.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
Selection.MoveLeft Unit:=wdCharacter, Count:=1
With Selection.Tables(1)
.TopPadding = CentimetersToPoints(0)
.BottomPadding = CentimetersToPoints(0)
.LeftPadding = CentimetersToPoints(0)
.RightPadding = CentimetersToPoints(0)
.Spacing = 0
.AllowPageBreaks = True
.AllowAutoFit = True
End With
Selection.MoveRight Unit:=wdCharacter, Count:=1
With Selection.Cells(1)
.TopPadding = CentimetersToPoints(0)
.BottomPadding = CentimetersToPoints(0)
.LeftPadding = CentimetersToPoints(0.1)
.RightPadding = CentimetersToPoints(0)
.WordWrap = True
.FitText = False
End With
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InlineShapes.AddPicture FileName:= _
e, LinkToFile:=False, SaveWithDocument:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection.InlineShapes(1).Height >= Selection.InlineShapes(1).Width Then
Selection.InlineShapes(1).Height = CentimetersToPoints(11)
Selection.InlineShapes(1).ScaleWidth = Selection.InlineShapes(1).ScaleHeight
Else
Selection.InlineShapes(1).Width = CentimetersToPoints(11)
Selection.InlineShapes(1).ScaleHeight = Selection.InlineShapes(1).ScaleWidth
End If
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeParagraph
Selection.TypeText Text:=FileDateTime(e)
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Size = Selection.Font.Size - 1
Selection.Font.Italic = wdToggle
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.TypeParagraph
Next i
Else
MsgBox "Det fanns inga bilder i foldern! Kontrollera sökvägen."
End If
End With
End Sub
</code>.Sv: Problem att importera VB macro till word
Det är efter vad jag vet samma sak. I Word, Excel m fl har du möjligheten att skriva macron, som då körs i Visual Basic for Applications. Hur du väljer att skriva/spela in dina macron spelar ingen roll, de kommer ändå vara en del av VB-Projektet som är knutet till/i ditt dokument.
Jag har kollat lite snabbt på din kod, men ser inga fel. Fungerar jättebra på min burk här med NT4 och Word 2000.
Så återigen: testa att köra koden för att kolla referenserna. Om din fil/ditt projekt anropar en referens som finns på annat ställe i användarens dator så kan du som sagt var få skumma fel. Om det inte är det så har du i alla fall testat.
Kommentarer annars är att du bör ta för vana att tala om vad dina variabler skall vara av för slag genom att använda Dim. Sätt Option Explicit överst på kodsidan för att inte missa nåt.
Mvh
/EESv: Problem att importera VB macro till word
Tack / RogerSv: Problem att importera VB macro till word
Left(s,1)
blir
VBA.Left(s,1)
Det löste mitt problem i allafall...
/Niklas JanssonSv: Problem att importera VB macro till word
Tack / Roger
Hade hoppats att det skulle bli samma problem vid testkörning på flickvännens bärbara men där funkade allt såklart :( Sv: Problem att importera VB macro till word
För att se referenser i VB-Editor väljer man Verktyg/Referenser.
/EESv: Problem att importera VB macro till word
Efter en sen natt har min VB kunskap/erfarenhet växt med närmare 100%(om man ser till tid, nybörjare som sagt var:^) ) . Problemet är förstås inte löst (pga avståndet) men programet har växt med dialogrutor och koden snyggats/spjälkats upp.
Jag har nu nått en nivå av kunskap att jag kan förstå era svar och inser att det förmodligen hänger på referenserna, även om dom är få(VB For App, MS Word 10.0 Obj Lib, MS Forms 2.0 Obj Lib). Tyvärr är det lite svårt att fjärrstyra farsan (Hmm PC Anywhere kanske).
Finns det några förhållnings regler för att undvika detta i framtiden? dvs "säkra" referensbiblotek? Det är ju tråkigt om man bara kan skriva åt sig själv.
Jag provade att köra referenstestkoden här hemma men
<code>
n = ThisDocument.VBProject.References.Count
</code>
ger n = 0 så man kommer ej in i For slingan, är det ett referensfel månne :^(
Det ordnar sig nog / RogerSv: Problem att importera VB macro till word
Men vad du annars kan göra är att ta bort de referenser som står där, en efter en och se om det fungerar ändå. När du rensat så gott det går så skickar du filen till användaren på nytt.
Sen kan du lägga till min "referenstest" som autostart i ditt dokument, så att testen körs automatiskt på användarens dator.
PC Anywhere är ett bra program. Fungerar utmärkt. :-)
Lycka till.
/EESv: Problem att importera VB macro till word
Det intressanta var att referenserna var identiska, och det _enda_ sättet jag kunde lösa det på vara att referera till VBA.
Vid det tillfället försökte "EE" hjälpa även mig (tack för det, i och för sig), men jag måste nog tyvärr ändå fortsätta hävda min sak i frågan...
Jag är osäker på om det är dem, men prova att lägga till VBA. före MsgBox och InputBox.
Sedan kan jag rekommendera en bok om VBA-programmering för Excel -inte helt oväntat "VBA Programming in Excel 2000" (gäller inte bara för 2000). Där får du en hel del tips om hur du bör skriva koden. Du skulle till exempel kunna eliminera alla selection.-delar.
/Niklas JanssonSv: Problem att importera VB macro till word
</code>
Angående problemet så blir man lite trött bara att det skall behöva vara så bökigt. Men nu så känns det som om jag har en arsenal att prova, hoppas fortfarande att man skall slippa åka hem för att få det att funka. <code>
</code>
Vet med mig att selectionsatserna känns lite bakvänt, har blivit av med dom värsta och försöker nu infoga objekt som redan är formaterade. Bra med ett tips på litteratur, kan tänka mig att den för excel är bättre eftersom det finns lite mer användning där. Det brukar vara svårt att hitta böcker som inte är för lätta men ändå relevanta.<code>
</code>
/Roger <code>
</code>
(Ska man måsta infoga blankrader med code här på forumetför att glesa ut texten?)