macros从一个工作簿复制到另一个,运行没有错误,但somtimes不起作用

我在Excel中慢慢学习VBA,所以我确信这个代码可以被选中。 基本上用户用这个信息填充这个区域,然后单击一个在后台复制它们填充的数据的button,打开一个新的工作簿并将其粘贴到下一个打开的行中。 有许多用户,对于一些用户而言,对于其他用户而言,它运行时没有错误,但是他们的信息不会被粘贴到新的用户中。 位置。 最后的大部分内容都是重新格式化的,但是我不想把它拿出来,以免它成为问题的一部分。 任何帮助是极大的赞赏!!

Function IsWorkBookOpen(FileName As String) Dim ff As Long, ErrNo As Long On Error Resume Next ff = FreeFile() Open FileName For Input Lock Read As #ff Close ff ErrNo = Err On Error GoTo 0 Select Case ErrNo Case 0: IsWorkBookOpen = False Case 70: IsWorkBookOpen = True Case Else: Error ErrNo End Select End Function Sub FF_Temp_Upload() ' ' FF_Temp_Upload Macro ' Application.ScreenUpdating = False Dim Workbk As Workbook Set Workbk = ThisWorkbook Dim LR As Long Dim Cell As Long Dim Ret As String LR = Range("B" & Rows.Count).End(xlUp).Row Ret = IsWorkBookOpen("Location of the 2nd workbook/OVS Upload Template.xlsx") If Ret = True Then MsgBox "Template is currently being updated elsewhere. Please try again." Exit Sub Else Workbooks.Open FileName:= _ "Location of the 2nd workbook/OVS Upload Template.xlsx" End If Workbk.Activate Range("A2:C" & LR).Select Selection.Copy Windows("OVS Upload Template.xlsx").Activate If Range("A2") = "" Then Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Else Range("A1").Select Selection.End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If Workbk.Activate Range("H2:H" & LR).Select Application.CutCopyMode = False Selection.Copy Windows("OVS Upload Template.xlsx").Activate If Range("L2") = "" Then Range("L2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Else Range("L2").Select Selection.End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If ActiveSheet.Range("$A$1:$M$100000").RemoveDuplicates Columns:=1, Header:=xlYes LR = Range("B" & Rows.Count).End(xlUp).Row Range("B2:B" & LR) = "=text(left(A2,8),""00000000"")" Range("B2:B" & LR).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Range("C2:C" & LR) = "=""DCG""&MID(A2,9,4)" Range("C2:C" & LR).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False Range("D2:D" & LR).Select Selection.Formula = "DT" Range("I2:I" & LR).Select Selection.Formula = "730" Range("M2:M" & LR).Select Selection.Formula = "MAJOH73" ActiveWorkbook.Save ActiveWindow.Close Workbk.Activate MsgBox "Articles Uploaded" End Sub 

您不要在代码中的任何位置引用Worksheets 。 因此,对于一些用户来说,它是有效的,而对于一些用户来说却不行

对于那些工作 – 他们的Excel文件被保存与select正确的工作表。

对于那些不工作的人 – 他们的Excel文件被保存在select错误的工作表中。 因此,打开时, ActiveSheet是错误的,代码在那里工作。


要修复它(快速和肮脏)重写您的代码,引用工作表是这样的:

 Worksheets("MyWorksheet").Range("$A$1:$M$100000").RemoveDuplicates Columns:=1 

然后尝试避免SelectionActiveSheet – 如何避免使用selectExcel VBA中 。 最后,每个范围或单元应该与引用的工作表一起使用。 喜欢这个:

 With Worksheets("MyName") .Range("D2:D" & LR).Formula = "DT" .Range("I2:I" & LR).Formula = "730" .Range("M2:M" & LR).Formula = "MAJOH73" End With