webForumDet fria alternativet

Makrovirus i Excel?

4 svar · 580 visningar · startad av Masten

MastenMedlem sedan feb. 20079 inlägg
#1

Hej!

Jag och en klasskompis håller på med vårt examensarbete som vi gör i MS Excel XP/2003. Vi använder oss av flera delvis egenhändigt ihopknåpade makron som läser in leveransplaner från olika företag och sedan plockar ut data från dessa och skapar pricklistor, inventeringslistor m.m.
Hur som helst, ett problem som nu har uppstått är att antivirusprogrammet (F-Secure) på datorerna vi använder i skolan ibland varnar för att vår xls-fil innehåller någon form av skadlig kod. I rapporten som skapas vid genomsökning av filen står det att filen är "Possibly infected with an unknown virus". Scannar jag filen på min egen dator som kör Avast som antivirusprogram får jag ingen varning.
Kan det vara som så att F-Secure är lite väl känsligt för makron i största allmänhet och därför varnar? Hjälp! :o

MastenMedlem sedan feb. 20079 inlägg
#2

Jag har nu genom att successivt plocka bort delar av makrokoden lyckats hitta vilka delar som ger upphov till virusvarningen i F-Secure:

Sub KopieraCeller2_PoP()
On Error Resume Next
[B][i]Sheets("PL PoP").Range("c4:k300").Copy[/i][/B]
Sheets("Pricklista").Range("c65536").End(xlUp).Offset(2, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
End Sub

samt

Sub ImportFirstSheet_Linde()
Dim ImporteraFilnamn As Variant

Application.ScreenUpdating = False
    
' Avaktiverar automatisk beräkning
Application.Calculation = xlCalculationManual

    ' Använder "GetOpenFilename" istället. Den blir kompaktare
ImporteraFilnamn = Application.GetOpenFilename( _
    "Excel-filer, *.xls", Title:="Välj leveransplan från Linde att importera", MultiSelect:=False)

' Fångar upp cancel/avbryt. Då avslutas makrot
If ImporteraFilnamn = False Then Exit Sub

' Skapar strängvariablerna importFile och firstSheet
Dim importFile As Workbook
Dim firstSheet As Worksheet

' Öppna filen som ska importeras
Set importFile = Workbooks.Open(Filename:=CStr(ImporteraFilnamn))

' Välj ut första bladet i den importerade filen
Set firstSheet = importFile.ActiveSheet
' Tar bort eventuella tomma rader i leveransplanen
RaderaTommarader_levplan_Linde firstSheet.Range("A1:A4")
' Kopiera och klistra in i ett steg
[b][i]firstSheet.Cells.Copy (ThisWorkbook.Worksheets("Levplan Linde").Cells)[/i][/b]
ThisWorkbook.ShowPivotTableFieldList = False

' Välj ut första bladet i den importerade filen
Set firstSheet = importFile.Sheets("Blad1")
' Tar bort eventuella tomma rader i leveransplanen
RaderaTommarader_levplan_Linde firstSheet.Range("A1:A4")
' Kopiera och klistra in i ett steg
firstSheet.Cells.Copy (ThisWorkbook.Worksheets("Levplan Linde 2 kopia").Cells)

' Stäng import-filen
importFile.Close SaveChanges:=False

' Kopiera artikelnummer från leveransplan till prick- och planlista
KopieraCeller_Linde

' Töm urklippet
Application.CutCopyMode = False

' Aktiverar automatisk beräkning
Application.Calculation = xlCalculationAutomatic
    
Application.ScreenUpdating = True
MsgBox "Färdigt!"

End Sub

Inget konstigt med den koden, som jag ser det? De kodrader som F-Secure reagerar på återfinns på flera andra ställen men där ger det inget utslag.

LaspMedlem sedan juli 200010 197 inlägg
#3

Snyggt Jobbat, att isolera orsaken.
Markera tråden som löst och komplettera gärna med dina synpunkter.

stoffe-2kMedlem sedan apr. 20007 795 inlägg
#4

Det kanske finns någon Excel hacker som har en lösning på hur man ska skriva för att undvika att AV-program "bråkar" ?

TosseMedlem sedan aug. 2004126 inlägg
#5

En walkaround kan ju vara att sluta använda copy/paste från vba, vilket ändå är ganska ineffektivt prestandamässigt. Det verkar vara copymetoden i rangeobjektet den inte gillar. F-secure brukar faktiskt klaga för mig med, men jag har aldrig orkat bry mig om varför.

Prova istället Range1.Value = Range2.Value

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb